Generate structured video transcripts from local files or video URLs using Gemini Files API. Use when a GitHub or Linear tracker item, comment, or attachment includes a screen recording, .mov, .mp4, or tracker-hosted video and you need a <video-transcripts> block instead of hand-written notes.
Run the helper once per relevant video:
bash .agents/skills/video-transcripts/scripts/generate_video_transcript.sh \
"https://uploads.linear.app/.../screen-recording.mov" \
--title "PDF preview hyperlinks trigger leave-page modal"
Or for a GitHub attachment:
bash .agents/skills/video-transcripts/scripts/generate_video_transcript.sh \
"https://github.com/user-attachments/assets/..." \
--title "Slash menu loses selection after confirm"
Or for a local file:
bash .agents/skills/video-transcripts/scripts/generate_video_transcript.sh \
"/absolute/path/to/video.mov" \
--title "Preview hyperlink exits workflow"
For auth-gated Linear uploads, the helper automatically retries with cookies from the local Linear desktop app on macOS. For private GitHub asset URLs, it retries with , , or when available.
GITHUB_TOKENGH_TOKENgh auth tokenuploads.linear.app.<video-transcripts>
<video-transcript title="...">
[00:00] (...)
</video-transcript>
</video-transcripts>
--title.```xml
<video-transcripts>
<video-transcript
source-key="https://tracker-hosted-video/<stable-path-without-query>"
>
[00:00] (...)
</video-transcript>
</video-transcripts>
```
<video-transcript ...> blocks under a single <video-transcripts> wrapper in that cache comment or reply.source-key is the normalized stable identifier for the media. For signed tracker-hosted URLs like uploads.linear.app, strip the query string so a new signature does not invalidate an otherwise valid cache entry.title to cached <video-transcript> entries unless a later workflow truly needs it.docs/ for raw tracker transcript cache. That is durable repo knowledge space, not raw issue evidence.codex exec, prefer -o <file> so the final XML is captured without CLI progress chatter.[MM:SS] (...) line per observed action or system response.The helper defaults to gemini-3.1-flash-lite-preview for cost efficiency.
If that output is malformed, too thin, or obviously noisy, it retries with gemini-3-flash-preview.
For Gemini 3 models, the helper forces minimal thinking so output budget goes to the transcript instead of hidden reasoning.
Override with:
VIDEO_TRANSCRIPTS_MODEL=gemini-3-flash-preview bash .agents/skills/video-transcripts/scripts/generate_video_transcript.sh ...
Or:
bash .agents/skills/video-transcripts/scripts/generate_video_transcript.sh ... \
--model gemini-2.5-flash
uploads.linear.app URLs, it first tries LINEAR_COOKIE_HEADER, then LINEAR_COOKIES_DB, then falls back to the local Linear desktop cookie store at ~/Library/Application Support/Linear/Cookies.GITHUB_TOKEN, then GH_TOKEN, then gh auth token, then falls back to an unauthenticated download.GEMINI_API_KEY, then GOOGLE_API_KEY.~/.bash_profile before failing.--debug-dir <dir> when you want request and response artifacts saved.