upload_video
Upload a local video (MP4, MOV, WebM; max 100MB) to Bluesky's video service, which transcodes it and returns a processed blob descriptor for embedding in posts.
Instructions
Upload a video to Bluesky through the app.bsky.video service (video.bsky.app), which transcodes it for playback and stores the processed blob on your PDS. Reads a local video file (MP4, MOV, or WebM; max 100 MB), checks your account video-upload quota, uploads with a service-auth token, polls processing until it completes, and returns the PROCESSED video blob descriptor — pass the returned video.blob object verbatim as embed.video.video in create_post, and any video.captions[].file descriptors as embed.video.captions[].file. WebVTT caption tracks are uploaded as ordinary PDS blobs; caption files the embed lexicon does not support (over 20 kB) are skipped. Requires authentication (app password). Use upload_image instead for still images. Subject to per-tool rate limiting and the video service daily quota.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| filePath | Yes | Absolute or relative path to the video file on disk. Must resolve within the allowed media directory (ATPROTO_MEDIA_DIR env var, defaults to cwd). Accepted extensions: .mp4, .mov, .webm. Maximum file size 100 MB (the app.bsky.video service limit). | |
| altText | No | Accessible alt-text description of the video (max 1000 characters). Omit if no description is available. | |
| captions | No | Optional list of caption tracks to attach to the video. Each entry pairs a language code with a WebVTT file path. |
Output Schema
| Name | Required | Description | Default |
|---|---|---|---|
| success | Yes | Whether the upload and processing succeeded. | |
| message | Yes | Human-readable status message. | |
| video | Yes | Processed video blob descriptor and metadata. Pass the `blob` object as create_post embed.video.video and each `captions[].file` as embed.video.captions[].file. |