One Take, Five Worlds
Turn one take of you talking to camera into a beat-synced reel: the room around you changes on every downbeat, from a jazz bar to a snowy cabin to a neon motel, and the light on you changes with it.
- Creator
- 9:16
- 20-30 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 and Python 3.10+ with PyTorch and MediaPipe.
-
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 five rooms Where it is filmed Platform Who is talking Ending AI toolsUse the one-take-five-worlds skill to make a vertical video for Instagram Reels. - **The take:** [FOOTAGE - e.g. "my own phone video, attached, filmed on a tripod", or "an AI presenter made from this photo of me"] - **Where it is filmed:** [PLACE - e.g. my rooftop at golden hour, my kitchen, my office] - **Who is talking:** [PRESENTER - e.g. me, a woman in her twenties, relaxed American accent, white t-shirt] - **The five rooms:** [ROOMS - e.g. a 1960s jazz bar, a snowy log cabin, a desert motel with a neon sign, a retro arcade, an underwater aquarium tunnel. Or "you pick five rooms whose light contrasts"] - **What I say:** [LINE - e.g. "use the skill's example lines", or my own script, one short sentence per room] - **Length:** [LENGTH - e.g. about 23 seconds, eleven bars] - **Language:** [LANGUAGE - e.g. English] - **Music:** [MUSIC - e.g. glossy nu-disco or French house at about 120 BPM, no vocals; or a track I own] - **Look:** [STYLE - e.g. a coral, violet and cyan gradient for the wipe line and labels, a clean bold sans-serif] - **AI tools:** [AI TOOLS - e.g. "whatever you already have set up", "HYVIRAL", or "Veo for the takes and Nano Banana for the rooms"] - **Ending:** [CTA - e.g. "Comment WORLDS and I'll send you the skill", or "Follow for part 2"] - **Avoid:** [AVOID - e.g. no brand names or logos in the rooms, no text over my face] Work in this order: 1. Write the line bar by bar on the music grid, and pick the five rooms and the one detail each label shows. 2. Build a storyboard page (per bar: a concept frame, the line, the on-screen text, the motion, every sound, the music section, and the exact prompt for every generated asset). Show it to me and wait for my OK. 3. Make or check the take (camera completely still, short sentences with pauses), then a re-lit still and an empty room for each world, and check that every re-lit still keeps my pose. 4. Matte me, re-light every frame into each room, and move each room's light on the beat, on the room and on me. 5. Arrange the music from its stems to the picture, build the wipes, labels, readout, particles, recap, picker, captions and ending in Remotion, and mix voice first. 6. Run every QA gate in the skill (transcript, contact sheet, two identical renders, loudness, no gap over 1 second) and give me the MP4, a cover frame, and a ready-to-paste caption with hashtags.
Anything left in [brackets] is your agent's call.
Copy prompt -
Paste it and approve the storyboard
Your agent writes your lines on the music grid and shows you a storyboard for your OK before it generates anything, then builds and checks the video. You get the MP4, a cover frame 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: one-take-five-worlds
description: Turn one locked-off take of a person talking to camera into a beat-synced vertical reel where the room around them changes on every downbeat (for example a jazz bar, a snowy cabin, a neon motel, an arcade and an aquarium) and the light on the person changes with each room. A cut-out matte, a re-light taken from a re-lit still, animated room plates, a glowing scan-line wipe, room labels, a strobe cold open, a recap, a room picker and a comment-to-get ending, all timed to the music. Use when asked to "put me in five different rooms", "same take, different worlds", "one take, many places", or when given the one-take-five-worlds prompt.
---
# One take, five worlds
The idea: film one take of someone talking on a fixed camera, then move them through five rooms, one per bar of the music, while the light on their face and body changes to match each room. It works because it is honest. The person's pixels are filmed once, and only the room and the light on them change. Several takes are fine, as long as every join hides under a wipe that lands on a downbeat.
Work through the steps in order. Show the user the storyboard (step 2) and wait for their OK before you generate anything.
## 0. Tools
**You need a code environment** (for example Claude Code, or Claude with code execution) with Node 20+, ffmpeg and Python 3.10+ with numpy, scipy, pillow, mediapipe, torch and torchaudio. The graphics and the final render are a [Remotion](https://www.remotion.dev) project that you write (React, rendered to MP4). Renders you make with this skill are covered by HYVIRAL's Remotion license, so you don't need a Remotion license of your own.
Every library named here allows this use: MediaPipe (Apache-2.0) for the matte and the face, torchaudio's wav2vec2 base model for word timing, and torchaudio's Hybrid Demucs for music stems.
**For the take, the room images, the music and the sound effects, use whatever the user prefers.** If the user hasn't said, ask which tools they want, or use what is already set up. Two common routes:
- **Your own providers.** The take can be the user's own phone video on a tripod (the best case), or an image-to-video model that also makes speech (for example Veo, Kling or Runway), started from a photo of the presenter. Rooms come from any image model that edits photos (for example Nano Banana, GPT Image or Flux Kontext), or from photos of real rooms. Music can come from a music model (for example Lyria) or a licensed library track. Effects can come from a sound library or a generator (for example ElevenLabs Sound Effects). No AI media at all is fine too: real rooms, your own footage, a library track.
- **HYVIRAL (optional).** If the user has it connected (hyviral.com), one connection covers the media steps:
| You need | HYVIRAL tool |
|----------|--------------|
| AI presenter takes (image to video, with speech) | `generate_video` |
| Re-lit stills and empty rooms | `edit_image`, `generate_image` |
| A music track | `generate_music` |
| Captions, sound placement, review, final render | `video_captions`, `video_audio`, `video_review`, `video_export` |
| Long jobs | `get_job_status` (poll until delivered) |
With HYVIRAL connected, start with `get_connection_info`. 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.
You can mix routes. Nothing below depends on any one provider.
## 1. The line and the rooms
Write the words first, then decide what each bar must prove on screen. A shape that works, at about 120 BPM (a bar is 2 seconds, about 23 seconds in all):
| Bar | Picture | Line (example) |
|-----|---------|----------------|
| 1 | Strobe through all five rooms, one 8th note each, then a tape-stop back to the real place | "I filmed this once, |
| 2-3 | The real place, a "1 TAKE" stamp, a REC readout, the build | on my roof. Then I asked my Claude for five more rooms." |
| 4-8 | One room per bar, each entered by the wipe | "Same take. Same spot." / "Same outfit. Same smile." / "Five different worlds." / "And the light on me changes too." / "I never even left the roof." |
| 9 | Recap: the five rooms as vertical strips, two title slams | "One take. Five worlds." |
| 10 | A room picker, the room behind changing on every beat | "Now Claude can make these for you." |
| 11 + 2 beats | The ending over the real place, the last beat matching frame 1 | "Comment [KEYWORD] and I'll send you the skill." |
**Pick rooms whose light contrasts**: warm tungsten, firelight, neon at dusk, screen glow, blue water. Give each a label with one specific detail ("JAZZ BAR · 1962", "CABIN · −12°C", "MOTEL · MILE 88", "ARCADE · LVL 99", "AQUARIUM · 12 M"). Keep each spoken line inside its bar, and keep every gap between lines at 1 second or less.
## 2. Storyboard (before generating anything)
Build one page: per bar, a concept frame, the line, the on-screen text, the motion, every sound, and which part of the music plays. List the exact prompt for every generated asset. Show it to the user and wait for their OK.
## 3. The take
- **The camera never moves.** A phone on a tripod, chest height, the same framing for every take, and the person on one spot with clear space around the head and arms. The matte and the plates depend on it.
- Soft, even light on the real take makes the re-light easier. Strong backlight makes hair edges harder.
- Say short sentences with a half-second pause between them: every pause is a cut point.
- **With an AI presenter:** start every take from the same approved photo, and keep one prompt template: the voice (accent, pace, mood), "a vertical phone on a tripod, completely still", "she says only this line and nothing else", and an audio sentence (only her voice, no music, no clicks, nobody else speaks). Two traps:
- A keyword in capitals gets spelled out letter by letter. Write it in lowercase in the line and add "the word [keyword] is said once as one ordinary word, never spelled out".
- Takes often add words after the line. Cut at the last scripted word.
- Check every take against its first frame (face similarity) and the voice across takes, and retake an outlier.
- **Word timings:** force-align the known line on each take (torchaudio `WAV2VEC2_ASR_BASE_960H` plus `forced_align`). That model is trained on English speech, so it fits English lines only. For another language, use a wav2vec2 alignment model for that language whose license allows your use, or your speech-to-text tool's word stamps, and check the first word of each line by ear. Not torchaudio's `MMS_FA`: its license is non-commercial. Plain speech-to-text word stamps are often wrong on the first word.
## 4. The rooms: a re-lit still and an empty room each
1. **Re-lit still.** Edit the take's first frame: "Keep the person exactly as they are: the same face and features, expression, pose, position and size in the frame, hair and clothes, the same framing and camera height. Replace the place around them with [ROOM], and relight them so they look truly photographed there: [LIGHT]". Describe the light concretely: where the key comes from, its color, which side gets a rim. Add a reference image of the room if you have one.
2. **Check the pose:** matte the first frame and the re-lit still, and compare the masks. Overlap (IoU) under 0.9 means the edit moved the person. Regenerate it.
3. **Empty room.** Edit the re-lit still: "Remove the person completely and continue the room behind them, the same framing, perspective and light. No people." Making the empty room from the re-lit still keeps the room's light and the light on the person in agreement. If the person survives, add a reference image of the empty room and say so.
4. Image models may return a slightly different aspect ratio than the video. Check by correlation whether the video model stretched or cropped the first frame, and map every still the same way.
## 5. The matte
- Per frame: MediaPipe's selfie multiclass segmenter (`selfie_multiclass_256x256`), person confidence = 1 minus the background confidence, upscaled. Then `smoothstep(0.3, 0.7)` removes background haze, and a guided filter on the frame's luminance (radius 6 at half resolution, eps 0.001) snaps the soft mask to real edges.
- **Dark rooms show every edge mistake.** Replace semi-transparent edge pixels with the person's own interior color spread outward (a normalized blur of the pixels where alpha > 0.92), and firm the core (`smoothstep(0.26, 0.78)`). A sliver of the original background trapped between an arm and the body will glow once re-lit, so look for it.
- Look at a contact sheet of composites on a dark room before you go on.
## 6. Re-light every frame (the core trick)
The re-lit still says how each part of the person changes in this room. Turn that into a fixed light map, like a real lamp, and multiply every frame by it:
- In linear light (`x ** 2.2`), over the pixels where both masks are above 0.6: `gain = blur(relit · m) / blur(first_frame · m)`, per color channel, at two blur sizes (about 22 px and 110 px at 1080 wide). Use the fine one where the mask covers enough and the coarse one elsewhere, so moving arms still get a gain. Clip to 0.02..1.6.
- Each frame: `out = (frame_lin × gain) ** (1 / 2.2)`. Then add a thin **rim** on the edges facing the room's light, in the room's highlight color, and a **light wrap** (about 35 % of the blurred room at the outer edge).
- **Move the room's light on the beat, and move the same light on the person.** Jazz lamps pulse on the claps (beats 2 and 4). Firelight flickers on a few mixed sine waves, and the warm side of her body flickers with it. Neon drops out on the "and" of beat 3 and buzzes back on 4, her neon rim with it. Arcade screens shimmer per 16th note. Water caustics run one cycle per beat, on the floor and on her.
## 7. The timeline on the music
- **Music:** a steady-tempo track (house or disco at about 120 BPM suits this). Measure the tempo, then **check the bar line**: beat trackers often get the downbeat wrong by one or two beats. The beat phase where the chords change (spectral flux of the non-drum stem) is the bar line.
- **Arrange it from stems** (Hybrid Demucs: drums, bass, other), bar by bar, so the music tells the story: the drop under the strobe, a tape-stop as it pulls back, the groove low-passed under the talking, a filter sweep with a riser and a snare roll into the first room, the full groove for the rooms, one "underwater" low-passed bar, a breakdown of keys only for the recap, full again for the ending, and a last chord ringing out.
- **Place each spoken phrase in its bar** and cut between phrases. Hide every join under the wipe (beat 4 into the downbeat) or under a small punch-in on a beat. A tiny time stretch (about 5 %) is invisible. A frozen frame under a wipe is invisible too.
## 8. The picture (Remotion)
Render the photographic layers in Python first, one room image and one re-lit person image per frame, with wipes and strips already split. Remotion renders frames out of order, so keep anything with state out of it. Then stack:
room → person → front particles → wipe line → readouts and labels → captions → ending → film grain.
- **Strobe cold open:** the five rooms, one 8th note each, with an RGB split that decays within each slot and a short flash on each change. Then a tape-stop: squash, blur and fade the color over a quarter second, back to the real place.
- **The wipe:** a 10 px vertical line in a three-color gradient with a wide blurred glow and a few trailing sparks. The new room appears behind it. It crosses the frame in exactly one beat (ease in and out) and finishes on the downbeat.
- **Labels and readout:** the room's name tracks in on the downbeat (letter spacing from 0.34em to 0.06em) above the captions, with an underline that draws. A "WORLD n / 5" readout with the digit rolling up when the line crosses the middle, and a progress bar under it.
- **Front particles per room**, drawn as a function of the frame number: snow with a gust on beat 3, warm dust motes, pixel squares in the screen colors, bubbles, and a school of fish crossing in front.
- **Recap:** the five rooms as vertical strips arriving on 8ths with glowing seams, and two title slams on the spoken words, each with a short shake.
- **Room picker:** a row of thumbnails, the highlight hopping on each beat while the room behind changes with it.
- **Captions:** the current phrase in a dark pill at the bottom, the spoken word highlighted, the bottom edge no lower than y 1480 of 1920. Keep the top 250 px, the bottom 440 px and the right 130 px free of anything that must be read.
- **Type never covers the face.** A stamp goes beside the head.
- **Ending:** over the real place with its background defocused, "COMMENT", the keyword in a bold chip, and "and I'll send you the skill", each landing on a beat. The last beat matches the first frame, so the loop restarts cleanly.
- **Camera:** a slow push, a small punch on each downbeat and jump cut, a light pulse on every kick while the person talks, a short shake on each slam.
## 9. Sound
- One quiet sound per move on screen, and a sting per room on its downbeat: a muted trumpet stab, a fire flaring up, a neon buzz and clunk, a soft coin drop, a deep underwater whoosh. Under each room, its own bed: vinyl crackle, fire crackle, cicadas, an arcade hum, an underwater rumble. A soft zip for every wipe.
- Synthesize the small tonal sounds (pops, ticks, thocks) instead of generating them.
- Voice first: music about 16 LU under the voice while she talks, the loudest effect about 6.5 to 10 LU under. Keep effects warm and dark (low-pass them): bright effects sound harsh next to a voice. Master at -14 LUFS, true peak at -1.5 dBTP or lower.
## 10. QA gates (all must pass)
- A transcript of the final mix matches the script, and every word shown on screen is actually heard.
- A contact sheet at 2 fps: no halos, no see-through limbs, no text on the face, no jumpy joins.
- Render twice and compare the two files frame by frame (PSNR). A single outlier frame means a flicker.
- Loudness and true peak are on target. No gap between spoken lines is longer than 1 second.
- A second opinion is useful: have another model review the finished video, and treat its notes as a list to check, not as orders.
## Appendix: the light map (Python)
```python
import numpy as np
from scipy.ndimage import gaussian_filter
lin = lambda x: np.clip(x, 0, 1) ** 2.2
def light_map(first, relit, a_first, a_relit, fine=22, coarse=110, k=0.95):
"""first, relit: HxWx3 floats 0..1 (the same size as the video); a_*: HxW mattes. Returns an HxWx3 gain."""
m = (gaussian_filter(((a_first > 0.6) & (a_relit > 0.6)).astype(np.float32), 2) > 0.9).astype(np.float32)
def at(sig):
num = np.stack([gaussian_filter(lin(relit[..., c]) * m, sig) for c in range(3)], -1)
den = np.stack([gaussian_filter(lin(first[..., c]) * m, sig) for c in range(3)], -1)
return num / np.maximum(den, 1e-4), gaussian_filter(m, sig)
g1, cover = at(fine); g2, _ = at(coarse)
t = np.clip(cover / 0.25, 0, 1)[..., None]
return np.clip(t * g1 + (1 - t) * g2, 0.02, 1.6) ** k
def relight(frame, gain):
return np.clip(lin(frame) * gain, 0, 1) ** (1 / 2.2)
```
The prompt
# The prompt First give your agent the one-take-five-worlds 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 take, the rooms, the music and the effects, or none at all (your own footage and photos of real rooms work too). If you'd rather not set up separate AI accounts and API keys, HYVIRAL (optional) is one way to get video, image and music generation behind one connection (hyviral.com; in Claude.ai → Customize → Connectors → add `https://api.hyviral.com/mcp`). --- Use the one-take-five-worlds skill to make a vertical video for [PLATFORM: Instagram Reels / TikTok / YouTube Shorts]. - **The take:** [FOOTAGE - e.g. "my own phone video, attached, filmed on a tripod", or "an AI presenter made from this photo of me"] - **Where it is filmed:** [PLACE - e.g. my rooftop at golden hour, my kitchen, my office] - **Who is talking:** [PRESENTER - e.g. me, a woman in her twenties, relaxed American accent, white t-shirt] - **The five rooms:** [ROOMS - e.g. a 1960s jazz bar, a snowy log cabin, a desert motel with a neon sign, a retro arcade, an underwater aquarium tunnel. Or "you pick five rooms whose light contrasts"] - **What I say:** [LINE - e.g. "use the skill's example lines", or my own script, one short sentence per room] - **Length:** [LENGTH - e.g. about 23 seconds, eleven bars] - **Language:** [LANGUAGE - e.g. English] - **Music:** [MUSIC - e.g. glossy nu-disco or French house at about 120 BPM, no vocals; or a track I own] - **Look:** [STYLE - e.g. a coral, violet and cyan gradient for the wipe line and labels, a clean bold sans-serif] - **AI tools:** [AI TOOLS - e.g. "whatever you already have set up", "HYVIRAL", or "Veo for the takes and Nano Banana for the rooms"] - **Ending:** [CTA - e.g. "Comment WORLDS and I'll send you the skill", or "Follow for part 2"] - **Avoid:** [AVOID - e.g. no brand names or logos in the rooms, no text over my face] Work in this order: 1. Write the line bar by bar on the music grid, and pick the five rooms and the one detail each label shows. 2. Build a storyboard page (per bar: a concept frame, the line, the on-screen text, the motion, every sound, the music section, and the exact prompt for every generated asset). Show it to me and wait for my OK. 3. Make or check the take (camera completely still, short sentences with pauses), then a re-lit still and an empty room for each world, and check that every re-lit still keeps my pose. 4. Matte me, re-light every frame into each room, and move each room's light on the beat, on the room and on me. 5. Arrange the music from its stems to the picture, build the wipes, labels, readout, particles, recap, picker, captions and ending in Remotion, and mix voice first. 6. Run every QA gate in the skill (transcript, contact sheet, two identical renders, loudness, no gap over 1 second) and give me the MP4, a cover frame, and a ready-to-paste caption with hashtags.
More skills
All skillsCaptions That Dodge Your Hands
A dull caption bar shatters into word chips that flee your hands and bounce back.
Motion Ad
A soft voice, words that build, a prompt typed live, a logo reveal.
= nose up
Notebook Doodle Explainer
Ballpoint on lined paper: sticky notes, a highlighter, page flips.