Object Lesson
Turn a story that is already going viral into a 45 to 75 second vertical news reel, told fast and with a dry sense of humor through one symbol that stands for the subject and changes as the clock runs. Flat 2D first, 3D optional, real photos only where their license allows. The words land one at a time, a few small details shimmer in a holographic finish, the music stops before the key line and drops back in on it, and every cut lands on a word or a beat.
- Explainer
- 9:16
- 45-75 s
You need an agent that can run code, such as Claude Code, Claude with code execution, ChatGPT Codex or Cursor, plus Node 20+, ffmpeg, Python 3 and Whisper for word timings. Blender is optional, for 3D.
-
Give your agent the skill
Paste it into a new chat. Your agent saves it as a skill and waits for your prompt.
Copy for my agent Copy link -
Fill in the prompt
The story Why your audience cares The symbol Platform Narrator Ending AI toolsUse the object-lesson skill to make a vertical news video for Instagram Reels. - **The story:** [STORY - a link or two, or the headline in one sentence, e.g. "a game studio's founder steps down four days after a failed launch"] - **Post by:** [POST BY - the day and hour it has to be out, e.g. "tomorrow, 6 pm New York time"] - **Why my audience cares:** [ANGLE - optional, e.g. "my followers build apps", or "you decide"] - **Tone:** [TONE - "dry, a little funny" is the default; or "straight, no jokes"] - **The symbol:** [SYMBOL - "you find it", or your own idea, e.g. "a keystone in an arch"] - **Length:** [LENGTH - e.g. about 60 seconds] - **Language:** [LANGUAGE - e.g. English] - **Narrator:** [VOICE - e.g. "design one: a man in his thirties, warm and low, dry, quick, a little amused", "the voice we saved last time", or "my own voice, recorded"] - **Colors and fonts:** [LOOK - "pick them from the story", or your own colors and fonts] - **3D:** [HERO SHOTS - "none, flat only", "Blender is installed: two to four in 3D", or "a generated still for each"] - **Real photos:** [PHOTOS - "find ones I'm allowed to use", "none", or attached with their licenses] - **Music:** [MUSIC - "make three candidates for me to pick", or your own track] - **Ending:** [CTA - "Comment KEYWORD and I'll send you THE THING", with the keyword and what you'll send, or "use the symbol's name as the keyword"] - **AI tools:** [AI TOOLS - e.g. "whatever you already have set up", "HYVIRAL", or "none: I'll record the voice and you make the sounds in code"] - **Avoid:** [AVOID - e.g. no speculation, no stock tips, no faces] Work in this order: 1. Tell me first whether this is news, a follow-up or a look back, and what my post-by time leaves room for. Then research the story and write the fact sheet, with a source and a date for every claim, the weekday beside every date, and what is still unknown. 2. Find the symbol, write its states act by act and name its holographic details, and write the script at 2.6 to 3.0 words a second, with three openings, each from a different way into the story, and with every pivot and every light moment marked. If the story involves harm, write it slower and with no light moments, whatever tone I asked for. Show me the facts, the symbol, the script and the caption, and wait for my OK. 3. Build the plan and a storyboard frame for every shot, drawn with the real scene code and with the safe area marked. Show me the storyboard on one page. If this is our first film together, wait for my OK; if not, or if it is due in under 24 hours, keep building while I look. 4. On our first film, make the narrator candidates and the music candidates with the AI tools I named above, and let me pick; after that, use the voice and the music style we saved. If I said "whatever you already have set up", use that; if nothing is set up, tell me which tools you'll use and wait for my OK. 5. Build the scenes, land the story's moments on the music's beats, place a sound on every change, mix voice first, render, and run every QA gate in the skill. 6. Give me the MP4, a cover frame, the rights list and a ready-to-paste caption.
Anything left in [brackets] is your agent's call.
Copy prompt -
Paste it and approve the storyboard
Your agent checks the facts, finds the symbol and writes the script, down to its Comment KEYWORD close, for your OK, then shows you a storyboard before it generates anything. You pick the narrator and the music, and you get the MP4, a cover frame, the photo rights list and a caption.
Optional: HYVIRAL. Use any AI tools you like, or none. If you'd rather not juggle separate accounts and API keys, HYVIRAL gives your agent AI video, images, music, voice, captions and the final render in one place.
How to connectThe skill, as plain text
---
name: object-lesson
description: "Make a 45 to 75 second vertical news reel (9:16) about a story that is already going viral, told fast and with a dry sense of humor through one symbol that stands for the subject. Flat 2D motion carries most of it (3D is optional), the words land one at a time in one band, two or three small details shimmer in a holographic finish, real photos appear only where their license allows, a custom narrator tells it like a story they can hardly believe, the music stops before the line that matters and drops back in on it, and every cut lands on a word or a beat. Ends on a Comment KEYWORD close. Use when asked to turn a trending headline into a reel, make a viral news video, explain a story in about a minute, or when given the object-lesson prompt."
---
# Object Lesson
A story everyone is already talking about, told in about a minute through one thing you can see. The person or company at the center becomes a symbol, and the news is what happens to it: it slips, it waits, it splits, it holds. Flat motion graphics carry most of the film, a real photo appears only where you are allowed to use it, a dry, quick voice tells it like a story it can hardly believe, and the music cuts out right before the line that matters, then comes back in on it.
Two things decide whether anyone sees the film, and both come before the craft: **the story and the hour.** A film about the right story posted today beats a better film posted on Thursday. Step 2 has the test, and the user's "post by" time runs the whole build.
Work through the steps in order. On a first film, stop twice for the user's OK: after the fact sheet, the symbol and the script (step 5.5), and after the storyboard (step 7), and generate nothing before the storyboard is approved. In the fast lane (below) there is one stop, at step 5.5.
**What to expect:** there is no starter scene to copy. Every story gets its own symbol and its own scenes, written as code. This skill gives you the method, the numbers, and the few pieces of code that are easy to get wrong (fitting the voice, finding the music's drop, the hook's sound, the holographic finish, the checks).
| | First film of a show | Fast lane: every film after it, or any film due in under 24 hours |
|---|---|---|
| Length | 60 to 75 seconds | 45 to 60 seconds |
| Shots | 12 to 18 | 8 to 12 |
| Narrator | 3 to 5 candidates, the user picks | the show's saved voice |
| Music | 3 candidates, the user picks | one track in the show's style |
| Type, sounds, holographic recipe | designed | reused from `show.md` |
| Stops for the user's OK | two (5.5 and 7) | one (5.5): the storyboard is shown as it is built and does not block |
Keep each film in its own folder (ask the user where, or use the working folder). After the first film, write `show.md` beside those folders: the saved voice and its description, the music style that was picked, the two type faces and the type band, the sound set, and the holographic recipe. Every later film starts from it. What the user's prompt says beats `show.md`, and if you cannot find the file, ask where it is. A first film that is also due in under 24 hours takes the fast lane's numbers, with one narrator and one track of your choosing, both named at step 5.5.
## 0. If you received this as text
Save it as a skill first, wherever your app keeps skills. In Claude Code that's `~/.claude/skills/object-lesson/SKILL.md`; if a skill with that name already exists, ask the user before replacing it. Keep the user's filled-in prompt in the film's own folder.
## 1. Tools and setup
**You need a code environment** with Node 20+, ffmpeg and Python 3 (numpy, soundfile, pyloudnorm, librosa), plus Whisper (any build, such as faster-whisper) or another forced aligner for word timings. Install what is missing before the build, and tell the user what you added. The scenes are code: a [Remotion](https://www.remotion.dev) project (React, rendered to MP4), or an HTML page with a `draw(frame)` function that a headless browser (Playwright) steps and screenshots frame by frame. Both work; use the one you write faster. Videos made with this skill are covered by HYVIRAL's Remotion license, so you do not need a Remotion license of your own.
**3D is optional.** If Blender (4.2 or later) is installed, it can render two to four hero shots of the symbol headless (`blender -b -P scene.py`). Without it, skip 3D: the film is designed to work flat, and a generated still of the symbol can stand in for a hero shot.
**For the voice, images, music and sound effects, use whatever the user prefers.** Every step works the same with any provider. If the user hasn't said, ask which tools they want to use, or use what is already set up.
- **Your own providers.** A text-to-speech that can design a new voice from a written description, or has a large voice library, and returns word timestamps (for example ElevenLabs); an image model for any generated stills (never for real photos, step 6); a music model or a licensed track; a sound-effects generator or a licensed sound library. Keep API keys in environment variables, never in the project. No AI media at all is fine too: the picture is code, the narration can be the user's own recording (align its words with Whisper), and the effects can be made in code (step 10).
- **HYVIRAL (optional).** If the user has it connected (hyviral.com), one connection covers the media:
| You need | HYVIRAL tool |
|----------|--------------|
| Narration with word timestamps (stock voices or your own cloned voice) | `generate_voiceover`, `manage_voice_clone` |
| Generated stills and hero shots | `generate_image`, `generate_video` |
| Music candidates | `generate_music` |
| Sound library, placing sounds, final render | `video_audio`, `video_export` |
| Long jobs | `get_job_status` (poll until delivered) |
To connect it: in Claude.ai or Claude Desktop, Customize → Connectors → add a custom connector with the URL `https://api.hyviral.com/mcp`; in Claude Code, `claude mcp add --transport http hyviral https://api.hyviral.com/mcp` then `/mcp` to sign in. Start a session with `get_connection_info`. HYVIRAL never runs your code: you render the scenes yourself.
## 2. How this film works
- **A story that is already moving.** It needs four things: a person or a company at its center that a stranger has heard of; a loss or a gain a stranger can feel (a sum, a physical consequence, a date missed); a clock (four days, a date coming up, eight years of waiting); and at least one big number. You are not the first to report it; you are the one who makes it make sense in a minute. A niche tool, a list of tips or a "what if" has none of the four: say so before you build one.
- **The hour.** Every story is one of three kinds, and the kind decides how the film opens and how it ends:
- **News:** the event is under 48 hours old, or a dated next step is at most three days away (results on Tuesday, a launch on Thursday). The film goes out before that step and points at it.
- **Follow-up:** the event is older than that and still unfolding (an investigation is open, a decision is pending). Open on a way in that is still open (below), and end on what is still not known.
- **Look back:** the story is settled, or weeks old. It needs a peg (step 3).
Measure both from the moment the film will be posted, not from now. Name the kind in your first reply and at the top of `facts.md`. That is a sentence, not a stop. Ask for a "post by" time and plan backwards from it. When the time is short, drop shots, 3D and candidates, never the fact check.
- **The way in.** A story has more than one way in, and the first one closes fast:
- **the event:** what happened. Open here only while it is news.
- **the open question:** who takes over, what the next date decides, what nobody has said yet.
- **the other side:** who gains from it, or who is left holding it.
- **the number:** how big it is, beside a yardstick.
- **the last time:** the precedent, and how that one ended.
- **the viewer:** what it changes for the people watching.
An older story is not a dead one: only its first way in has closed. A follow-up or a look back opens on a way in that still has a question behind it, most often the open question itself, and tells the event as how we got here. Before you turn a story down for its age, try the other five.
- **One symbol, start to finish.** One thing you can see stands for the subject and carries the whole story (step 4). It is how a viewer follows a business story with the sound off.
- **Flat first.** At least three shots in four are flat: seen square on, from the side, or straight down like a plan. Depth comes from layers sliding at different speeds, never from a lens. 3D, if you use it, is two to four hero shots of the symbol.
- **One clock: the narrator's words.** The narration is read in one take and aligned word by word. Every line on screen, every cut, every sound and every music entrance keys off those word times. Re-read a line and everything moves with it.
- **A function of time.** Every scene computes what it shows from the current frame, with no stored state, `Math.random` or `Date`. Use a hash of the frame and an index for anything that looks random, so two renders match.
- **Sound off first.** Every spoken line is on screen as kinetic type, so the film reads muted. Sound makes it land.
- **Pace.** 2.6 to 3.0 words a second, counted as they are read aloud ("38 percent" is two words, "$2.1 billion" is five) and measured from the first spoken word to the last, pauses included, with the planned silence, the quiet line and the voiceless close left out. That is a fast read, and it is only easy to follow because the words always land in the same place, one at a time (Kinetic type, step 6). Slower than 2.3 drags. If a first viewer still loses the thread at 2.6, widen the pauses before you touch the words. The quiet line is the exception: it is read at about 2 words a second.
- **One change per clause.** A shot is one scene and lasts 3 to 6 seconds. Inside it, something new happens with every clause the narrator says, about once a second: a label lands, a counter steps, a stamp hits, a marker moves, the symbol reacts. Keep these changes small. A new scene for every clause is how a build misses its post-by time; a new detail for every clause is how a film feels fast. Nothing is still for more than 0.8 seconds, and between the first spoken word and the last no voice gap runs over 0.8 seconds, except the planned silence before the quiet line (step 9). The quiet line is the one place a single picture can hold for its whole length, as long as it keeps moving (a slow push, a box drawing itself).
- **Dry, not grave.** The film is a little amused by default: three to five light moments, placed by the rules in step 5.3. A story about harm has none (step 15).
- **A holographic detail.** Two or three small details shimmer in a holographic finish, the same ones every time they appear (step 6). They are what the eye follows from shot to shot.
- **Safe area.** 1080 x 1920. The app covers the top 250 px, the bottom 440 px and the right 130 px. Keep every word, number, face and the symbol inside x 60-950, y 250-1480. Only backgrounds and texture run under the margins. Measure after scaling and rotating: a tilted element is wider than its box.
## 3. Research: `research/facts.md`
No line without a fact behind it. For each claim write the claim with its number exactly as reported, the source (a primary source such as the company's own release, a filing, a regulator or a court, or two independent reputable outlets) with the link, and the date it was reported. Then three short lists: **not known yet**, **where sources disagree** (and which version you use), and **left out on purpose** (rumors, speculation).
The file opens with three lines: **Event** (the date, the weekday and the hour it happened), **Post by** (the user's time), and **Kind** (news, follow-up or look back, by the test in step 2).
- **Facts the user hands you** are checked like any other. Each still needs its link and its date before the film goes out: list what is missing at the checkpoint.
- **Dates with weekdays.** Write the weekday beside every date ("Thursday, the 19th") and check it against a calendar. A wrong weekday is the error commenters catch first. If a source pairs a date with the wrong weekday, one of the two is wrong: confirm with a second source, and until then name neither (say "next week").
- **Quotes only word for word,** from the primary source. A short line from a public statement can be read aloud (introduced with "Quote:") and shown on its document. When you may not show the exact words, or the film holds them back on purpose, box the line with its text greyed out and let the voice talk around it. Never invent a sentence for a document, a post or a headline.
- **Only sourced data points.** Never interpolate or invent a value. A chart draws the points you have: with two, draw two, joined by a straight line and labeled with their dates. A chapter with no number gets its one event or its one quoted phrase instead.
- **A look back needs a peg.** Tie it to something happening this week (an anniversary, a related event, the same company back in the headlines), say the year in the first ten seconds, and replace "what's next" with what has changed since. If nothing this week connects to it, tell the user so and ask whether to go on.
- **Check again on the day you post.** A viral story moves, and yesterday's number may already be wrong.
- **Markets:** say what happened and when, never what to buy or sell. Arithmetic, not advice.
## 4. Find the symbol
The symbol is the film's spine. Get it right and the rest is drawing.
- **One thing that stands for the subject.** The subject is what the headline is about: the person, the company or the thing. The symbol stands for it, and what happens to the symbol is what happened to the subject. It is recognizable in a split second, drawable flat in a few shapes, and able to do the story's verb: slip, crack, empty, wait, split, tip over, run out, hold.
- **Start from the story's own detail.** The best symbols come from something only this story has: the thing that literally broke, waited, ran out or changed hands. Look there before you look at any list.
- **Not the logo, not the product shot, not the topic's cliché.** A logo cracking says nothing, and a rocket for growth or a light bulb for an idea has been seen a thousand times.
- **It changes once per act.** Write its states: how it looks in the hook, at each step of the clock, at the turn and at the end. Its last state is the ending.
- **It can react.** Between its states the symbol is allowed small reactions: a flinch, a double take, a slow turn toward the number. Much of the film's humor lives here, with no words at all (step 5.3).
- **It is a drawing, and the film never pretends otherwise.** The narration may point at it ("this meter") only when nobody could hear that as a claim that the object exists in the story; otherwise let the picture carry it. A state never shows a cause the facts do not support: the symbol can fall, but nothing in the picture pushes it unless a source says what did.
- **The face appears once.** If a person is at the center, their real face appears at most once, at the moment they are named, from a photo you are allowed to use (step 6). The symbol can turn into the photo and back. After that the symbol stands for them: never return to the face.
- **The keyword can be its name.** The close needs one short word in capitals that is easy to type. The symbol's name works well, because the viewer has watched it for a minute.
- **It never mocks or blames a real person.** It shows what happened, never a verdict on anyone.
Examples (all invented):
| The story | WRONG | RIGHT |
|-----------|-------|-------|
| A founder steps down after 30 years | the company's logo cracking | a keystone lifted out of an arch: the arch holds for one beat, then every stone settles lower |
| A game is delayed for the third time | a game controller | a sealed box on a shelf, its tape untouched, the dust deeper after every delay |
| A city bans cars from its center | a car with a cross over it | one parking meter, its flag down, the weeds around it taller each month |
| A heatwave breaks a power record | a thermometer | one window air conditioner, dripping, rattling harder until it stops |
Do not start from this table, and do not reuse its symbols: they show the kind of thinking, and a symbol taken from a list looks like one.
Write `symbol.md` with these headings, none left empty: **Symbol**, **Stands for**, **States** (act by act), **Reactions** (or "none", with the reason, when step 15 applies), **Holographic details** (two or three, each with the part it is; step 6 sets their colors with the palette), **Keyword**.
## 5. The script
**The shape**, with rough times for a 60 second film:
1. **Hook** (0-4 s): one line, or two short sentences, of 10 words or fewer in total (5.1). It ends on a cut.
2. **Who and what** (4-10 s): the symbol in its world, and the face once, if there is one. By second 5 the viewer knows who or what this is about, or how big it is.
3. **The clock** (10-30 s): one chapter for each step of the story's clock (Monday, Tuesday, Wednesday; or 2013, 2020, 2025), each opening on its time label with one number.
4. **The scale** (30-38 s): the number that shows how big it is, beside a yardstick the viewer owns (5.2). A counter ticks up, then a chart pulls back to show the whole rise or fall. When the big number is itself a step of the clock, the scale sits inside that chapter.
5. **The quiet line** (about 38-45 s): the hardest fact, or the quote from the document, given the time it needs (a 16-word quote takes about 8 seconds). The music has stopped (step 9), and nothing here is light.
6. **The turn** (45-51 s): the line that answers the hook, with the music's drop landing on it.
7. **What's next** (51-56 s): what happens next, or what is still unknown. The last voiced line turns to the viewer: a question or a plain fact about their own world (the angle in the user's prompt), never advice.
8. **The close** (the last 4 s): on screen and voiceless (5.4).
**Pivots.** Every 8 to 12 seconds one short line reopens the story: a question the next line answers ("So who signed it?") or a turn ("And that was only Monday."). A viewer who was about to leave stays for the answer. Mark each one `[pivot]` in the script. A 60 second film has four to six, not counting the hook and the turn. The scale and the quiet line are left alone: no pivot interrupts them, so the gap across them can run longer.
**When the way in is the open question,** the order changes. The hook asks it, with the name in it and the face if there is one. The clock then tells how we got here, at speed. The scale and the quiet line stand as they are, the turn gives what is known about the answer, and the film ends on the date the answer arrives.
The user's angle (why their audience cares) also decides which facts lead and what the close offers.
### 5.1 The hook: picture, sound and line
Each of the three works on its own.
- **The line:** 10 words or fewer as it is written on screen (a figure in digits counts as one word). It opens a question with stakes and names one concrete thing.
- WRONG: "Big news from the tech world this week." (no stakes, nothing to see)
- WRONG: "Here's everything you need to know about the merger." (an article, not a question)
- WRONG: "This could be the most important memo of the year." (whose memo, and how big? the viewer cannot tell)
- RIGHT: "This parking meter hasn't taken a coin since March."
- RIGHT: "One email ended a thirty-year run in four days."
- **Who or how much, by second 5.** The hook may hold back the why. It never holds back both the name and the number: one of them is said or shown inside the first five seconds, and the other arrives in the line after it. The name is the one the headline uses; the number is the story's biggest.
- **Three openings, three ways in.** Write the hook three times, each from a different way in (step 2): for example the event, the open question and the number. Three wordings of one idea are one opening. Show all three at the checkpoint, each with the line after it and any later line it would change. The opening is the part most worth a second try: a film that did not travel can be cut again from another way in, with the same shots.
- **Show what the line names, as it is said.** If the line says "email", an email lands on the word "email", big (nearly half the frame wide) and detailed enough to read as real: a date, a subject line, grey bars for the body, one line boxed. A viewer who hears a thing and sees nothing skips. Land it within 0.15 s of the word, slightly before rather than after.
- **The picture:** frame 0 is already moving, with a blur around the subject that clears within about 7 frames. Behind the words, a piece of the story's data can already be moving: a thin line in the alarm color falling across the frame, glowing only near its lower end, its head arriving exactly on the hook's break.
- **The sound:** something on frame 0, and a break on the hook's cut (step 10 has a held string chord that snaps). Keep it under the voice.
### 5.2 Lines
- One idea per line, short and literal. A sensational line is fine; a false one is not.
- Say numbers the way people say them, and write them as digits on screen.
- **The one or two numbers the film turns on each get a yardstick the viewer owns:** a year of a country's output, every seat in a stadium, the yearly pay of everyone in a town. Compute it from sourced figures and keep the arithmetic in `facts.md`. When no honest outside comparison exists, use a ratio from the story's own numbers ("27 for every 20"). Never invent one. A number with nothing beside it is only a number.
- Mark one accent per line for the display face (step 6): one word, one number with its unit, or one date.
- Count the words as they are read aloud (step 2): "243" is four. The voiced seconds times the pace give the word count. A 60 second film with a 4 second close has about 56 voiced seconds, of which the silence and the quiet line take about 8: about 150 words in all at 2.8 words a second, about 120 at 2.2.
### 5.3 Tone: dry, not grave
Tell it the way a friend tells a story they can hardly believe: straight facts and a raised eyebrow. A story that is not about harm gets three to five light moments. Mark each one `[light]` in the script.
The examples below reuse the invented stories from step 4. Write your own: a line taken from a list reads like one.
| Where it lives | What it is | Example (invented) |
|----------------|------------|--------------------|
| An aside | one dry sentence after a fact, never in place of it | "The game was first announced in 2019. The box has been on that shelf so long it counts as furniture." |
| The symbol | a small reaction, with no words | the parking meter's flag twitches when the fine doubles |
| A stamp or a label | a deadpan word landing on the picture | "NEARLY READY" stamped on the box for the third time |
| A sound | one comic stop or a small squeak, under the voice | the music hiccups when the date slips again |
- **Aim at the situation, the company's decision or the absurd number.** Never at a victim, a private person, or anyone's looks, body, accent, family or private life.
- **A light moment never bends a fact.** The number stays exact and the quote stays word for word. If a line is only funny when the fact is rounded up, cut the line.
- **Never two in a row,** and none in the hook's claim, in the quiet line, or in a line that carries an accusation.
- **The straight lines stay straight.** The humor works because most of the film is plain. A script where every line winks reads as a sketch, and nobody shares a sketch as news.
- **The narrator reads them deadpan** (step 8).
- **A story about harm has none** (step 15).
### 5.4 The close
- On screen, voiceless, 3.5 to 4.5 seconds: "Comment KEYWORD and I'll send you THE THING." The keyword types itself into a comment field and sends.
- The music's fade finishes under the first two seconds of the close, before the keyword types. After that the close runs on its own small sounds: typing, a soft send.
- A poll or a question for the comments goes in the post, never drawn into the film.
### 5.5 Checkpoint
Show the user, in one message or on one page:
- first, anything you changed from what they asked for (the kind of story, the tone under step 15, the length);
- the fact sheet, with its **Event**, **Post by** and **Kind** lines;
- `symbol.md`, with the holographic details named;
- the script, with its word count, its words per second and its estimated length; the three openings and the way in each one takes; every `[pivot]` and every `[light]` marked, so the user can strike any of them; and the second by which the name and the number have each appeared;
- the caption (step 16).
Wait for their OK before you draw anything: a new symbol redraws every shot.
## 6. The look
### Color and type come from the story
Leave the palette to the story. Pick two neutrals, one accent and one alarm color (for a loss, a fall, a warning) from the story's own world, write them as tokens in one file, and use nothing else. Use one sans for the lines and one display face (a serif italic, or a condensed) for the accents, the chapter titles and the counter's figures, never for whole lines. A small mono face may carry the source labels (below). Keep the font files local, so a render never fetches one.
### The holographic detail (required)
Two or three small details in every film carry a holographic finish: their color shifts as they move, like foil catching the light. In a flat picture with a limited palette it is the one thing that glints, and the eye goes to it.
- **Which details.** A part of the symbol or of the data: a seal, a rivet, an edge, a badge, the head of the chart line, the dot on the current day. Name them in `symbol.md` and keep the same ones for the whole film. At least one is on screen during the hook, and one is in the cover frame.
- **Small.** Each one is no wider than about 200 px in a 1080 x 1920 frame. On anything large the finish looks like a sticker. Never the whole symbol, never a word or a number that has to be read, never a face, a photo or a logo, and never the alarm color's job.
- **A swing, not a rainbow.** Each detail has its own color, and its hue swings up to a quarter of the color wheel either side of it. Motion drives the swing: the detail's angle, its position, the camera's move. Keep the color strong and add a faint glow. Choose each color with the palette, so that its whole swing stays clear of the alarm color, and write it into `symbol.md`.
- **Always moving.** A holographic detail that sits still is only a gradient. Whenever one is on screen, it or the camera is moving, even slightly.
In flat code, compute the hue from the frame:
```js
// base: the detail's own hue, 0 to 360. angle in radians. x, y: its position in the frame, 0 to 1.
function holoHue(base, frame, fps, angle = 0, x = 0, y = 0) {
const phase = 0.9 * angle + 2.2 * x + 1.3 * y + 0.35 * (frame / fps);
return (base + 90 * Math.sin(2 * Math.PI * phase) + 360) % 360; // a quarter of the wheel either side
}
// Fill the detail with a gradient between two hues a short step apart, so the color also travels across it:
// from hsl(holoHue(b, f, fps, a, x, y), 95%, 60%) to hsl(holoHue(b, f, fps, a, x + 0.12, y), 95%, 60%)
```
In 3D, drive the hue of the detail's material from the reflection direction and the facing angle in the same way, mask it to the detail, and give it a little light of its own so it stays vivid in shadow.
### Scenes to draw from
Each one is a function of the frame. Most films need five or six of these, not all eight.
1. **The symbol in its world.** The hook and every turn.
2. **The face, once.** The symbol spins, faster on each turn, and lands as the person's photo on the word that names them; or a photo slides into the symbol's place. Keep it on screen for at least a second and a half, always moving (a slow push), then hand back to the symbol.
3. **The document.** A release, a letter, a filing or a post: your own reconstruction, with the real date, the real heading and grey bars for text you don't quote. A box draws itself round the line that matters. Say in the caption that documents are reconstructions.
4. **The chapter title.** A time label slams in (MONDAY, 2019, DAY 3) with its one number and the symbol in its new state.
5. **The counter.** A number ticks up toward the real figure, a soft tick per step, its unit beside it.
6. **The chart pull-back.** Start tight on the last value. When the counter starts ticking, pull back until the whole line shows, and fill the gap between the start and the end in the alarm color. Draw it to scale from the sourced numbers, so it needs no disclaimer.
7. **The break.** The symbol, or a phrase, splits or tears into pieces that become the next part: "a second chance" torn into four strips that become the four days.
8. **The close.** The comment field and the keyword.
**Source labels.** In a corner of any scene that shows a fact, a small label in the mono face names where the fact comes from and its date ("COMPANY RELEASE · NOV 12", "COURT FILING · PAGE 3"). Each one is true, short and inside the safe area. Never a made-up status such as "LIVE" or "CLASSIFIED": the labels are the film showing its sources, and each one counts as a small change inside its shot.
### Real photos, logos and media
- Use a real photo only when its license allows it: public-domain works (many government photos are), an open license such as Creative Commons BY (give the attribution it asks for, link the license, and say if you changed the image), the company's official media kit within its terms, or a photo the user has licensed. Keep each one's source, license and attribution in `rights.md`, and put the attributions in the caption.
- Read a media kit's terms before you use it. "No alteration" means the image appears whole and unchanged: move and scale it as a whole, with no masks, recoloring, blends or morphs (so the symbol cannot turn into it). "Editorial use" or "no use in advertising" means organic news posts only: if the post will be boosted or sponsored, leave those images out. Some kits also forbid use with AI tools, or in promoting them. When the terms are unclear, leave the image out.
- Never put a real photo or a media-kit image through an AI model: no edits, no generated motion, no AI upscaling. Move it with code only: crop, scale, pan, mask, spin.
- Never animate or alter a company's logo. A product shown as it is, from its own kit, is fine.
### 3D (optional)
Two to four hero shots of the symbol, and never a shot the viewer has to read. Render at about 80 % of the frame (864 x 1536) with a denoiser and around 64 samples, then scale up: the platform compresses the video anyway, and the render takes a fraction of the time. The type, the flat scenes and the transitions are drawn at full size on top.
### Kinetic type
Every spoken word lands on its own word time, one word at a time, building a phrase of one to four words; then the phrase clears and the next one starts. The type has one home for the whole film: one band (the top of the safe area, unless the user asks for another), one size, one sans, with the accent word in the display face and the accent color. The viewer's eye never has to look for the words, and that is what lets the narrator go fast. When the picture needs that band, move the picture. Over a busy frame, put a dark band behind the type. Each word arrives with a blur that clears in about 0.12 s, with no slide and no bounce; on a hard fact, the phrase shakes once.
### Transitions
Every scene change has a cause: a whip with motion blur, a zoom through an object, the symbol's own motion carrying into the next scene, a flash on a hit. Pick two or three kinds and repeat them. A person enters blurred and goes crisp. Never a bare hard cut between scenes. After a hard fact or the turn, leave a breath of 0.3 to 0.5 s before the next line.
## 7. Plan and storyboard (before generating anything)
`plan.json` has one entry per shot, with every field filled (write "none" where a shot has none):
| Field | Holds |
|-------|-------|
| `lines` | the line or lines it covers, with any `[pivot]` or `[light]` mark |
| `symbol` | the symbol's state, and its reaction if it has one |
| `scene`, `kind` | the scene from step 6; flat, 3D or photo |
| `changes` | one small change per clause, each with the word it lands on |
| `accent` | the accent word of each phrase |
| `label` | the source label |
| `holo` | which holographic detail is in frame |
| `transition` | how the shot is entered, and its cause |
| `sounds`, `music` | the sounds; the music's state (in, out, drop) |
Use 12 to 18 shots for a first film and 8 to 12 in the fast lane.
Draw one real frame per shot with the scene code (not a mood picture), with the type in place and the safe area drawn on it. Then show the user the storyboard on one page (an HTML page, or a document with the frames as images), each frame beside its line, its sounds and the music's state. On a first film, wait for their OK before you generate anything. In the fast lane, show the page and keep building, and fold their notes in as they arrive.
## 8. The narrator
- **Design a voice for the show,** not a stock preset. Write a description with the age, register, texture, accent and delivery. For example: "a man in his thirties, warm and low, dry, quick without rushing, a little amused, American, like a friend telling you a story he can hardly believe." Or use the user's own voice. If your tools cannot design a voice, audition their library against the same description.
- **On a first film, make 3 to 5 candidates, each reading the whole script.** Judge the whole read, not the first line: a voice that charms on line one can tire the ear by second 30, and a grave one makes every story sound like bad news. Prefer a low, natural voice; one that sits high reads like an ad. Let the user pick, save the voice, and write it into `show.md`. Later films use it with no new candidates.
- **The light lines are read deadpan:** no laugh in the voice, and no pause that announces a joke.
- **Pace with the model's own controls.** If it takes delivery tags or style settings, use them to slow or lower a read. A speed slider flattens the voice, so leave it alone.
- **One take, aligned.** Read the full script in one take so the narrator's flow stays whole, then align it word by word.
- **Fit the length with pauses, not speed.** Measure words per second, then scale the narrator's own pauses between sentences to reach the target length. Never stretch the words. Keep at least about 0.75 of each original pause; if the film is still too long, cut words.
```python
# speech: seconds of voiced audio; pauses: the reader's own pauses between lines, in seconds
def fit_pauses(speech, pauses, close, target, floor=0.75, ceil=1.0):
alpha = (target - close - speech) / sum(pauses)
if not floor <= alpha <= ceil:
print(f"pauses would need x{alpha:.2f}: rewrite the script instead")
return max(floor, min(ceil, alpha)) # multiply every pause by this
```
- **Re-reading one line later:** use the same saved voice, make two or three takes, keep the one closest in pitch to the original take, splice it at the quietest point between sentences, and match its loudness.
- **Never clone or imitate a real person,** including anyone in the story.
## 9. Music
Music is not wall to wall. It enters, stops, and comes back where the story needs it.
- **On a first film, make three candidates** in different styles (for example: plucked strings over a dry beat; strings with low brass; a thriller pulse). Describe the sound, never an artist. Ask for at least 75 seconds with one clear build and a drop, so you have material to edit. Generators often ignore style words, so listen to each one blind before you name it. Let the user pick, and write the style into `show.md`: later films get one new track in it.
- **Match the bed to the script.** A story told with a raised eyebrow wants a bed with some bounce. A grave bed under a light script makes the light moments sound cruel.
- **Match the drop to the turn.** On a loss, an exit or a fall, the drop is weight (low strings, a slow heavy hit), never a celebration.
- **You edit the track; it never plays straight through.** Its opening runs from the hook's cut, the stop is a cut, and when it returns you jump to its drop bar, with its own build (or its opening reversed) as the swell before it.
- **Where it plays:**
- it enters on the hook's cut, with a downbeat on the cut;
- it plays under the clock;
- it stops a beat before the quiet line, as a cut (0.15 s at most), not a fade;
- it comes back with its drop on the turn line or the big number, after a short swell;
- it ends with the last spoken line: the fade starts about 0.25 s after the last word and lasts about 1.8 s, so the close is free of it.
- **Find the grid and the drop:**
```python
import librosa, numpy as np
y, sr = librosa.load("music.wav", sr=None, mono=True)
tempo, beats = librosa.beat.beat_track(y=y, sr=sr, units="time")
bars = beats[::4] # listen: is beat 0 a downbeat? if not, shift the slice
db = np.array([20 * np.log10(np.sqrt(np.mean(y[int(a * sr):int(b * sr)] ** 2)) + 1e-9)
for a, b in zip(bars, bars[1:])])
drop = bars[int(np.argmax(db >= db.max() - 1.0))] # the first bar within 1 dB of the loudest
```
- **Land the story on the beat.** List the moments that should hit a beat: each chapter's time label, the counter's last tick, the break, the turn, the last line. Move each onto its nearest beat by changing the pause before its line by up to one beat, then print every moment's offset. Compute beat n from its index (phase + n × 60 / BPM), never by adding a rounded beat again and again: that drifts.
## 10. Sound effects
Make a set for this story with the sound-effects tool the user chose, a licensed library, or code (noise and sine, shaped). Place a sound on every visible change, at the same event the picture uses.
| Moment | Sound | When |
|--------|-------|------|
| The hook | a held string chord, two notes a semitone apart, swelling, that snaps | under the hook, the snap on the cut |
| A document arrives | a soft paper slide and dock | 0.1 s before it lands |
| A chapter title | a low hit, with a short riser into it | the riser ends on the title |
| The counter | a soft tick per step, rising in pitch | every step |
| The chart pull-back | a low swell and a long whoosh | across the pull-back |
| The break | a tear or a crack | on the split |
| A stamp or a source label | a short dull thud; a soft tick | on the hit |
| A light moment | one small sound: a hiccup in the music, a squeak, a dry click | on the reaction, under the voice |
| A transition | a whoosh | landing 40 to 190 ms before the cut |
| The close | typing, then a soft send | on the keyword |
The hook's snap, made in code (a click, a bright metallic zing that falls as it dies, a small body thump):
```python
import numpy as np
SR = 48000
def snap(seconds=0.9, seed=7):
t = np.arange(int(seconds * SR)) / SR
click = np.random.default_rng(seed).standard_normal(t.size) * np.exp(-t / 0.002)
zing = sum(a * np.sin(2 * np.pi * f * t * (1 - 0.04 * t)) * np.exp(-t / d)
for f, d, a in [(2350, .18, 1), (3420, .12, .6), (4710, .08, .4), (6130, .05, .25)])
twang = 0.5 * np.sin(2 * np.pi * 660 * t) * np.exp(-t / 0.25)
body = 0.8 * np.sin(2 * np.pi * 140 * t) * np.exp(-t / 0.06)
x = 0.6 * click + 0.35 * zing + twang + body
return x / np.abs(x).max()
```
Keep it well under the voice: a snap that is too loud sounds like a mistake.
- **Measure every file.** Generated effects can come back silent, or far louder than asked. Normalize each one to a common level before you place it.
- **The same sound twice within 80 ms:** keep the louder one.
## 11. Mix, voice first
- **Voice:** -16 LUFS, lightly compressed.
- **Effects:** about 9 to 10 LU under the voice overall, ducked under speech so nothing masks a word.
- **Music:** about 20 to 22 LU under the voice while it speaks, ducked about 4 dB with a 1.4 s release, and lifted in the gaps.
- **The hook's chord:** about 15 LU under the voice and not ducked, so it holds the gap before the first line.
- **Master:** -14 to -16 LUFS integrated, true peak at or below -1 dBTP. Give it a 10 ms fade-in, or the film opens on a click.
## 12. Build
- **One clock file.** Word times give each line's start and end, those give each shot's anchors, and those give every cue. Write it to JSON, and keep a map of which shot plays when: when something looks wrong, the map tells you where.
- **Render** the flat scenes and the type at 1080 x 1920 and the 3D at its smaller size, scaled up. Composite, then encode H.264 (CRF about 17) with AAC and `+faststart`. Pick 24 or 30 fps and keep it everywhere.
- **Mux your own mix,** trimmed to the exact length (`-t`, never `-shortest`).
## 13. QA
1. **Facts:** every number on screen traces to `facts.md`, and every weekday to a calendar.
2. **Pace:** report the words per second, counted as in step 2. 2.6 to 3.0, about 2 on the quiet line, and about 2.2 for a story under step 15.
3. **Hook:** the thing the line names is on screen within 0.15 s of its word, frame 0 differs from frame 3, and the name or the number has appeared by second 5, with the other in the line after it.
4. **Safe area:** contact sheets at one frame per second with the safe box drawn. Nothing that must be read is outside it.
5. **Music:** in on the hook's cut, out before the quiet line, the drop on the turn, gone before the close.
6. **Beats:** the list of moments and their offsets.
7. **Loudness:** `ffmpeg -i final.mp4 -af ebur128=peak=true -f null -`
8. **Dead air:** `ffmpeg -i mix.wav -af silencedetect=n=-40dB:d=0.5 -f null -` finds nothing outside the planned stop.
9. **Stills:** `ffmpeg -i final.mp4 -vf "freezedetect=n=0.001:d=0.8" -an -f null -` finds nothing.
10. **Words:** transcribe the mix with Whisper and compare it with the script.
11. **Rights:** every real image is in `rights.md`, with its source, license and attribution.
12. **Watch it twice:** once with sound, once muted.
13. **Holographic:** each detail named in `symbol.md` appears, is inside the size limit, is on screen in the hook and in the cover frame, and shows a different hue in two frames one second apart.
14. **Tone:** every `[light]` moment still aims at the situation; none sits in the hook's claim, in the quiet line or beside harm; no fact was bent to make one work. A story under step 15 has none.
15. **Pivots and labels:** a pivot every 8 to 12 seconds, and every source label matches `facts.md`.
16. **The hour:** the film is finished before the post-by time, and the facts were checked again that day.
17. **The way in:** a follow-up or a look back opens on something still open, not on the event itself.
## 14. Traps
| Symptom | Fix |
|---------|-----|
| The narrator sounds bored by second 20 | judge candidates on the whole read; use delivery tags; try a lower voice |
| "Too fast to follow" | check the type first: one band, one word at a time. Then widen the reader's pauses, down to 2.3 words a second |
| The film feels like a lecture | add the pivots, let the symbol react, and give it three to five light moments |
| Every line is a joke | keep three to five: the plain lines are what make them land |
| A light moment reads as cruel | it aimed at a person, or sat beside harm: cut it |
| The holographic detail looks like a sticker | it is too big or sitting still: shrink it, and drive its hue from motion |
| The hook is a riddle | say the name or the number inside five seconds |
| The film went out after everyone else's | set the post-by time first, and drop shots, 3D and candidates to meet it |
| The story feels old | change the way in, not the story: open on the question that is still open |
| A finished film did not travel | cut it again from another way in: a new hook and order, the same shots |
| The picture drags between cuts | one small change per clause: a label, a counter step, a stamp |
| The caption opens with the keyword | the story first, the keyword last (step 16) |
| The voice turned robotic | a speed slider: undo it and fit the length with pauses |
| Music under the whole film, and nothing lands | stop it before the quiet line and drop it back in on the turn |
| A music candidate isn't the style you asked for | the generator ignored the style words: listen blind and say what it is |
| An effect is missing from the mix | the file came back silent: measure every file |
| The hook's falling line stops before its sound | compute the line's head from the hit time, so it arrives on the hit frame |
| The face keeps coming back | once only; after that the symbol stands for the person |
| The film feels like a 3D demo | three shots in four flat, and 3D only for hero shots of the symbol |
| A word sits under the app's buttons | the safe area, measured after scaling and rotating |
| The hook names a thing nobody sees | show it, big, on the word |
| A chart carries a "not to scale" note | draw it to scale, or leave it out |
## 15. When not to joke
When the story involves deaths, injuries, people losing their jobs, or someone's private loss, it has no light moments. This overrides the tone the user asked for: say so at the checkpoint. Slow the pace to about 2.2 words a second, drop the sound gags, the symbol's reactions and the shake, and keep any moment of harm out of the cover frame.
- **The same voice, read plain.** Use the show's narrator with no amusement in the delivery, and the show's music at its sparest.
- **Nothing shimmers beside the harm.** Frame the quiet line so that no holographic detail is in it.
- **Ask about the close.** An offer can read badly under a death toll. Give the user the choice at the checkpoint: the keyword close in the film, or the sources in those four seconds with the keyword line in the caption only.
A scandal sits in between: its light moments are about the company, the sums and the boardroom, never about anyone's private life. When you cannot tell which kind of story it is, write it straight and ask the user at the checkpoint.
## 16. Deliver
The MP4, a cover frame (the hook, with the symbol and a holographic detail), the script, `facts.md`, `rights.md`, and a ready-to-paste caption built in this order:
1. the hook as one sentence, with the name and the number in it;
2. three to five facts as short lines;
3. "Facts as of" with the date of your last check (the day it is posted), and the sources by name;
4. the photo attributions, and one line saying that the documents shown are reconstructions (and that every picture is drawn, when there are no photos);
5. three to five hashtags that name the subject (the company, the person, the topic), never a private detail;
6. the comment keyword line, last.
No link.
The prompt
# The prompt First give your agent the object-lesson skill (paste the skill text and ask it to save it as a skill). Then replace everything in [BRACKETS] below and paste it in. **Tip:** use any AI tools you like for the voice, music, images and sound effects; the skill works the same with all of them, or with none (every scene is code, the narration can be your own voice, and the sounds can be made in code). If you'd rather not set up separate AI accounts and API keys, HYVIRAL (optional) is one way to get them behind one connection (hyviral.com; in Claude.ai → Customize → Connectors → add `https://api.hyviral.com/mcp`). --- Use the object-lesson skill to make a vertical news video for [PLATFORM: Instagram Reels / TikTok / YouTube Shorts]. - **The story:** [STORY - a link or two, or the headline in one sentence, e.g. "a game studio's founder steps down four days after a failed launch"] - **Post by:** [POST BY - the day and hour it has to be out, e.g. "tomorrow, 6 pm New York time"] - **Why my audience cares:** [ANGLE - optional, e.g. "my followers build apps", or "you decide"] - **Tone:** [TONE - "dry, a little funny" is the default; or "straight, no jokes"] - **The symbol:** [SYMBOL - "you find it", or your own idea, e.g. "a keystone in an arch"] - **Length:** [LENGTH - e.g. about 60 seconds] - **Language:** [LANGUAGE - e.g. English] - **Narrator:** [VOICE - e.g. "design one: a man in his thirties, warm and low, dry, quick, a little amused", "the voice we saved last time", or "my own voice, recorded"] - **Colors and fonts:** [LOOK - "pick them from the story", or your own colors and fonts] - **3D:** [HERO SHOTS - "none, flat only", "Blender is installed: two to four in 3D", or "a generated still for each"] - **Real photos:** [PHOTOS - "find ones I'm allowed to use", "none", or attached with their licenses] - **Music:** [MUSIC - "make three candidates for me to pick", or your own track] - **Ending:** [CTA - "Comment KEYWORD and I'll send you THE THING", with the keyword and what you'll send, or "use the symbol's name as the keyword"] - **AI tools:** [AI TOOLS - e.g. "whatever you already have set up", "HYVIRAL", or "none: I'll record the voice and you make the sounds in code"] - **Avoid:** [AVOID - e.g. no speculation, no stock tips, no faces] Work in this order: 1. Tell me first whether this is news, a follow-up or a look back, and what my post-by time leaves room for. Then research the story and write the fact sheet, with a source and a date for every claim, the weekday beside every date, and what is still unknown. 2. Find the symbol, write its states act by act and name its holographic details, and write the script at 2.6 to 3.0 words a second, with three openings, each from a different way into the story, and with every pivot and every light moment marked. If the story involves harm, write it slower and with no light moments, whatever tone I asked for. Show me the facts, the symbol, the script and the caption, and wait for my OK. 3. Build the plan and a storyboard frame for every shot, drawn with the real scene code and with the safe area marked. Show me the storyboard on one page. If this is our first film together, wait for my OK; if not, or if it is due in under 24 hours, keep building while I look. 4. On our first film, make the narrator candidates and the music candidates with the AI tools I named above, and let me pick; after that, use the voice and the music style we saved. If I said "whatever you already have set up", use that; if nothing is set up, tell me which tools you'll use and wait for my OK. 5. Build the scenes, land the story's moments on the music's beats, place a sound on every change, mix voice first, render, and run every QA gate in the skill. 6. Give me the MP4, a cover frame, the rights list and a ready-to-paste caption.
More skills
All skillsMotion Ad
A soft voice, words that build, a prompt typed live, a logo reveal.
Ad · 9:16 + 16:9 · 20-90 s
Notebook Doodle Explainer
Ballpoint on lined paper: sticky notes, a highlighter, page flips.
Explainer · 9:16 · 60-120 s
Night Desk Explainer
A newsroom at night: maps, live charts and photoreal shots for serious stories.
Explainer · 9:16 · 60-180 s