kevinbadi/open-edits/fireship-style-edit

Claude Code and agent skill by kevinbadi/open-edits

Trust tier 2
  • community
LLM review pending
Source check pending

Checking that the SKILL.md file is still in the repository.

Edit or build a FACELESS, Fireship "Code Report"-style tech news video (16:9, 1920x1080) — narrator never on screen, 100% B-roll that LITERALLY shows what each line says (footage of the actual person/event via fetch_footage.py, real article/doc screenshots with an orange highlighter sweep, tweet cards with X mark + profile pictures, headline card stacks, background-removed cutouts, meme cut-ins, slapped-on sticker text, built-up systems diagrams, glitch cuts) hard-cut every ~2 s over a continuous music bed at ~210 wpm deadpan narration. Use when Kevin asks for "Fireship style", a Code Report / news-roundup / "everything you missed" video, a faceless tech explainer, or a voiceover-driven B-roll edit. His own talking-head footage goes to longform-animated-talking-head / split-animated-talking-head instead.

Install

npx vskill@latest install kevinbadi/open-edits/fireship-style-edit

SKILL.md

Fireship-style edit (faceless "Code Report" format)

Learned 2026-09-29 by reverse-engineering Fireship's "Meta is pivoting again… everything you missed from Connect 2026" (5:40, 1080p, 23.976 fps). Full study (transcript with word times, cut list, per-shot contact sheets, dense in-shot frame sheets, audio measurements): clone-projects/fireship-style-study/ (historical, not bundled) (frames/sheet_*.jpg, frames/zoom_*.jpg, audio/, cuts/). Learn the grammar; never copy their assets. No Fireship footage, music, logo or the name "Code Report" in our videos. Our show title is our own (default "The Kev Report").

Engine: templates/fireship_engine.py. Template + device demo: templates/render_template.py. Real event footage: scripts/fetch_footage.py (yt-dlp search → download → 1 s contact sheet → accurate cut). Real docs: wikipedia_extract() + wiki_doc() in the engine (REST API, no browser). scripts/capture_page.mjs needs Playwright: optional, never the default (Kevin 2026-10-02: no browser automation for assets). Demo of every device: ~/Downloads/Fireship Style Demo Reel.mp4 (built from clone-projects/fireship-demo/ (historical, not bundled)).

0. LITERAL VISUALS (Kevin 2026-10-02, first test edit review)

"the edit can be even more descriptive of what's being said ... in the intro it should LITERALLY be
the prime president of australia speaking."

The picture shows exactly what the sentence says, as literally as footage allows:

  • A person did something → footage of THAT person doing it (the PM at the UN podium speaking,

Jensen on stage holding the chip). Find it with fetch_footage.py --search "<person> <event>". A flag, a city skyline or a logo is NOT a substitute for the person; it is at most an overlay.

  • A company did something → its product/event footage or its own page, plus the logo as an overlay.
  • People reacted → tweet cards (with platform mark + profile pictures, see below) or reaction memes.
  • An abstract mechanism → the built-up diagram.
  • A shot that is only a logo/sticker on black is the last resort, at most 1 in 8 shots.
  • Write the shot list as time | exact VO words | what is literally on screen | source and reject any

row where the screen doesn't depict the words.

Tweet cards always look real (Kevin 2026-10-02: "the social icon was missing as well as the profile picture of the tweeter"). tweet_card() now draws the X mark top-right, a profile picture and the reply/repost/like/views row. Profile pictures: a real public figure → their real photo (split-animated-talking-head/scripts/fetch_figure.py → avatar="assets/figures/<slug>.png"); a made-up handle → leave avatar=None for the generated gradient-initials avatar. Never put a random real stranger's face on an invented post, and never invent words for a real person: a card with a real person's name/photo must show a post they actually made (fetch the text, keep it verbatim). Jokes go on made-up handles.

1. The numbers (measured, hit these)

MetricFireshipRule for us
Hard cuts107 in 340 sa new shot every ~2.2 s median (mean 3.2)
Element changesnew sticker / card / arrow every ~1–1.5 s inside shotsnothing static > 1.5 s
Longest shots31 s diagram build, 17 s doc highlight, 14 s phone-mock storylong shots are only allowed if they build (diagram grows, highlighter reads along, cards stack)
Narration1,207 words / 340 s = 213 wpm, only 19 pauses > 0.35 sjump-cut every breath out; VO is continuous
Narrator on screenneverfaceless, always
Burned-in captionsnoneno subtitle track on screen (text appears only as stickers/cards)
Audiocontinuous music bed ~2–3 dB under VO in gaps; loudness range 3.2 LUducked bed + compressed VO, mux() normalises to −14 LUFS for YouTube
Aspect / fps16:9, 23.9761920×1080, 30 fps (our stack)

