Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
18 commits
Select commit Hold shift + click to select a range
a786bc7
Package as installable video-use CLI tool
gregpr07 Jul 2, 2026
bbec8a0
fix(render): contain EDL overlay/subtitle paths to the project directory
gregpr07 Jul 2, 2026
1caba73
feat(skill): edit_log.jsonl contract for human edits made outside the…
gregpr07 Jul 2, 2026
931f95a
ci: matrix build with doctor, render smoke test, and SKILL.md sync check
gregpr07 Jul 2, 2026
1e50d2a
feat(studio): native EDL editor β€” Tauri 2 desktop app (slice 1)
gregpr07 Jul 2, 2026
2e278e7
feat(studio): real-project support + localhost remote control for agents
gregpr07 Jul 2, 2026
0ba2ea3
perf(studio): stop starving the compositor during playback
gregpr07 Jul 2, 2026
1bfd264
fix: skip AppleDouble ._* sidecars in video and transcript discovery
gregpr07 Jul 2, 2026
aa35e5b
fix(timeline): skip frames that fail to extract at end-of-file
gregpr07 Jul 2, 2026
1b53e01
feat(studio-mac): native macOS Studio β€” SwiftUI + AVFoundation
gregpr07 Jul 2, 2026
97407c6
chore: remove Tauri Studio in favor of the native Swift app
gregpr07 Jul 2, 2026
818036e
feat(render): honor edl subtitle_style (size, margin, uppercase, chun…
gregpr07 Jul 3, 2026
a46743c
feat(studio-mac): live subtitles, timeline zoom/pan, playback-follow …
gregpr07 Jul 3, 2026
c0c7ff5
feat(studio-mac): redesigned export flow + style-edit safety
gregpr07 Jul 3, 2026
76bb4eb
fix(render): decode .webm overlays with libvpx-vp9 to preserve alpha
gregpr07 Jul 3, 2026
de3fc7c
fix(studio-mac): poll fallback for EDL watch on non-APFS volumes
gregpr07 Jul 3, 2026
4f5841d
fix(render): strip literal quote marks from caption text
gregpr07 Jul 3, 2026
56f64b3
fix(studio-mac): async AVAsset track loading + ignore .build
gregpr07 Aug 26, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
102 changes: 102 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,102 @@
name: CI

on:
push:
branches: [main]
pull_request:

jobs:
skill-sync:
name: SKILL.md copies in sync
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Root SKILL.md matches packaged copy
run: diff -u SKILL.md src/video_use/SKILL.md

test:
name: ${{ matrix.os }}
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
os: [ubuntu-latest, macos-latest, windows-latest]
steps:
- uses: actions/checkout@v4

- uses: actions/setup-python@v5
with:
python-version: "3.12"

- name: Install ffmpeg
uses: FedericoCarboni/setup-ffmpeg@v3

- name: Install video-use
run: pip install .

- name: Doctor
env:
ELEVENLABS_API_KEY: ci-dummy-key
run: video-use doctor

- name: Subcommand help screens
shell: bash
run: |
video-use --version
video-use skill | head -3
video-use skill manim-video | head -3
video-use where
for c in transcribe transcribe-batch pack timeline grade render; do
video-use "$c" --help > /dev/null
done
video-use grade --list-presets > /dev/null

- name: Render smoke test (synthetic clip + EDL)
shell: bash
run: |
mkdir -p smoke/edit
ffmpeg -y -f lavfi -i "testsrc2=duration=10:size=1280x720:rate=30" \
-f lavfi -i "sine=frequency=440:duration=10" \
-c:v libx264 -pix_fmt yuv420p -c:a aac smoke/clip.mp4 2>/dev/null
cat > smoke/edit/edl.json <<EOF
{
"version": 1,
"sources": {"clip": "$PWD/smoke/clip.mp4"},
"ranges": [
{"source": "clip", "start": 1.0, "end": 3.5, "beat": "HOOK", "quote": "", "reason": "ci"},
{"source": "clip", "start": 6.0, "end": 8.0, "beat": "CTA", "quote": "", "reason": "ci"}
],
"grade": "neutral_punch",
"total_duration_s": 4.5
}
EOF
video-use render smoke/edit/edl.json -o smoke/edit/out.mp4 --no-subtitles
dur=$(ffprobe -v error -show_entries format=duration -of csv=p=0 smoke/edit/out.mp4)
echo "output duration: $dur"
python -c "import sys; d=float('$dur'); sys.exit(0 if 4.2 < d < 5.0 else 1)"

- name: Timeline view smoke test
shell: bash
run: |
video-use timeline smoke/edit/out.mp4 0 4 -o smoke/edit/tl.png
python -c "from pathlib import Path; assert Path('smoke/edit/tl.png').stat().st_size > 10000"

- name: Path containment regression
shell: bash
run: |
echo "secret" > smoke/secret.srt
cat > smoke/edit/evil.json <<EOF
{
"version": 1,
"sources": {"clip": "$PWD/smoke/clip.mp4"},
"ranges": [{"source": "clip", "start": 1.0, "end": 2.0, "beat": "X", "quote": "", "reason": ""}],
"grade": "none",
"subtitles": "../../secret.srt",
"total_duration_s": 1.0
}
EOF
if video-use render smoke/edit/evil.json -o smoke/edit/evil.mp4; then
echo "traversal EDL was not rejected" && exit 1
else
echo "traversal rejected as expected"
fi
5 changes: 5 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -58,3 +58,8 @@ master.srt
takes_packed.md
edl.json
project.md

# Swift / Xcode (studio-mac)
studio-mac/.build/
*.xcuserstate
DerivedData/
36 changes: 18 additions & 18 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -20,18 +20,25 @@ Try video-use in [Browser Use Cloud](https://cloud.browser-use.com/v4?utm_campai
- **Self-evaluates the rendered output** at every cut boundary before showing you anything
- **Persists session memory** in `project.md` so next week's session picks up where you left off

## Setup prompt
## Install

Paste into Claude Code, Codex, Hermes, Openclaw, or any agent with shell access:
```bash
uv tool install video-use
mkdir -p ~/.claude/skills/video-use
video-use skill > ~/.claude/skills/video-use/SKILL.md

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2: Following 'Install from source' for a fresh user fails at video-use skill > ~/.claude/skills/video-use/SKILL.md because the target directory doesn't exist and the shell > redirect errors out. Add mkdir -p ~/.claude/skills/video-use before the redirect, matching the 'Install' section.

Prompt for AI agents
Check if this issue is valid β€” if so, understand the root cause and fix it. At README.md, line 28:

<comment>Following 'Install from source' for a fresh user fails at `video-use skill > ~/.claude/skills/video-use/SKILL.md` because the target directory doesn't exist and the shell `>` redirect errors out. Add `mkdir -p ~/.claude/skills/video-use` before the redirect, matching the 'Install' section.</comment>

<file context>
@@ -20,18 +20,25 @@ Try video-use in [Browser Use Cloud](https://cloud.browser-use.com/v4?utm_campai
+```bash
+uv tool install video-use
+mkdir -p ~/.claude/skills/video-use
+video-use skill > ~/.claude/skills/video-use/SKILL.md
+video-use doctor
+```
</file context>
Suggested change
video-use skill > ~/.claude/skills/video-use/SKILL.md
mkdir -p ~/.claude/skills/video-use
video-use skill > ~/.claude/skills/video-use/SKILL.md

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2: Following 'Install from source' for a fresh user fails at video-use skill > ~/.claude/skills/video-use/SKILL.md because the target directory doesn't exist and the shell > redirect errors out. Add mkdir -p ~/.claude/skills/video-use before the redirect, matching the 'Install' section.

Prompt for AI agents
Check if this issue is valid β€” if so, understand the root cause and fix it. At README.md, line 28:

<comment>Following 'Install from source' for a fresh user fails at `video-use skill > ~/.claude/skills/video-use/SKILL.md` because the target directory doesn't exist and the shell `>` redirect errors out. Add `mkdir -p ~/.claude/skills/video-use` before the redirect, matching the 'Install' section.</comment>

<file context>
@@ -20,18 +20,25 @@ Try video-use in [Browser Use Cloud](https://cloud.browser-use.com/v4?utm_campai
+```bash
+uv tool install video-use
+mkdir -p ~/.claude/skills/video-use
+video-use skill > ~/.claude/skills/video-use/SKILL.md
+video-use doctor
+```
</file context>
Suggested change
video-use skill > ~/.claude/skills/video-use/SKILL.md
mkdir -p ~/.claude/skills/video-use
video-use skill > ~/.claude/skills/video-use/SKILL.md

video-use doctor
```

`doctor` tells you if anything is missing (ffmpeg, API key). Store your ElevenLabs key with `video-use key` (grab one at [elevenlabs.io/app/settings/api-keys](https://elevenlabs.io/app/settings/api-keys)).

Or let your agent do it β€” paste into Claude Code, Codex, Hermes, Openclaw, or any agent with shell access:

```text
Set up https://github.com/browser-use/video-use for me.
Set up video-use for me.

Read install.md first to install this repo, wire up ffmpeg, register the skill with whichever agent you're running under, and set up the ElevenLabs API key β€” ask me to paste it when you need it. Then read SKILL.md for daily usage, and always read helpers/ because that's where the editing scripts live. After install, don't transcribe anything on your own β€” just tell me it's ready and wait for me to drop footage into a folder.
Read https://raw.githubusercontent.com/browser-use/video-use/main/install.md and follow it: install the video-use tool, wire up ffmpeg, register the skill with whichever agent you're running under, and set up the ElevenLabs API key β€” ask me to paste it when you need it. After install, don't transcribe anything on your own β€” just tell me it's ready and wait for me to drop footage into a folder.
```

The agent handles the clone, dependencies, skill registration, and prompts you once for your ElevenLabs API key (grab one at [elevenlabs.io/app/settings/api-keys](https://elevenlabs.io/app/settings/api-keys)).

Then point your agent at a folder of raw takes:

```bash
Expand All @@ -47,25 +54,18 @@ And in the session:

It inventories the sources, proposes a strategy, waits for your OK, then produces `edit/final.mp4` next to your sources. All outputs live in `<videos_dir>/edit/` β€” the skill directory stays clean.

## Manual install
## Install from source

If you'd rather do it by hand:
If you'd rather hack on it:

```bash
# 1. Clone and symlink into your agent's skills directory
git clone https://github.com/browser-use/video-use ~/Developer/video-use
ln -sfn ~/Developer/video-use ~/.claude/skills/video-use # Claude Code
# ln -sfn ~/Developer/video-use ~/.codex/skills/video-use # Codex

# 2. Install deps
cd ~/Developer/video-use
uv sync # or: pip install -e .
pip install -e . # same `video-use` command, editable
video-use skill > ~/.claude/skills/video-use/SKILL.md
brew install ffmpeg # required
brew install yt-dlp # optional, for downloading online sources

# 3. Add your ElevenLabs API key
cp .env.example .env
$EDITOR .env # ELEVENLABS_API_KEY=...
video-use key # paste your ElevenLabs API key
```

## How it works
Expand Down
Loading
Loading