Logo popups: logos that pop out of your pointing finger
The user is usually not technical. Keep replies short, do the work for them, never ask them to run commands.
All paths are relative to this skill's folder (the folder this SKILL.md is in). Use its absolute path in commands. PY below means .venv/bin/python in this folder (.venv\Scripts\python.exe on Windows).
1. First run: set up (once)
Run bash scripts/setup.sh. It prints READY when done (1 to 3 minutes the first time).
NEED_FFMPEG: install it (Mac:brew install ffmpeg, Windows:winget install ffmpeg), then run setup again.NEED_PYTHON: install Python 3.12 (Mac:brew install [email protected], Windows:winget install Python.Python.3.12), then run setup again.
2. Find the pointing and the words
Run both on their video:
PY scripts/track.py <video>: tracks the hands, saves<video>.hands.jsonand prints pointing windows (times when a finger is held up).PY scripts/words.py <video>: prints when each word is said.
Match each window to the brand the speaker names in or near it. Whisper often mishears brand names: "cloud" is usually Claude, "codecs" Codex, "croc"/"grok" Grok, "chat GPT" ChatGPT, "Gemini", "cursor" Cursor. If the user already told you which logos, use those in the order they point. If no words name a brand and the user didn't say, ask one short question: which logos, in what order.
3. Write the plan
Save it next to the video as <video-name>_logos.json:
{"pops": [
{"logo": "claude", "start": 1.12, "end": 1.85},
{"logo": "codex", "start": 2.10, "end": 3.05},
{"logo": "grok", "start": 3.45, "end": 4.50}
]}
start: a beat after the hand settles (the window start), or on the word, whichever is later.end: when the finger drops or the next point starts. 0.7 to 1.2 s each looks best; never overlap two pops.logo: a preset name (below), any icon name from lobehub.com/icons (e.g.notion,figma,vercel; it tries<name>-colorfirst), or a path to a PNG/SVG the user gave.
Options per pop (all optional):
| key | what | default |
|---|---|---|
label | text in the pill under the icon; "" hides it | brand name |
bg | tile colour (hex) | preset, else white |
fg | colour for one-colour SVG logos | white on dark tiles, black on light |
accent | colour of the pop ring | preset, else logo colour |
size | tile width as a share of the video width | 0.24 |
logo_scale | logo size inside the tile | 0.66 |
gap | how far past the fingertip the icon sits (in tile sizes) | 0.85 |
nudge | extra [x, y] offset as a share of the width | [0, 0] |
avoid_face | slide up if it would cover the face | true |
burst | ring and sparks on pop | true |
Presets: claude, anthropic, codex, openai, chatgpt, grok, gemini, cursor, perplexity, deepseek, copilot, mistral, meta.
4. Check, then render
- Stills first (fast):
PY scripts/render.py <plan.json> <video> <folder>/check.png --still 1.5,2.6,4.0, one time in the middle of each pop. Look at the PNG yourself. Fix anything that covers the face, gets cut off at the edge, or sits far from the finger (gap,nudge,size, timing). - Render:
PY scripts/render.py <plan.json> <video> <video-name>_logos.mp4. Output: H.264 MP4, 1080 wide, same fps, original audio. - Tell them where the file is, and to watch it before posting.
Rules
- Never cover the face. Face avoidance is on by default; still check the stills.
- One logo per point. If they point twice at one brand, use two pops.
- Logos are trademarks of their owners; this is for commentary and reviews. Don't add logos the speaker doesn't mention unless the user asks.