browser-use/video-use35 files

Video Use

Edit any video by conversation. Transcribe, cut, color grade, generate overlay animations, burn subtitles — for talking heads, montages, tutorials, travel, interviews. No presets, no menus. Ask questions, confirm the plan, execute, iterate, persist. Production-correctness rules are hard; everything else is artistic freedom.

Specification
Skill ID
browser-use/video-use/video-use
Publisher
browser-use
Repository
video-use
Installs
0
Files
35
Synced
Sep 23, 2026
How to use it

Open any RiverX project, open the Skills panel in the chat, and search for this identifier. The files are fetched from the source repository at install time.

browser-use/video-use/video-useInstalls these files
  • .env.example
  • .gitignore
  • LICENSE
  • README.md
  • SKILL.md
  • helpers/grade.py
  • helpers/pack_transcripts.py
  • helpers/render.py
  • helpers/timeline_view.py
  • helpers/transcribe.py
  • helpers/transcribe_batch.py
  • install.md
  • poster.html
  • pyproject.toml
  • skills/manim-video/README.md
  • skills/manim-video/SKILL.md
  • skills/manim-video/references/animation-design-thinking.md
  • skills/manim-video/references/animations.md
  • skills/manim-video/references/camera-and-3d.md
  • skills/manim-video/references/decorations.md
  • skills/manim-video/references/equations.md
  • skills/manim-video/references/graphs-and-data.md
  • skills/manim-video/references/mobjects.md
  • skills/manim-video/references/paper-explainer.md
  • skills/manim-video/references/production-quality.md
  • skills/manim-video/references/rendering.md
  • skills/manim-video/references/scene-planning.md
  • skills/manim-video/references/troubleshooting.md
  • skills/manim-video/references/updaters-and-trackers.md
  • skills/manim-video/references/visual-design.md
  • skills/manim-video/scripts/setup.sh
  • static/timeline-view.svg
  • static/video-use-banner.png
  • tests/test_render_fps.py
  • tests/test_render_orientation.py

What this skill tells the agent

Video Use

Principle

  1. LLM reasons from raw transcript + on-demand visuals. The only derived artifact that earns its keep is a packed phrase-level transcript (takes_packed.md). Everything else — filler tagging, retake detection, shot classification, emphasis scoring — you derive at decision time.
  2. Audio is primary, visuals follow. Cut candidates come from speech boundaries and silence gaps. Drill into visuals only at decision points.
  3. Ask → confirm → execute → iterate → persist. Never touch the cut until the user has confirmed the strategy in plain English.
  4. Generalize. Do not assume what kind of video this is. Look at the material, ask the user, then edit.
  5. Artistic freedom is the default. Every specific value, preset, font, color, duration, pitch structure, and technique in this document is a worked example from one proven video — not a mandate. Read them to understand what's possible and why each worked. Then make your own taste calls based on what the material actually is and what the user actually wants. The only things you MUST do are in the Hard Rules section below. Everything else is yours.
  6. Invent freely. If the material calls for a technique not described here — split-screen, picture-in-picture, lower-third identity cards, reaction cuts, speed ramps, freeze frames, crossfades, match cuts, L-cuts, J-cuts, speed ramps over breath, whatever — build it. The helpers are ffmpeg and PIL. They can do anything the format supports. Do not wait for permission.
  7. Verify your own output before showing it to the user. If you wouldn't ship it, don't present it.

Hard Rules (production correctness — non-negotiable)

These are the things where deviation produces silent failures or broken output. They are not taste, they are correctness. Memorize them.

  1. Subtitles are applied LAST in the filter chain, after every overlay. Otherwise overlays hide captions. Silent failure.
  2. Per-segment extract → lossless `-c copy` concat, not single-pass filtergraph. Otherwise you double-encode every segment when overlays are added.
  3. 30ms audio fades at every segment boundary (afade=t=in:st=0:d=0.03,afade=t=out:st={dur-0.03}:d=0.03). Otherwise audible pops at every cut.
  4. Overlays use `setpts=PTS-STARTPTS+T/TB` to shift the overlay's frame 0 to its window start. Otherwise you see the middle of the animation during the overlay window.
  5. Master SRT uses output-timeline offsets: output_time = word.start - segment_start + segment_offset. Otherwise captions misalign after segment concat.
  6. Never cut inside a word. Snap every cut edge to a word boundary from the Scribe transcript.
  7. Pad every cut edge. Working window: 30–200ms. Scribe timestamps drift 50–100ms — padding absorbs the drift. Tighter for fast-paced, looser for cinematic.
  8. Word-level verbatim ASR only. Never SRT/phrase mode (loses sub-second gap data). Never normalized fillers (loses editorial signal).
  9. Cache transcripts per source. Never re-transcribe unless the source file itself changed.
  10. Parallel sub-agents for multiple animations. Never sequential. Spawn N at once via the Agent tool; total wall time ≈ slowest one.
  11. Strategy confirmation before execution. Never touch the cut until the user has approved the plain-English plan.
  12. All session outputs in `<videos_dir>/edit/`. Never write inside the video-use/ project directory.

