Hypernatural

WorkflowBy HypernaturalVersion 1, Oct 30, 2026

workflow-animated-short-from-a-blog-post

Turn a blog, Substack or newsletter post into a ~45 s vertical (9:16) animated short: retell the post as a voiceover shot list, cast a narrator, design one stylized set (paper-cut by default) and a fictional character, stage and approve a still per shot, animate on H3 Max at 1080p, cut to the voice, then add calm word-by-word captions and motion-graphic cards in the publication's brand with hn4a-compositor, shown live before the render. About $11–12 of model spend; the cut, captions and cards render locally for free. For a news story with sourced facts and a hook, use workflow-news-article-to-vertical-short.

SKILL.md

Animated short from a blog post

The person picks one written post. You deliver a ~45 s vertical (1080×1920) animated short: narrated, stylized, with captions and a few motion-graphic cards in the publication's brand, plus the same cut without on-screen words.

Defaults unless the person says otherwise: a stylized look (paper-cut works well), never photoreal; a fictional protagonist, never a real person; the product or publication named in full in the narration, never as an acronym; words on screen only from the compositor, never generated into a still or a clip. The job's notes (the approved script, picks, the fix list) go in job-notes.md beside script.md; rounds and deliverables follow the core skill.

Steps

  1. Read the post in full. Note its claim, its own examples, its key advice, and one detail of its world worth a nod (a city, a season, a light).
  2. Shot list and narration. 9 shots of about 5 s, about 110 words (≈44 s at a conversational pace). A shape that works: the post and its claim; 2–3 shots of the old pain played for gentle comedy; the turn; 2–3 shots built on the post's own examples; its key advice; a closing line that ties the video back to the post. One location, one fictional protagonist. Gate: a numbered list; nothing is made before a yes.
  3. Narrator and set, on one page. Three library voices auditioned on one passage of the script (guide-cast-a-voice, elevenlabs-tts-v4). The set (guide-design-a-set, nano-banana-design-empty-set): its description and palette, then two 9:16 2K takes on nano banana Pro. For paper-cut, replace the photographic style lines with: "every surface is visibly cut and layered paper with soft drop shadows between layers, torn and deckled edges, visible paper fibre and grain, slightly imperfect hand-cut shapes, like a handmade paper diorama … no photographic detail, no 3D render look, no vector-flat look. No lettering, words or logos anywhere." Gate: a voice and a set.
  4. Full narration and character. Voice the whole script in one read (guide-voice-a-script, fixed seed) and transcribe it with whisper-cli; check every word and note each shot's window. Spell names the way they sound, and tell the person where a pronunciation comes from. In parallel, two 2x2 character sheets on nano banana Pro edit with the picked set as the style reference, two different people; reject a sheet whose views disagree (hair up in one view only). Gate: the narration and a character.
  5. Stills. Split the sheet into its views (python-split-character-sheet). For tight shots, crop the 2K set plate and scale it back up before staging (nano-banana-stage-cast-in-set). One take a shot, all at once. A new location uses the set only as a style reference ("Do not copy the room in Image 1"). Contact-sheet them and zoom into every paper and screen: blank sheets come back with words on them; fix with "remove the word …, change nothing else" (nano-banana-targeted-fix). Gate: the stills.
  6. Animate (h3-max-image-to-video, prompts per h3-prompt-format): 1080P, each shot's duration its window up to the next shot's start, one seed, all nine at once, on a price. Keep every face "lips closed". Check a start, middle and end contact sheet per clip.
  7. Cut. One ffmpeg pass: each clip scaled and cropped to 1080×1920, trimmed to its window (tpad clone if short), the clips' own sound at about 0.22 under the narration, loudness to −16 LUFS (ffmpeg-normalize-loudness), a 0.7 s hold at the end. Gate: the cut.
  8. Word times: whisper-cli one word a segment on the narration (python-read-word-timings), with a small fix list for the transcriber's spellings (names, product names) before anything is built on them.
  9. Brand (guide-capture-a-brand): the publication's font, accent colour and logo.
  10. Cards and captions (guide-add-titles-and-motion-graphics): one compositor spec over the cut, its own audio as the spec's audio, built by a script from the word times.
    • Cards: 5–6 in the top third, over sky or wall, never the action: the publication's masthead as the opener, then one per beat that has a number or a named thing (a wait in weeks, the tools the post replaces struck through with a drawn path, the result's time, the key advice as a small object), and a closing card. Make them belong to the film; the paper-cut card style is in references/paper-cut-cards.md.
    • Captions, calm: no pill and no bounce. Phrases of up to 6 words or 30 characters (a 0.45 s pause ends one), built word by word with line_html from hn4a-compositor-in-scene-titles, one layer a word so the words line up. Each word rises in 0.22 s from 0.05 s before it is said; the phrase holds until 0.05 s before the next and fades in 0.15 s. Key words in a lightened brand accent.
    • Stills at every card and a sheet of the caption band. Gate: the spec live on a review page with the stills as refs. Render only after a yes; a later fix to a few seconds re-renders with --frames A:B --into.
  11. Deliver per the core skill, with the cut without on-screen words beside it.

Choices this workflow makes

  • One set, one take a still and a clip. Redoing a shot ($0.50–1.25) is cheaper than three takes of everything.
  • 1080P for paper-cut. Paper fibre and deckled edges are the look, and they need the detail.
  • Captions and cards live in the compositor spec, so they change and re-render in under a minute with no model spend.
  • Gated: the script, voice, set, character, narration, stills, cut and the card and caption design; the animation batch goes on a price.

Dead ends

  • A karaoke pill on the captions read as "too bouncy". Calm word-by-word phrases replaced it.
  • Shorter caption phrases (4 words or 22 characters) left single words alone on screen.
  • A name the TTS read wrong until it was respelled in the narration text.
  • Blank paper in the stills came back with words written on it. Zoom in on every sheet and screen before animating.
  • A logo placed by file path inside a text layer showed in the preview but came out blank in the render (hn4a-compositor-motion-graphics).
  • A pull-out showed the diorama's open black top; that shot was scaled up about 2.5%, cropping from the bottom.

Worked example

A 4-minute newsletter issue from Globex's newsletter, about planning a small garden with an app, became a 45.5 s paper-cut short, 1080×1920 at 24 fps: a one-person potting shed on a hillside, nine shots, a market-stall scene taken from the post's own example. Cards: the masthead, a "2 weeks" wait, a struck-out "Sketchbook / Spreadsheet / Calendar" stack of the tools the post replaces, a "20 min" result, and a seed-packet swatch for the post's key advice. Calm word-by-word captions in the newsletter's own font (Brand Sans) with key words in a lightened lavender accent.

StepRoute
Voice3 library voices auditioned on one passage; one name respelled in the text
Setnano banana Pro, 2 takes at 2K, 9:16
Charactertwo 2x2 sheets on Pro edit, the set as style reference
Stills9 on Pro edit, one take each; words removed from blank sheets
Clips9 on H3 Max 1080P, one seed, all at once; one pull-out scaled up 2.5%
Captionsword by word, no pill, after a karaoke pill read as "too bouncy"

Spend: $11.50 (stills $0.17 each, the nine clips about $8.70, voice and sets the rest). The graphics rendered locally in 35 s.

Go make something cool.

Install the app, open your agent, describe the video. That's the whole onboarding.

Sticker HypernaturalSticker BannerSticker TVBoy