Communitygithub.com

AGHEORONO/video-dna

Make story-driven videos with heavy motion graphics from real footage, photos and music, or from nothing but a brief, with a new theme chosen for each one. Asks for what it needs first: format, orientation, rhythm, motion intensity, visual identity. Use when the user wants to edit or make a reel, TikTok, Short, vlog series, aftermovie, event promo or reminder, progress update, animated poster or story, QR or projector loop, or says "make a video", "editează", "montează", "fă un reel", "fă un vid

What is video-dna?

video-dna is a Claude Code agent skill that make story-driven videos with heavy motion graphics from real footage, photos and music, or from nothing but a brief, with a new theme chosen for each one. Asks for what it needs first: format, orientation, rhythm, motion intensity, visual identity. Use when the user wants to edit or make a reel, TikTok, Short, vlog series, aftermovie, event promo or reminder, progress update, animated poster or story, QR or projector loop, or says "make a video", "editează", "montează", "fă un reel", "fă un vid.

Works with✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/AGHEORONO/video-dna/tree/HEAD/video-dna

Ask in your favorite AI

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

Documentation


name: video-dna description: Make story-driven videos with heavy motion graphics from real footage, photos and music, or from nothing but a brief, with a new theme chosen for each one. Asks for what it needs first: format, orientation, rhythm, motion intensity, visual identity. Use when the user wants to edit or make a reel, TikTok, Short, vlog series, aftermovie, event promo or reminder, progress update, animated poster or story, QR or projector loop, or says "make a video", "editează", "montează", "fă un reel", "fă un video", "motion graphics", "aftermovie". Works in Claude Code and the Claude app. Handles transcription, word-by-word captions, cutting on the beat, generated sound effects, rendering with ffmpeg, frame-level checks and post captions.

Video DNA

Turn a folder of footage into a video that feels edited by someone who was there. Keep the DNA, never reuse a template: every video gets its own theme, drawn from what really happened in the footage.

Reply in the user's language. Captions and on-screen text use the language of the footage unless told otherwise.

Start here

  1. Run python scripts/doctor.py to see what this environment can do. Read references/environments.md if anything is missing, or if you are in a cloud sandbox.
  2. Look at the working folder, then read references/brief.md and collect the brief. Ask only what the request and the material do not already answer.
  3. Read references/formats.md and use the recipe closest to the request. If there is no material, follow "No material" in references/brief.md.
  4. Read references/pipeline.md before building the timeline, and references/tools.md when a job needs more than the core scripts.

Workflow

Do these in order. Do not render anything before step 5.

  1. Brief. Settle format, orientation, length, rhythm, motion intensity, visual identity and audio. See references/brief.md. Use its choices for the whole video.
  2. Inventory. List clips, photos, music and logos, if there are any. Make contact sheets with scripts/contact_sheet.py and look at them. Transcribe speech with scripts/transcribe.py, shortest and densest clips first. Real lines are usually the funniest material.
  3. Story. Write down what actually happened, in order, with the best real lines and who said them. Ask who the people are if you were not told.
  4. Theme. Propose 2-3 new themes, each with 2 concrete gags built from real moments. Recommend one, preferring a theme the footage already suggests. Then stop and let the user choose. See references/themes.md.
  5. Music. Propose one track per section with a target filename, and ask the user to put the files in the folder. A name such as 2_chorus_0m45s.mp3 means "start at 0:45". Never download commercial music, even if asked. Offer generated sound and a no-music version instead.
  6. Sample first. For anything over about 45 seconds, render one short chapter so the user can judge direction. Then build the rest.
  7. Check. Run scripts/qa.py, look at extracted frames and go through references/qa-checklist.md. Fix what you find before delivering.
  8. Deliver. See "Where the finished video goes" below. Include a no-music version when useful, ready-to-paste text from references/copy.md, and the honest report.

Where the finished video goes

