Communitygithub.com

Jenesyx/reel-split

Use when the user runs /reel-split, or asks for the split-screen explainer Reel — an animated widget panel on the top ~45 % of the frame, the speaker below it the whole time, no subtitles, no SFX — typical for "I found this tool / here are 5 tips" videos, on a talking-head take in raw/.

What is reel-split?

reel-split is a Claude Code agent skill that use when the user runs /reel-split, or asks for the split-screen explainer Reel — an animated widget panel on the top ~45 % of the frame, the speaker below it the whole time, no subtitles, no SFX — typical for "I found this tool / here are 5 tips" videos, on a talking-head take in raw/.

Works with✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/Jenesyx/arta-edit-studio/tree/main/.claude/skills/reel-split

Ask in your favorite AI

Open a new chat with this agent skill pre-loaded.

Documentation

Reel — Split edit (45 % panel over speaker)

A permanent cream panel fills the top of the frame (1080 × split.panel_height, default 864 = 45 %) with UI-style widgets — cards, meters, toggles, terminals, chips — that illustrate exactly what is being said. The speaker sits below at scale 1 and never moves. Ending: the comment keyword big on screen, then a follow card. Worked example: examples/split/ (plan + scene module of a real 100 s video about five Claude skills).

Arguments: $ARGUMENTS

Defaults (change only if the user says so)

Read reel.config.json first (falls back to reel.config.example.json).

ThingDefault
Split"split": split.panel_height (864 → panel 45 %, speaker 55 %; 960 = 50/50)
Speakerscale 1, no zoom, no movement; face centred in the speaker region (speaker_y)
Safe box"safe": split.safe = [64, 160, 64, 32] → scene content lives in 952 × 672 starting 160 px down (Instagram header / phone status bar hide the top)
Subtitles / SFX / musicNone added. Audio = the take's own mix, remuxed by finish.py
TakeAssume already cut, graded, music added → use as-is. Raw/uncut → ask first
CTAComment keyword (word or number) huge in a speech-bubble card; follow card "handle": creator.handle, text only, never a face crop
Palettesplit_palette: cream panel, ink text, accent fills; text on cream uses accent_deep (contrast)

Inputs

Take name + topic come from the arguments. Ask once, in one message, only what's missing: is the take already cut/graded/with music; the comment keyword; names or jargon Whisper may mishear (tool and product names).

Pipeline

PY = .venv/Scripts/python.exe -X utf8 (Windows) or .venv/bin/python -X utf8 (macOS/Linux). Long steps in background.

#StepCommand / actionCheck
1Lookffprobe; contact sheet ffmpeg -i raw/<take> -vf fps=1/5,scale=216:384,tile=9x2 -frames:v 1 work/<take>/sheet.jpg and look at itempty wall above head? already edited?
2Transcribe$PY tools/transcribe.py <take> --prompt "<names, jargon>"proofread tool names; gaps > 3 s → re-transcribe window
3Face$PY tools/face_track.py <take> --split <panel_height>prints speaker_y
4Beat planone scene per idea, typically 3–7 s, each widget pinned to a spoken word (cue = word start). Scenes change content, never layout
5Plan filework/<take>/showcase.json from examples/split/showcase.json: video ("../../raw/<file>"), split, speaker_y, safe, scenes_module, scenes[] {kind, start, end, cue{...}}, handle on the follow scene; _note records the face numbers
6Scenestools/scenes_<slug>.py from examples/split/scenes_5skills.py: one sc_<kind>(i, s) -> (html, js) per kind, RENDER dict, optional CSS/JS. Coordinates inside the safe box (952 wide); ids s{i}-*; cue times absolute. sc_comment, sc_follow are the CTA
7Build$PY tools/showcase_build.py <take>; in work/<take>/sc: npx hyperframes lint public → 0 errors; npx hyperframes snapshot public -o ../snaps --no-end --describe false --at <mid of every scene>; read sheets, fixtext inside the panel, nothing under the header
8Quick render$PY tools/finish.py <take> --seconds 12; read work/<take>/sc/quick_sheet.jpg
9Full render$PY tools/finish.py <take> (background) → final/<take>/, verify, qa/sheet.jpgread the sheet
10Reportpath, length, scenes, verify result. If something new was learned, add it to this skill

Panel rules

  • Widgets illustrate the sentence being spoken right now: a repo card when they name the repo, a meter when they compare, a strike-through when they say "not this".
  • Each scene fades out 0.25 s before the next (the builder does it); inside a scene, elements arrive on their cue words.
  • Numbers on screen must be real counts from the take.
  • The scene kinds built into showcase_build.py (hook, repo, cta, …) predate the 45 % safe box and can overflow it; write kinds in tools/scenes_<slug>.py based on examples/split/scenes_5skills.py instead.
  • Farsi / Arabic text: .fa class (RTL on the element, never dir="rtl" on <html>), letter-spacing: 0, digits via fa(), a big zero as Latin 0.
  • No overlapping tweens on one property, no Math.random / from:"random", slide-ins carry autoAlpha:0 in the from-state.
  • If any source clip is HDR (HLG), tone-map it first (TONEMAP in tools/story_assets.py) — finish.py stops on "HDR auto-promotion".
  • hyperframes snapshot is not proof of the render — step 8 is.

Individual skills in this repo

This repo contains 2 individual skills — each has its own dedicated page.

Related Skills