Water Ripple App Store Header
A silent 6.7-second ultrawide product header holds a benefit headline over looping blue water ripples.
By @k_krizhanovskii for EmberSource onlineOriginal post ↗
Copies get_blueprint("REF-5075") for Claude. Connect Claude
Why it works
The full benefit appears at 0.00 s and stays fixed while one continuous 200-frame shot lets the abstract field move around it. Plate 5 measures a locked camera, 30 unique pictures per second and a moving element that grows ×1.19; the persistent contrast avoids making the viewer reacquire the words.
Blueprint
15 plates that take the film apart, from its format to a recipe you can run. Claude reads the same plates over MCP.
Plate 01
The format in one breath
A complete benefit appears immediately, fixed in the middle of an ultrawide abstract field. Large cropped contours and a small roaming ring keep the image alive while the words stay readable. The reference uses water as its metaphor; choose a motif belonging to {{PRODUCT}}.
Why it works (inferred): The whole promise is present at 0.00 s. One 200-frame shot has no cut or text build, so the moving field supplies variation without interrupting reading. The measured camera is static while the element grows ×1.19 overall (plate 5).
Plate 02
Format card
| Platform · aspect · length | X header · 21:9 · 1280×548 source · 2520×1080 delivery · 30 fps · 6.67 s |
| Pace | One continuous 200-frame shot; zero cuts |
| Script | Picture-led; wordless audio, fixed two-line benefit |
| Voice | None |
| On screen | Abstract motion field and fixed benefit type |
| Type | Two measured headline rows, 113–124 px caps at 1080p; uppercase |
| Sound | Reference silent; optional original bed for a new cut |
| Structure | Immediate payoff, continuous variation, visual return; no reference CTA |
Tools you'll need: Remotion for motion graphics · an image model (GPT Image, Midjourney) · Claude alone: partly
Frame sheets
Frame by frame
Stills taken at measured moments, each labelled with its time. Claude gets the same sheets over MCP.
Plate 03
The hook, frame by frame (first 3 seconds)
| Time | Picture | On-screen text | Words and sound | What it does |
|---|---|---|---|---|
| 0.00 | Cropped rings at left and upper right | Full two-line benefit | No speech or audio | Pays off at once |
| 0.25–0.75 | Small ring crosses upper-left; broad contours slide | Unchanged | Silent | Creates peripheral discovery |
| 1.00–1.75 | Large contour moves left; small ring appears lower right | Unchanged | Silent | Refreshes the field |
| 2.00–2.75 | Lower-right ring expands | Unchanged | Silent | Keeps motion away from reading centre |
Hook formula (inferred): Put {{BENEFIT}} in two balanced lines from frame 0 over {{MOTIF}} motion.
Plate 04
Structure (beat sheet)
| # | Time (s) | Shots | Beat | What happens | Technique |
|---|---|---|---|---|---|
| 1 | 0.00–1.00 | 1 | Immediate promise | Fixed benefit over large cropped forms | Reading zone remains clear |
| 2 | 1.00–3.33 | 1 | Peripheral variation | Smaller ring changes position and scale | Independent element motion |
| 3 | 3.33–6.67 | 1 | Spatial return | Contours redistribute around the fixed text | Offset motion cycles; no cut |
Retention map (inferred): payoff at frame 0; no discrete re-hook or reference CTA; final composition suggests a loop but is not a perfect match to frame 0.
For agents: Shots
The measured data and build specs agents work from. Over MCP they get it all, with the full timeline as JSON.
Shots (measured)
One continuous shot, 6.67 s = 200 frames at 30 fps. Frames are at 30 fps, first and last inclusive: a shot "33–70 · 38 f" is a Remotion <Sequence from={33} durationInFrames={38}>; at another frame rate, use the seconds.
| # | in–out (s) | frames @30 (first–last · count) | dur (s) | transition in | scales (inferred) |
|---|---|---|---|---|---|
| 1 | 0.00–6.67 | 0–199 · 200 f | 6.67 | start | fixed |
scales: fixed = keep this shot's length when the film gets longer or shorter · scales = stretch or shrink it with the length · optional = drop it for the 15 s cut.
Measurement notes: no audio track
Frame sheets (measured): shots, one labelled frame per shot (labels S<n> m:ss.s; + = just after a change inside the shot) · the full-length timeline, the whole film at fixed steps (labels S<n> m:ss.s f<frame>), 1 page: call get_frames('2117674757269426320'), or see them on the film page (Pro, or free films).
Plate 05
Shot grammar
Mix: One full-frame abstract graphic. Rhythm: No cuts; constant type over motion at 30 unique frames per second.
Rules this editor follows (inferred): Lock the text and camera. Put independent contour systems behind the type. Let one small contour enter a different peripheral area while broad contours travel more slowly.
For agents: Camera and motion · Transitions
The measured data and build specs agents work from. Over MCP they get it all, with the full timeline as JSON.
Camera and motion (measured)
Per shot, measured on the frames. "Camera move" names the camera's move; the numbers are the image's motion: pan in % of frame width (x) or height (y) per second, +x = content moves right (so a pan left), +y = content moves down; zoom per second > 1 = content grows (push in). "Over the shot" is the total, with px at 2520×1080. Speed is the move through the shot, about one character per 0.5 s (▁ still → █ its peak), then the peak in % of width per second. Cadence: "ones" = a new picture every frame, "twos" = each picture held two frames. Blur is relative to this film (0 = its sharpest shots, 1 = its blurriest); motion = share of the frame changing, 0–1. "?" = confidence under 0.5: a hint, check the sheets. The labels describe how the image moves, not where a 3D camera went: an object flying toward a still camera can read as a push in.
In 1 of 1 shots the camera holds still and something inside the frame moves: see Element motion right under this table.
| # | camera move | pan x · y (%/s) | zoom (/s) | over the shot | ease | speed · peak | cadence | blur | motion | conf |
|---|---|---|---|---|---|---|---|---|---|---|
| 1 | static · element moves ↓ | +0.0 · +0.0 | ×1.000 | none | hold | ▁▁▁▁▁▁▁▁▁▁▁▁▁ | ones | 0.49 | 0.41 | 0.85 |
Element motion (measured): in these shots the frame holds still and something inside it moves: a card, a UI panel, a product, a word. Region = where it moves (x · y · w · h % of the frame); numbers as above, for the moving region; "moving" = share of the shot in motion; ↳ = the move changes direction.
| # | region x·y·w·h % | element move | x · y (%/s) | zoom (/s) | total while moving | ease | speed · peak | moving | conf |
|---|---|---|---|---|---|---|---|---|---|
| 1 | 25 · 4 · 29 · 19 → 23 · 3 · 40 · 69 | complex | +0.6 · −1.9 | ×1.029 | x +3.4% (+86 px) · y −11.6% (−125 px) · ×1.19 scale · roll −2.4° in 6.1 s | irregular | ▃▂▂▃▁▁▃▁▂▂▃▁▁ · 33%/s | 0.91 | 0.68 |
| ↳ 0.00–1.00 s: slide up | −0.1 · −11.8 | ×1.004 | y −11.8% (−127 px) | irregular | |||||
| ↳ 1.00–1.73 s: complex | −2.1 · +4.5 | ×1.094 | x −1.6% (−39 px) · y +3.3% (+35 px) · ×1.07 scale · roll +3.3° | ease-in | |||||
| ↳ 1.73–3.33 s: complex | −0.1 · −1.8 | ×0.981 | y −2.8% (−30 px) · ×0.97 scale · roll −0.6° | irregular | |||||
| ↳ 3.33–3.67 s: complex | +10.8 · −15.6 | ×0.815 | x +3.6% (+91 px) · y −5.2% (−56 px) · ×0.93 scale · roll −4.2° | ease-in-out | |||||
| ↳ 3.67–4.20 s: static | +0.0 · +0.0 | ×1.000 | none | hold | |||||
| ↳ 4.20–5.80 s: scale up | +0.9 · +3.5 | ×1.118 | x +1.4% (+36 px) · y +5.6% (+61 px) · ×1.20 scale · roll −1.2° | ease-in |
Focus (measured): shot 1: sharp inside 0 · 0 · 100 · 100, no defocus (deep focus). Box = x · y · w · h % of the frame. In 2D, blur the layers outside the box by that many px; in 3D, set the focus distance on the box and open the aperture until the background blur matches. Locked-off shots: 1 of 1. Animation cadence: a new picture every frame (on ones): 30.0 unique frames per second of 30 while things move (held-frame share 0.0, 197 moving frames). Match it, or the motion will feel smoother or choppier than the reference.
Transitions (measured)
One continuous shot: no cuts. Changes happen inside the shot (camera, light, layout).
What each shot shows (inferred from the sheets)
| # | Type | Framing | What's on screen | Text / overlay |
|---|---|---|---|---|
| 1 | Motion graphic | Full 21:9 field | Soft textured surface, broad cropped rings, small traveling rings | Two fixed benefit lines |
Plate 06
Visual style guide
Look (inferred): A midtone surface with lighter contour edges, small glints and low contrast texture. The reference uses cool water blues, pale cyan edges and dark text. Map those roles to {{BRAND_BG}} and {{BRAND_ACCENTS}} instead of copying its palette. Keep deep focus and stable exposure, as the measured brightness curve stays near 0.72.
Graphics (inferred): Irregular concentric strokes, 3–6 px at 1080p, with slightly offset centres and low opacity caustic texture. Draw rings behind type. There is no reference end card or transition. For a new promotional version, put {{LOGO}} and {{CTA_URL}} as a plain-text tail after the reference-format shot; do not pretend that tail is measured.
At a glance
- Type scale (cap px): 113–124.
- Phone minimum: cap height ≥ 2% of frame width = 50 px at 2520×1080
- Whole film (time-weighted):
#63B2E332% ·#83C6E728% ·#A8D2E827% ·#C7EDF59% ·#4566854%. - Curve facts: average 0.72 · darkest 0.72 at 4.2 s · brightest 0.73 at 2.2 s.
For agents: Type · Type spec · Palette by shot · Brightness curve · Layout boxes · Material card
The measured data and build specs agents work from. Over MCP they get it all, with the full timeline as JSON.
Type (measured)
Sizes are cap height (the height of a capital letter) in px at the 1080p deliverable, 2520×1080. Font size ≈ cap ÷ 0.71 for a typical sans (Inter 0.73, Geist 0.71, SF Pro 0.70, Instrument Sans 0.72): check your own font's cap-height ratio. Cap heights are estimated from text-recognition boxes (median error about 11% on real text; text under about 13 px at 1080p and non-Latin scripts are not read). Box = x · y · w · h as % of the frame, from the top-left.
| text | shot | on screen (s) | cap px | ≈ font px | cap % of height | box x·y·w·h % | position |
|---|---|---|---|---|---|---|---|
| "WATER OUT." | 1 | 0.0–6.5 | 124 | 175 | 11.5 | 34 · 39 · 33 · 13 | centre, middle |
| "SOUND BACK." | 1 | 0.0–6.5 | 113 | 159 | 10.5 | 32 · 51 · 37 · 12 | centre, middle |
Type scale (cap px): 113–124.
Phone minimum: cap height ≥ 2% of frame width = 50 px at 2520×1080. Why: in a phone feed the film fills the screen width, about 390 pt, and 2% of that is 7.8 pt, the cap height of 11 pt text, Apple's smallest recommended text size. Words the viewer must read go at or above it; smaller text can only be decoration. Every measured text item in the reference clears it.
Type spec (inferred)
Assume cap height = 0.71 × CSS font size; verify {{BRAND_FONT}} in the rendered frame. Archivo Black is a free fallback for {{BRAND_FONT}}, not a required brand asset.
| Level | Cap px at 1080p | Font size | Weight · case · tracking | Colour pair | Motion |
|---|---|---|---|---|---|
| Line 1 | 124 | 175 px | 800–900 · uppercase · −0.035 em | dark text over {{BRAND_BG}} | Present at frame 0; fixed through measured reading interval; 0-frame entrance |
| Line 2 | 113 | 159 px | 800–900 · uppercase · −0.035 em | dark text plus {{BRAND_ACCENTS}} payoff over {{BRAND_BG}} | Same fixed treatment; no easing |
Both rows exceed the measured 50 px cap phone minimum. Any added CTA must also clear that minimum in the original 21:9 delivery.
Palette by shot (measured)
Colours measured on the frames, with their share of the frame; luma 0 = black, 1 = white. These are the reference's brand colours: map them onto {{BRAND_BG}} and {{BRAND_ACCENTS}} by role (background, surface, accent), don't reuse them as the format. Neighbouring shots with the same palette share a row.
| # | luma mean · p95 | colours (share of frame) | highlights (bright pixels) |
|---|---|---|---|
| 1 | 0.72 · 0.94 | #63B2E3 32% · #83C6E7 28% · #A8D2E8 27% · #C7EDF5 9% · #456685 4% | #FAFDFE ≈6620 K 59% · #EFFEFE ≈7000 K 32% · #D7FEFD hue 198° ≈7850 K 9% |
Whole film (time-weighted): #63B2E3 32% · #83C6E7 28% · #A8D2E8 27% · #C7EDF5 9% · #456685 4%.
Brightness curve (measured)
Mean luma per 1 s, one character each, grouped in tens; p95 = the bright highlights. Scale: ▁ = 0 (black) → █ = 1.0 (white); luma runs 0–1.
0s
mean ▆▆▆▆▆▆▆
p95 ███████
Curve facts: average 0.72 · darkest 0.72 at 4.2 s · brightest 0.73 at 2.2 s.
Layout boxes (inferred)
| Element | Shots | Box x · y · w · h (%) | Source · confidence | Notes |
|---|---|---|---|---|
| Headline line 1 | 1 | 34 · 39 · 33 · 13 | measured text box · high | Keep fixed |
| Headline line 2 | 1 | 32 · 51 · 37 · 12 | measured text box · high | Keep fixed |
| Moving contour region | 1 | 25 · 4 · 29 · 19 → 23 · 3 · 40 · 69 | measured element region · high | Region of tracked motion, not every ring |
| End-frame headline, not a separate card | 1 | 32 · 39 · 37 · 24 | union of measured text boxes · high | Reference has no end card |
End card (inferred): For the reference, none: the two-line headline remains the end-frame content. If the new distribution requires a CTA, add a separate tail with {{LOGO}} and {{CTA_URL}} as text, each ≥50 px cap at 2520×1080; that tail is an adaptation, not part of shot 1.
Material card (inferred)
:root { --brand-bg: {{BRAND_BG}}; --brand-accent: {{BRAND_ACCENTS}}; }
.field { background: var(--brand-bg); overflow: hidden; isolation: isolate; }
.ring { border: 4px solid var(--brand-accent); border-radius: 50%;
box-shadow: 0 0 18px color-mix(in srgb, var(--brand-accent) 55%, transparent);
filter: blur(1.5px); opacity: .7; }
.caustics { opacity: .16; mix-blend-mode: screen; filter: blur(7px); }
.copy { position: absolute; z-index: 10; font-family: {{BRAND_FONT}}; }
Use an original or licensed {{MOTIF}} texture beneath procedural rings. A 2D layered render is sufficient; no 3D is needed. Keep the measured deep-focus field, so no depth-of-field blur mask is required. Add 18 px glow at about 0.55 opacity and a very weak 8% edge vignette only if the motif needs dimensionality.
Plate 07
Voice and delivery
Measured: No audio track and no speech. Voice direction (inferred): None; the fixed benefit must communicate with the video muted.
Plate 08
Sound design
Reference: Silent throughout; no effects, beat grid, or loudness measurement. Optional adaptation (inferred): Keep the first loop silent for an app header. For a social edit requiring audio, use a quiet original texture and place accents on motif motion, never on imaginary cuts.
For agents: Sound grid · Original music bed
The measured data and build specs agents work from. Over MCP they get it all, with the full timeline as JSON.
Sound grid (measured)
No audio track: the reference plays silent. If your version needs sound, plate 8 says what fits; the platform loudness targets below still apply.
Loudness of the reference: not measured.
Loudness targets for your version (common practice per platform; the brief overrides them):
| where it plays | integrated | true peak max | note |
|---|---|---|---|
| YouTube | −14 LUFS | −1 dBTP | louder masters are turned down; quieter ones are not turned up |
| X, LinkedIn (this reference) | −14 LUFS | −1 dBTP | no published normalisation: the file plays as mastered |
| TikTok, Reels, Shorts | −14 to −10 LUFS | −1 dBTP | played on phone speakers; short-form is often mastered hotter |
| Website or app (autoplay) | −16 LUFS | −1 dBTP | often starts muted; keep the unmuted level comfortable |
| Broadcast (EBU R128) | −23 LUFS | −1 dBTP | only when the brief asks for it |
Original music bed (inferred)
Choose 90 BPM in A minor for a new social version; this is a compositional choice because the reference has no pulse. Use a soft sine pad, filtered mallet and restrained granular waterlike noise. In shot 1, begin pad at frame 0, put a quiet mallet at the small ring's upper-left passage around frame 15, a second at the lower-right passage around frame 60, and soften texture by frame 180 for a loop. These are proposed cues, not measured audio events. Music-model prompt: “Original 90 BPM A-minor ambient loop, soft sine pad, sparse glass mallets, gentle granular shimmer, no vocals or borrowed melody, seamless six-second phrase.” Master a social version to plate 8's X target.
Plate 09
Packaging
Title (inferred): “A new animated header for {{PRODUCT}}.” Cover: Use frame 0: full benefit, contrasting fixed type, large cropped motif at two edges. Post copy: Say what the header was made for and include {{CTA_URL}} as text. The supplied post has 72 views at capture; no replay evidence is available.
Plate 10
Script template
[beat 1 · shot 1 · frame 0 · fixed throughout · two lines, 3–6 words total]
{{BENEFIT}}
[beats 2–3 · shot 1]
Keep the same text. No narration or captions.
[optional new CTA tail, outside the reference shot]
{{LOGO}} {{CTA_URL}}
(inferred) Read the text at phone size before choosing words. Its line break should produce two compact shapes and a clear benefit without needing audio.
Plate 11
Production plan
Two routes (inferred)
Minimum: Claude alone with Remotion. Build the full one-shot field in Remotion using layered SVG or CSS rings, generated procedural caustics, fixed type, and an optional 90 BPM bed synthesised in code. This reaches the layout, motion grammar and luminous contour feel; it simplifies organic water refraction and gives up photographic surface complexity. The user supplies the real product promise and brand assets.
Full: with the toolkit. Make an original, text-free {{MOTIF}} texture with the image-model role at 2520×1080. Pass that PNG to Remotion, then animate SVG rings, light overlays and fixed type there at 30 fps. Export a 2520×1080 H.264 MP4 and, if audio is requested, pass a 48 kHz WAV into the Remotion mix. Keep motion keyframes in JSON so the texture can be replaced without rebuilding timing. The image model makes only abstract background material, never product evidence.
Asset honesty: Use actual {{PRODUCT}} captures or UI rebuilt in code if a longer version adds product proof. Never generate fake UI, screenshots, metrics, reviews or results. This reference's only imagery is abstract, so an image model may generate texture, not a claimed product feature.
Plate 12
Prompts
Script prompt (inferred)
For {{PRODUCT}}, write ten truthful benefits of 3–6 words. Give each a two-line break that reads instantly on a silent 21:9 header. Pick one {{BENEFIT}} and pair it with a distinct abstract {{MOTIF}}. Avoid the reference wording and water metaphor unless water is genuinely part of the product.
Texture prompt (inferred)
Create an original abstract {{MOTIF}} surface for {{PRODUCT}} at 2520×1080. Brand background {{BRAND_BG}}, accent family {{BRAND_ACCENTS}}. Soft optical texture, irregular highlights, no words, logo, UI, screenshots, badges or recognisable reference art. Reserve a clear central reading zone.
Type and music prompt (inferred): Set {{BENEFIT}} in {{BRAND_FONT}} at plate 6's cap heights; keep it fixed. If a sound-on version is commissioned, use the original bed direction in plate 8.
Plate 13
Edit recipe
How it's built (inferred)
The signature move is the small ring's relocation against a stationary headline, not a camera zoom. Set the camera transform to identity for frames 0–199. Layer order: {{MOTIF}} texture, broad ring systems, roaming ring, caustic glints, fixed headline. Use separate SVG ellipses with concentric radii and slightly warped edges; mask their strokes to the canvas. The measured tracked region begins at 25 · 4 · 29 · 19% and expands toward 23 · 3 · 40 · 69% (plate 5). Treat its ×1.19 scale and −11.6% vertical movement as the combined tracked element, not as instructions to scale the whole frame.
Key the roaming contour at frames 0, 30, 52, 100, 110, 126 and 174 to follow plate 5's segments. Use cubic-bezier(0.42, 0, 0.58, 1) on the 100–110 reorientation and cubic-bezier(0.35, 0, 1, 1) for the 126–174 expansion; vary intermediate control points for the measured irregular stretches. Hold the tracked element from about frame 110 to 126 as plate 5 reports. From frames 174–199, let the already established motion settle spatially; do not insert a fade or a cut. Animate on ones at 30 fps, with 4–8 temporal samples per output frame and a 180° shutter blend on fast ring travel; keep headline edges unblurred. Test loop seam visually because the source suggests a return but does not mathematically close.
No internal picture change or shot hand-off is measured. The frame sheets show continuously migrating contours, so implement all apparent swaps as overlapping independent ring layers; never hard-replace the background. The measured brightness runs roughly level and the film does not fade to black.
Build order
- Choose the truthful
{{BENEFIT}}and a distinct{{MOTIF}}; lock beat 1's text boxes. - Build shot 1's broad and roaming ring layers for beats 1–3 at the measured cadence.
- Add texture and glints underneath type; check plate 6's luma and reading zone.
- Render the silent reference-format loop. Add the optional original bed or CTA tail only for a separately specified distribution cut.
Plate 14
QA checklist
- One continuous 200-frame shot at 30 fps for the source-length version; no inserted cut or fade.
- Both headline lines are visible from frame 0 and stay in plate 6's measured boxes during their measured reading interval.
- Headline cap heights are at least the relevant plate 6 or plate 15 phone minimum after aspect adaptation.
- Camera is locked; ring movement is on ones, with the plate 5 tracked region and roughly ×1.19 element scale.
- Frame 0, 90 and 195 retain clear text contrast; mean luma stays near plate 6's measured curve without a closing dip.
- Reference-format export has no audio track. If an optional X mix is made, target −14 LUFS integrated and true peak ≤−1 dBTP.
- All visible colours, type, wording and motif belong to
{{PRODUCT}}.
Plate 15
Make it yours
Brand slots
| Slot | Replaces in the reference | Notes |
|---|---|---|
{{PRODUCT}} | App identity | Use the actual product |
{{BRAND_FONT}} | Reference's heavy sans | Choose a licensed brand face |
{{BRAND_BG}} | Water-blue surface | Background role |
{{BRAND_ACCENTS}} | Cyan ripple edges and payoff word | Accent role |
{{LOGO}} | No visible reference logo | Only for optional new CTA tail |
{{CTA_URL}} | Post's external link | Plain text, not a code |
{{BENEFIT}} | Reference's two-line promise | Truthful, original wording |
{{MOTIF}} | Water ripples | Product-specific abstract material |
What this film avoids (inferred): Voiceover, stock footage, product UI, feature lists, badges, QR codes, hard cuts and a separate reference end card.
Brand-distance warning (inferred): The reference's blue water field, dark heavy uppercase type and water/sound contrast together would read as its identity. Change the motif to a product-specific material first, then choose original language and palette.
Adapt the aspect (inferred):
- 16:9: Centre-crop the 21:9 source to 1920×1080, losing 11.9% of each side; all measured boxes survive. Keep caps ≥38 px and leave normal platform UI margins.
- 9:16: Re-lay out broad contours above and below the headline; centre-crop loses every measured box. Put type in the middle safe area, caps ≥22 px, with clear top and bottom UI zones for profile, captions and controls.
- 1:1: Centre-crop to 1080×1080; measured boxes survive, but inspect edge rings. Keep caps ≥22 px and pull important words away from platform overlays near the bottom.
Adapt the length (inferred):
- 15 s: Keep shot 1 at its fixed source length; add one new evidence beat and a plain-text
{{LOGO}}/{{CTA_URL}}tail. Do not stretch the original loop. - 30 s: Keep shot 1, add product proof and a second motif variation, then the CTA tail.
- 60 s: Keep shot 1, add multiple distinct proof beats with real captures and a final CTA; increase the number of ideas, not the original shot's hold.
The creator's signature (don't copy): Exact water/sound words, water artwork, app identity and palette. The transferable format: Instant two-line promise, locked type, moving peripheral motif and a short spatial loop.
Source: https://x.com/k_krizhanovskii/status/2117674757269426320 · measured with dissect 1.1 and timeline v2 on 2026-11-04 · (measured) = read off the film · (inferred) = our reading
For agents: Aspect conversions · Length cuts
The measured data and build specs agents work from. Over MCP they get it all, with the full timeline as JSON.
Aspect conversions (computed from the measured boxes)
Aspect conversions (computed from the measured boxes): a centre crop of the reference frame, checked against its text boxes and moving elements. This film is wider than 16:9 (21:9): at 1920×1080, centre-crop the sides (scale the 1080 px height as is) rather than letterboxing, which would leave a 822 px tall picture with bars in a feed.
| to | deliver at | a centre crop keeps | measured boxes kept | boxes a crop loses | phone minimum | so |
|---|---|---|---|---|---|---|
| 16:9 | 1920×1080 | middle 76.1% of the width (cut 11.9% each side) | 3 of 3 | none | 38 px cap | a straight centre crop works |
| 9:16 | 1080×1920 | middle 24.1% of the width (cut 38.0% each side) | 0 of 3 | "WATER OUT.", "SOUND BACK.", moving element, shot 1 | 22 px cap | re-lay out: a crop loses too much |
| 1:1 | 1080×1080 | middle 42.8% of the width (cut 28.6% each side) | 3 of 3 | none | 22 px cap | a straight centre crop works |
Length cuts (computed from the scales flags)
Length cuts (computed from the scales flags): frames per shot at 30 fps; fixed shots keep their length, optional shots go first when the cut is shorter, the scaling shots share what is left. Snap each cut to the nearest beat when plate 8 has a steady pulse.
| # | flag | reference (f @30) | 15 s cut | 30 s cut | 60 s cut |
|---|---|---|---|---|---|
| 1 | fixed | 200 | 200 | 200 | 200 |
| total | 200 f · 6.7 s | 200 f · 6.7 s + 8.3 s new beats | 200 f · 6.7 s + 23.3 s new beats | 200 f · 6.7 s + 53.3 s new beats |
15 s: stretching tops out at ×1.6 (6.7 s); add 8.3 s of new beats (more of the scaling beats' pattern with new content), never a longer hold on the fixed shots · 30 s: stretching tops out at ×1.6 (6.7 s); add 23.3 s of new beats (more of the scaling beats' pattern with new content), never a longer hold on the fixed shots · 60 s: stretching tops out at ×1.6 (6.7 s); add 53.3 s of new beats (more of the scaling beats' pattern with new content), never a longer hold on the fixed shots.
Recipe
One prompt that makes a film like this with Claude. Use the method; make the footage, words and brand your own.
Make a 6.67 s 21:9 film for {{PRODUCT}} in the format of 2117674757269426320 (fixed-promise ripple field). Brand: font {{BRAND_FONT}}, background {{BRAND_BG}}, accents {{BRAND_ACCENTS}}, logo {{LOGO}}, call to action {{CTA_URL}}. Write an original truthful two-line {{BENEFIT}} over a product-specific abstract {{MOTIF}}. Load get_blueprint("2117674757269426320", format: "json") first; follow its shot frames, camera numbers, type boxes and beat grid. This is picture-led: beat 1, shot 1 at frame 0 gives the whole benefit; beat 2 varies peripheral contours; beat 3 returns the spatial balance without a cut. Lock the camera and headline. Animate broad contours and one roaming ring beneath the words; follow the JSON's tracked region, ×1.19 scale and on-ones cadence. Keep required text above the 50 px cap phone minimum. Use brand slots for surface, contour and payoff colours, never the reference palette or copy. Full route: generate an original text-free texture with an image model, pass its 2520×1080 PNG to Remotion, animate there and render a 2520×1080 H.264 MP4 at 30 fps, about 6.67 s. Minimum fallback: Remotion with procedural texture and code-synthesised music. Keep the native header silent; an optional social bed is original 90 BPM ambient music at −14 LUFS, ≤−1 dBTP. End an extended version on {{LOGO}} plus {{CTA_URL}} as text, without QR code or store badge. Use real {{PRODUCT}} captures or code-built UI for added proof; never generate fake UI, screenshots or results.Films like this
Tagged app store headermotion graphicswater ripplesloopkinetic backgroundbold typeultrawidesilent