scripts/doctor.py reports the environment. Finish every video this way:

  • Claude Code: write finished videos directly into the user's folder, in output/ inside the working folder unless they name another place. Give the full paths. The user should never have to go looking in _work/.
  • Claude app: deliver finished videos directly in the chat, as files the user can open and download from the conversation. Copy them to the outputs folder (/mnt/user-data/outputs when it exists) and use the file-sharing tool if one is available. Do not stop at a sandbox path, and do not shrink or split a file unless it fails to deliver.

The DNA

  • One theme, fully committed. Same fonts, colors, animation and sound from first frame to last. Every graphic belongs to the theme's world.
  • Every graphic carries a true joke or a true fact from this footage. Nothing decorative, nothing generic. A label reading a real value on a real display beats any stock caption.
  • Callbacks. Plant something early and pay it off late. A line from the start returns at the end.
  • Hook in the first 2-3 seconds with the strongest moment, then return to the beginning in a way that belongs to the theme.
  • Rhythm. Cut on the beat, punch-zoom on punchlines, use moving transitions, shake on impacts, speed up the dull stretches. Leave spoken lines whole.
  • Captions on all speech, word by word, styled for the theme. Censor swearing on screen only.
  • Sound design. Each graphic has its own sound. Music changes by section, the track's big hit lands on the key moment, and music ducks under speech.
  • Clarity beats density. If a joke needs context the viewer lacks, cut it. For a first-time viewer, what, where, when and how much must be clear.

Truth rules

  • Never invent a fact. Anything deduced, approximate or illustrative must be listed for confirmation: dates, roles, numbers, prizes, heights, who said what.
  • List uncertain transcript lines for the user to confirm. transcribe.py flags low-confidence words.
  • Illustrative numbers that could be read as real results must be flagged, or removed.
  • Do not put words in real people's mouths as quotes. Written jokes are fine when they read as captions.
  • Ask before including embarrassing moments of people, and before showing strangers' faces unblurred.
  • Keep official text from sponsors and funders word for word. If it does not match their logos, ask instead of editing it.
  • Check a QR code's destination and warn the user if it is an openly editable document.

Handling corrections

Apply feedback exactly and leave everything else untouched. Keep the timeline as data, so one change re-renders only the affected segments. When something must be removed to stay under a length limit, say what you removed.

Honest report

You cannot hear audio or watch in real time. State this every time, in plain words:

  • what you verified (extracted frames, durations, levels, QR decoding);
  • what the user must judge by ear and eye (beat sync, caption timing, mix balance);
  • what you removed, and what you could not do as asked;
  • whether platforms may mute the video because of commercial music.

Bundled files

FileUse
scripts/doctor.pyCheck tools and dependencies
scripts/contact_sheet.pyTimestamped frame grids for reviewing footage and renders
scripts/transcribe.pyWord-level transcript with low-confidence flags
scripts/captions.pyWord-by-word ASS captions, mapped onto the timeline
scripts/beats.pyTempo, beat times and strongest hits of a track
scripts/sfx.pyGenerate copyright-free sound effects
scripts/music.pyGenerate a simple original chiptune or pulse music bed that loops
scripts/setup_tools.pyCheck and install optional tools by profile, and save Whisper models
scripts/toolbox.pyScene detection, cutouts, faces, QR, fonts, HTML scenes, stems, voiceover, loudness, timeline export
scripts/render.pyTimeline JSON to final MP4, with an optional no-music version
scripts/qa.pyDuration, format, size, loudness, ASS and QR checks
scripts/fit_size.pyCompress to a target size, or split for transfer
references/brief.mdQuestions to ask at the start, and what to do with an empty folder
references/formats.mdRecipes per type of video
references/themes.mdHow to find a theme, with worked examples
references/pipeline.mdTimeline format, render rules, ASS animation recipes
references/tools.mdWhich tool for which need, including Whisper backends
references/environments.mdClaude Code and Claude app differences
references/qa-checklist.mdPre-delivery checks
references/copy.mdPost captions and shareable messages

Related Skills