Everything else in this document is a worked example. Deviate whenever the material calls for it.

Directory layout

The skill lives in video-use/. User footage lives wherever they put it. All session outputs go into <videos_dir>/edit/.

<videos_dir>/
├── <source files, untouched>
└── edit/
    ├── project.md               ← memory; appended every session
    ├── takes_packed.md          ← phrase-level transcripts, the LLM's primary reading view
    ├── edl.json                 ← cut decisions
    ├── transcripts/<name>.json  ← cached raw Scribe JSON
    ├── animations/slot_<id>/    ← per-animation source + render + reasoning
    ├── clips_graded/            ← per-segment extracts with grade + fades
    ├── master.srt               ← output-timeline subtitles
    ├── downloads/               ← yt-dlp outputs
    ├── verify/                  ← debug frames / timeline PNGs
    ├── preview.mp4
    └── final.mp4

Setup

First-time install lives in install.md (clone, deps, ffmpeg, skill registration, API key). Don't re-run it every session; on cold start just verify:

  • ELEVENLABS_API_KEY resolves — either in the environment or in .env at the video-use repo root. If missing, ask the user to paste one and write it to .env (never to the user's <videos_dir>).
  • ffmpeg + ffprobe on PATH.
  • Python deps installed (uv sync or pip install -e . inside the repo).
  • Node.js + npm available if the session needs HyperFrames or Remotion slots. HyperFrames currently requires Node.js 22+.
  • yt-dlp, HyperFrames, Remotion, Manim installed only on first use.
  • First-use animation setup happens inside the slot directory, never at the video-use repo root. HyperFrames can be invoked with npx --yes hyperframes ...; Remotion can be scaffolded with npx create-video@latest or installed as a project-local dependency before using its remotion render command.
  • This skill vendors skills/manim-video/. Read its SKILL.md when building a Manim slot.

Helpers (helpers/transcribe.py, helpers/render.py, etc.) live alongside this SKILL.md. Resolve their paths relative to the directory containing this file — the skill is typically symlinked at ~/.claude/skills/video-use/ or ~/.codex/skills/video-use/.

Helpers

  • `transcribe.py <video>` — single-file Scribe call. --num-speakers N optional. Cached.
  • `transcribe_batch.py <videos_dir>` — 4-worker parallel transcription. Use for multi-take.
  • `pack_transcripts.py --edit-dir <dir>` — transcripts/*.json → takes_packed.md (phrase-level, break on silence ≥ 0.5s).
  • `timeline_view.py <video> <start> <end>` — filmstrip + waveform PNG. On-demand visual drill-down. Not a scan tool — use it at decision points, not constantly.
  • `render.py <edl.json> -o <out>` — per-segment extract → concat → overlays (PTS-shifted) → subtitles LAST. --preview for 720p fast. --build-subtitles to generate master.srt inline.
  • `grade.py <in> -o <out>` — ffmpeg filter chain grade. Presets + --filter '<raw>' for custom.

For animations, create <edit>/animations/slot_<id>/ with Bash and spawn a sub-agent via the Agent tool.

The process

  1. Inventory. ffprobe every source. transcribe_batch.py on the directory. pack_transcripts.py to produce takes_packed.md. Sample one or two timeline_views for a visual first impression.
  2. Pre-scan for problems. One pass over takes_packed.md to note verbal slips, obvious mis-speaks, or phrasings to avoid. Plain list, feed into the editor brief.
  3. Converse. Describe what you see in plain English. Ask questions shaped by the material. Collect: content type, target length/aspect, aesthetic/brand direction, pacing feel, must-preserve moments, must-cut moments, animation and grade preferences, subtitle needs. Do not use a fixed checklist — the right questions are different every time.
  4. Propose strategy. 4–8 sentences: shape, take choices, cut direction, animation plan, grade direction, subtitle style, length estimate. Wait for confirmation.
  5. Execute. Produce edl.json via the editor sub-agent brief. Drill into timeline_view at ambiguous moments. Build animations in parallel sub-agents. Apply grade per-segment. Compose via render.py.
  6. Preview. render.py --preview.
  7. Self-eval (before showing the user). Run timeline_view on the rendered output (not the sources) at every cut boundary (±1.5s window). Check each image for:
  • Visual discontinuity / flash / jump at the cut

Use this skill in a project

Open any RiverX project, search the Skills panel for browser-use/video-use/video-use, and install it in one click.

Use this skill