2. Script formula (Code Report structure, with timings from the study)

  1. Cold open, 0–65 s (~19%): first line is a deadpan absurd personal joke ("while I was finishing my

certification to become a Metaverse real estate agent…"), then the news in one run-on sentence, the "and because [company] already knows what we're all thinking…" turn, then the promise: "In today's video we'll break down X, look at how it actually works under the hood, and find out if it's the future of Y or just [callback joke]."

  1. Date + title card, ~65 s: "It is September 25th, 2026, and you're watching [Show name]." Title card on that line.
  2. History / context, 65–137 s: "Now, this isn't [company]'s first attempt…" with an archival year label ("2018"), a stamp ("DISCONTINUED"), a punchline.
  3. How it works (the technical core), 137–198 s: one long diagram build in sync with the narration, then the catch ("But ironically…", "and that's where he's still kind of lying").
  4. Rapid-fire product news, 198–277 s: specs + price stickers ("$1,300", "$449"), famous-people B-roll with dry asides, one "one more thing".
  5. Sponsor, 277–332 s (~16%): segue from the last topic ("But if you'd rather not wait until December for… you can build… today with [Sponsor]"), a mini story told through the product's screen recordings.
  6. Outro, 8 s: "This has been [Show name], thanks for watching, and I will see you in the next one." Title card + "link below" sticker.

Voice rules: deadpan, never hype words; a joke every ~10–15 s, usually as a hard-left turn at the end of a factual sentence ("…send flowers to your wife's boyfriend"); callbacks to the cold-open joke at the end of the intro; specific numbers and names always; pop-culture comparisons; mild irreverence, but punch at companies and the powerful, not at groups of people. Keep sentences long and rolling. The VO carries all the information; visuals carry the jokes.

3. Visual devices (engine function → when)

DeviceEngineUse it when the VO…
Kinetic cold-open words on blackkinetic_words()first 1–2 s, before the first image
Article/doc bursts in with a fisheyeLayer(anim="bulge")introduces a source
Orange highlighter read-alongreal text: wiki_doc(title, wikipedia_extract(title), highlight, p) or doc_card(wrap_text(text), phrase_spans(...))quotes or paraphrases a doc: sweep p 0→1 across the spoken words
Full-bleed footage + slow pushfetch_footage.py → video_bg(cut, 0); Commons photos → image_bg()describes an event, product, person (the literal person/event, section 0)
Logo slide-in + red block nameLayer(img=logo, anim="slide_left") + sticker(name, "red_block")names a product the first time
Tweet stack (tilted, overlapping)tweet_card(name, handle, text, avatar=…, stats=…) ×2–3, tilts ±2–4°: X mark + profile pic + icon row always"people online are saying…"
Headline card stackheadline_card() light + dark, stacked, offset"reports say…", controversies
Cutout walking over a cardcutout() (make with npx hyperframes remove-background or rembg)a person reacts to / owns the thing on screen
Reaction-face collage stripcollage_strip()"everyone's reaction"
Meme cut-in (full frame, 0.5–1.5 s)Giphy via split-animated-talking-head/scripts/fetch_giphy.py, bg= framesevery punchline; most GIFs have BURNED-IN captions ("HACKERMAN", "I confess!"): put stickers on the opposite edge, never over them
Sticker text slapped onsticker(txt, style): red_block starburst comic pink_plate price_box price_pop stamp name_plate quote year red_capsprices, names, years, one-word reactions ("BUT", "GULP", "FREE!")
Hand-drawn curved pointercurved_arrow()points at the exact UI element or line being named
Systems diagram that buildsdraw_diagram([DiagramItem...]): purple frame + pixel caption, orange dashed box + labels, green/cyan/cream blocks, white arrows, red arrows for the attack/fail path, dropped-in icons"the way it works is…" (one per video, 20–40 s)
Glitch cutShot(glitch_in=True)~1 in 5 cuts, on topic changes and punchline reveals, never every cut
Show title cardtitle_card("The Kev Report", date)the date line + the outro

Composition rules seen in every frame:

  • Cards sit on the near-black ground (14,14,16), centered or offset, never framed in a UI chrome.
  • Overlaps are deliberate: second card overlaps the first by ~15–25%, opposite tilt.
  • Stickers are big (100–220 px text) and tilted −12…+10°; they pop in with overshoot and then hold still.
  • Brand marks are real (fetch with split-animated-talking-head/scripts/fetch_brand_asset.py).
  • Every beat lands on the spoken word: at(WORDS, "word", after), max lead 0.1 s.

4. Pipeline

bash
WD=clone-projects/<slug>-fireship && mkdir -p $WD/{audio,assets/{shots,logos,cutouts,gifs},frames} && cd $WD
cp "<skill>/templates/render_template.py" render.py
  1. Script (section 2 formula, ~210 wpm → a 5 min video ≈ 1,050 words). Kevin records the VO, or

ElevenLabs (voice id from .env.local), saved as audio/voice.wav. Jump-cut silences > 0.3 s (ffmpeg silenceremove or the HyperFrames CLI) before transcribing.

  1. Words: Whisper small.en with initial_prompt = the product/people names → audio/words.json

([[word, start, end]]). Fix mishears first; every beat keys off it.

  1. Shot list: walk the transcript, one Shot per ~2 s, one device per clause. Write it as a

table (time | VO words | device | asset) before coding. Budget: ~1 meme per 15 s, 1 diagram, 3–6 doc highlights, 4–8 tweet/headline stacks, stickers everywhere.

  1. Assets (before choreography, literal-first, section 0):
  • Footage of the people/events named:

python3 <skill>/scripts/fetch_footage.py --search "<person> <event>" → --id <id> --slug x → --slug x --sheet --from A --to B (1 frame per second; a 5 s sheet picked the wrong moments in the first test) → --slug x --cut START DUR → video_bg("assets/footage/x_START.mp4", 0). A YouTube 403 means a stale yt-dlp: the script runs yt-dlp -U and retries. Prefer uploads < 10 min.

  • Free stills: Wikimedia Commons API (generator=search&gsrnamespace=6) → image_bg().
  • Docs: wikipedia_extract("Prompt injection") → wiki_doc(); other sites: fetch text with curl/APIs

and doc_card(wrap_text(...)). No Playwright unless Kevin asks.

  • Logos (fetch_brand_asset.py), portraits for real tweeters (fetch_figure.py), Giphy memes, cutouts.
  • Build a contact sheet of everything and LOOK before choreographing.
  1. Author `render.py`: SHOTS = [Shot(t0, t1, bg=…, layers=[Layer(t0, t1, img=…, xy, tilt, anim)])]

with times from at(WORDS, …).

  1. Preview: PREVIEW="1.0,5.2,…" python3 render.py → tile the frames and LOOK (dead frames,

stacked text collisions, a sticker covering the thing it points at).

  1. Render + mux:

``bash N=$((DUR*30)); for i in 0 1 2 3; do RANGE="$((i*N/4)):$(((i+1)*N/4))" python3 render.py & done; wait python3 -c "from fireship_engine import mux; mux('frames/out','audio/voice.wav','assets/music_bed.mp3','renders/final.mp4')" cp renders/final.mp4 ~/Downloads/"<Readable Name>.mp4" `` Music bed: royalty-free/owned only (it runs the whole video, so it can't follow the 10 s rule below).

Clip + audio policy (Kevin 2026-10-02): any clip and any audio may be used in our edits (news and event footage, memes, a creator's audio overlay). Rule: no single third-party clip on screen for more than 10 s in a row; cut away and come back if needed. Don't add copyright caveats to deliveries. Vertical version of this format: fireship-style-short.

This is the start of the file. Read the full SKILL.md on GitHub.

Security

  • Security scanPassed, 100 of 100Pattern checks on the skill's files.
  • Model reviewNot runA model review is scheduled for the next rescan.

Quality evaluation

  • Task evaluationNot runNo evaluation yet. Run one in Skill Studio.

Source

Popularity

Repository stars
6
7-day trend score
15

Stars and forks are for the whole GitHub repository, not this skill alone. Not refreshed yet.

Works with

Any agent vskill installs to: 56 targets in all. These 39 have a page on this site.

  • Claude Code
  • Cursor
  • GitHub Copilot
  • Windsurf
  • Codex
  • Gemini CLI
  • Cline
  • Amp
  • Roo Code
  • Goose
  • Continue
  • Kilo Code
  • Junie
  • Trae
  • OpenHands
  • Qwen Code
  • AI Agent
  • Tabnine Chat
  • Sourcegraph Cody
  • Amazon Q
  • Firebase Genkit
  • Sweep
  • Devin
  • Phind
  • Mentat
  • Claude Desktop
  • Aider
  • GPT Pilot
  • Plandex
  • bolt.new
  • v0
  • Replit Agent
  • Anse
  • TypingMind
  • BetterChatGPT
  • LibreChat
  • Warp AI
  • Pieces
  • Fig AI
Embed badge
vskill VERIFIED badge
[![vskill VERIFIED](https://verified-skill.com/api/v1/skills/kevinbadi/open-edits/fireship-style-edit/badge)](https://verified-skill.com/skills/kevinbadi/open-edits/fireship-style-edit)

Something wrong with this skill or its page? Tell us.