Weekstack's animated checkmark header
A silent wide product promise card with fixed bold type and subtly changing checkmark clusters.
By @thebtjackson for WeekstackSource onlineOriginal post ↗
Copies get_blueprint("REF-5072") for Claude. Connect Claude
Why it works
The complete claim is visible at 0.00 s, so the benefit reads before any motion is needed. Across one continuous 601-frame shot, the static camera and two large type levels (84 and 98 px caps at 1080p) keep attention on the message while sparse edge cells add texture.
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
(inferred) A wide, wordless product promise sits fully legible from frame one over a restrained grid of tiny status cells. Sparse accent clusters at the edges suggest work accumulating while the headline remains the visual anchor.
Why it works
- The complete two-line claim appears at 0.00 s and remains through the measured shot.
- The measured type levels, 84 and 98 px caps at 1080p, clear the 50 px phone minimum.
- The single 601-frame shot has no cuts or camera move; repeated peripheral detail gives a static header a sense of life.
Plate 02
Format card
| Platform · aspect · length | X · 21:9 · 20.03 s · 1678×720 source · 30 fps |
| Pace | One continuous shot, no transitions, 20.03 s |
| Script | Picture-led; wordless; the first-frame claim carries the message |
| Voice | None |
| On screen | One fixed promise card with peripheral status-cell field |
| Type | Two uppercase levels, 84 and 98 px cap at 1080p; fixed |
| Sound | Reference effectively silent; no steady pulse or distinct cues |
| Structure | One beat; payoff at frame 0; optional adaptation CTA is text at the close |
Tools you'll need: Remotion for motion graphics · Remotion or any video editor · Claude alone: yes
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–2.75 s | Full dark grid, edge accents and centred two-line claim | Full claim present | No speech; measured audio effectively silent | Delivers the promise before a viewer scrolls |
Hook formula (inferred): {{BENEFIT}} as a short two-line claim with one accent word.
Why it holds (inferred): The claim requires no reveal. The eye can inspect peripheral cells after reading it.
Plate 04
Structure (beat sheet)
| # | Time (s) | Shots | Beat | What happens | Technique |
|---|---|---|---|---|---|
| 1 | 0.00–20.03 | 1 | Promise | A complete two-line claim stays centred while accent cells occupy the outer grid | Locked composition; peripheral variation suggested by sheets |
Retention map (inferred): The payoff is immediate at 0.00 s; there is no second re-hook or measured call to action. The final frame remains a complete card.
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, 20.03 s = 601 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–20.03 | 0–600 · 601 f | 20.03 | start | scales |
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: audio track is silent or nearly silent (max 0.5 s RMS below -55 dBFS)
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>), 2 pages: call get_frames('2117127409971675447'), or see them on the film page (Pro, or free films).
Plate 05
Shot grammar
Mix: One full-frame graphic card.
Rhythm: The shot is continuous. The camera is measured static throughout, with no listed internal changes.
Rules this editor follows (inferred):
- Keep the claim anchored to the measured boxes in plate 6. Restrict any cell-state variation to the perimeter.
- The sheets suggest individual peripheral cells differ between sampled tiles; the measurement says zero detected motion and no internal changes. Treat cell variation as subtle texture, never a timed reveal or new beat.
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.
| # | camera move | pan x · y (%/s) | zoom (/s) | over the shot | ease | speed · peak | cadence | blur | motion | conf |
|---|---|---|---|---|---|---|---|---|---|---|
| 1 | static | +0.0 · +0.0 | ×1.000 | none | hold | ▅▄▂▃▃▂▂▃▂▄▄▅▆▅▄▄ · 0%/s | still | 0.83 | 0.00 | 1.00 |
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.
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 | Graphic promise card | Wide, locked, centred title | Dark rounded-square grid and sparse bright edge clusters | Two-line claim; no measured end-card replacement |
Plate 06
Visual style guide
- Look (inferred): Matte dark field, low-contrast inactive cells, sparse luminous accents. The reference uses a charcoal field and warm orange accents; map those roles to
{{BRAND_BG}}and{{BRAND_ACCENTS}}. - Graphics and overlays (inferred): Small outlined rounded squares on a regular grid. Some bright cells carry a tiny status glyph. Keep the central reading area subdued.
- Transitions: None measured.
- Branding and end card (inferred): The reference has no separate end card. For a new marketing version, place
{{LOGO}}and{{CTA_URL}}as a small text footer on the same uninterrupted card, with no fade or replacement.
At a glance
- Type scale (cap px): 98 · 84 (2 levels).
- Phone minimum: cap height ≥ 2% of frame width = 50 px at 2520×1080
- Whole film (time-weighted):
#2D2C2B82% ·#5134269% ·#7C41235% ·#6E6E6E3% ·#ABABAB1%. - Curve facts: average 0.20 · darkest 0.20 at 15.5 s · brightest 0.20 at 4.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 |
|---|---|---|---|---|---|---|---|
| "YOUR WEEK," | 1 | 0.0–20.0 | 84 | 118 | 7.8 | 37 · 41 · 27 · 11 | centre, middle |
| "ONE SIMPLE STACK." | 1 | 0.0–20.0 | 98 | 138 | 9.1 | 29 · 51 · 42 · 10 | centre, middle |
Type scale (cap px): 98 · 84 (2 levels).
Left out: 1 reads that are not clean words or were seen in a single frame ("1000"…): blurred, moving or partly hidden text the recognizer misread. They stay in the timeline JSON, not in the type scale.
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. Use {{BRAND_FONT}}; Archivo Black is a free fallback, not a required brand font.
| Level | Cap px at 1080p | Font size | Weight · case · tracking | Colour pair | Motion |
|---|---|---|---|---|---|
| First line | 84 | 118 px | 800–900 · uppercase · −0.025 em | Light text on {{BRAND_BG}} | Present frame 0; 0-frame hold, linear |
| Second line | 98 | 138 px | 800–900 · uppercase · −0.025 em | Light text plus one {{BRAND_ACCENTS}} word on {{BRAND_BG}} | Present frame 0; 0-frame hold, linear |
Both levels exceed the measured 50 px cap phone minimum. Any added {{CTA_URL}} must also reach that minimum if it is meant to be read in the film.
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.20 · 0.40 | #2D2C2B 82% · #513426 9% · #7C4123 5% · #6E6E6E 3% · #ABABAB 1% | #E4E4E4 ≈6500 K 78% · #C5C5C5 ≈6500 K 16% · #F0B591 hue 58° ≈3540 K 7% |
Whole film (time-weighted): #2D2C2B 82% · #513426 9% · #7C4123 5% · #6E6E6E 3% · #ABABAB 1%.
Brightness curve (measured)
Mean luma per 1 s, one character each, grouped in tens; p95 = the bright highlights. Scale: ▁ = 0 (black) → █ = 0.5 (nothing in this film is brighter); luma runs 0–1.
0s 10s 20s
mean ▄▄▄▄▄▄▄▄▄▄ ▄▄▄▄▄▄▄▄▄▄ ▄
p95 ▇▇▇▇▇▇▇▇▇▇ ▇▇▇▇▆▆▆▆▇▇ ▇
Curve facts: average 0.20 · darkest 0.20 at 15.5 s · brightest 0.20 at 4.2 s.
Layout boxes (inferred)
| Element | Shots | Box x · y · w · h (%) | Source · confidence | Notes |
|---|---|---|---|---|
| First claim line | 1 | 37 · 41 · 27 · 11 | Measured text box · high | Keep centred |
| Second claim line | 1 | 29 · 51 · 42 · 10 | Measured text box · high | Accent one word |
| Adapted end card claim | 1 | 37 · 41 · 27 · 11; 29 · 51 · 42 · 10 | Measured text boxes · high | Same card, no replacement |
End card (inferred): Keep {{BRAND_BG}} and the same claim through the last frame. {{LOGO}} and {{CTA_URL}} are optional new-version footer elements; their position is brand-specific, so no unsupported measured box is assigned.
Material card (inferred)
:root { --brand-bg: {{BRAND_BG}}; --brand-accent: {{BRAND_ACCENTS}}; --cell-line: color-mix(in srgb, white 8%, var(--brand-bg)); }
.frame { background: var(--brand-bg); overflow: hidden; }
.cell { width: 12px; height: 12px; border: 1px solid var(--cell-line); border-radius: 2px; box-shadow: none; }
.cell.active { background: var(--brand-accent); box-shadow: 0 0 7px color-mix(in srgb, var(--brand-accent) 48%, transparent); }
.title { font-family: {{BRAND_FONT}}; color: #f5f5f5; text-shadow: 0 1px 2px rgb(0 0 0 / 28%); }
Flat 2D construction; no 3D is needed. The CSS dimensions are starting values at 1080p; adjust grid density to preserve a quiet central reading zone.
Plate 07
Voice and delivery
Measured: No speech detected.
Voice direction (inferred): No voice; the picture carries the claim.
Plate 08
Sound design
- Music (inferred): The reference is effectively silent. An original optional bed can be low, restrained electronic texture without requiring picture edits on beats.
- Sound effects: No measured cue hits; none required.
- Silence and space: Preserve a clean frame-one read and an uninterrupted ending.
At a glance
- Tempo: no steady pulse was found. Time the edit to the cue sheet below, not to a BPM.
- Key: none reported (little tonal music).
- Loudness of the reference (measured): −70.0 LUFS integrated, true peak – dBTP, range 0.0 LU. That is how this film was mastered, not a target.
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)
Tempo: no steady pulse was found. Time the edit to the cue sheet below, not to a BPM.
Key: none reported (little tonal music).
Energy map (RMS per 1 s, ▁ = −90 dB → █ = −90 dB):
▁▁▁▁▁▁▁▁▁▁ ▁▁▁▁▁▁▁▁▁▁ ▁
Cue sheet: no distinct hits, whooshes or clicks were found.
Loudness of the reference (measured): −70.0 LUFS integrated, true peak – dBTP, range 0.0 LU. That is how this film was mastered, not a target.
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 72 BPM in D minor for a slow ambient pulse; the measurement found no steady reference pulse, so this is a new arrangement choice. Shot 1 only: soft sine sub, filtered noise, and sparse muted mallet tones; no risers or hard drums. Keep all cue accents off the claim because there are no measured cue frames. A model prompt: “Original restrained ambient electronic bed, 72 BPM, D minor, soft sub and muted mallets, sparse texture, no vocals or dramatic hits.” Deliver a WAV and master to the chosen platform target in plate 8; a silent version remains valid.
Plate 09
Packaging
- Title (inferred):
{{PRODUCT}}: {{BENEFIT}}. - Cover / thumbnail (inferred): Use frame 0; the full claim is already visible.
- Post copy (inferred): One sentence on the product promise, then
{{CTA_URL}}as text. - Audience signals: The captured post had 602 views; replay and comment behaviour is not available in the inputs.
Plate 10
Script template
[beat 1 · shot 1 · frame 0 through final frame · on screen]
Line 1: short setup for {{BENEFIT}}.
Line 2: concrete payoff for {{PRODUCT}}; accent one word with {{BRAND_ACCENTS}}.
No spoken line. Keep the two lines within the measured boxes in plate 6.
Plate 11
Production plan
Two routes (inferred)
Minimum: Claude alone. Remotion builds the grid, static claim, seeded cell states and optional footer, synthesises the original WAV in code, and exports the film. It simplifies tiny glyph and glow detail and gives up hand-tuned per-cell artwork. The user supplies the brand font, logo and factual product wording.
Full: with the toolkit. Build the graphic in Remotion, using a designed SVG or PNG alpha sprite for the status glyphs; export the final 2520×1080, 30 fps H.264 MP4. Handoffs: brand assets → Remotion as SVG/PNG at 1080p working size; seeded cell-state JSON → Remotion at 30 fps; optional original 48 kHz WAV → Remotion, then platform master. No camera-keyframe or 3D handoff is necessary for a measured static shot.
Asset honesty: Use real product captures or your own UI rebuilt in code; use a plain type tile if none exists. Never generate product UI, fake screenshots, metrics, reviews or results. Here, the cells are abstract status marks, not evidence that {{PRODUCT}} completed real tasks.
Plate 12
Prompts
Script prompt (inferred)
Write an original two-line, uppercase benefit claim for {{PRODUCT}} using {{BENEFIT}}. Put the concrete payoff on line two and choose one word for {{BRAND_ACCENTS}}. Keep it short enough for the measured boxes in plate 6. Do not reuse the reference's wording.
Music prompt (inferred)
Create the original optional bed in plate 8, leaving space for a silent-first social header.
Plate 13
Edit recipe
How it's built (inferred)
Signature construction: edge activity around a fixed promise. On a 2520×1080 canvas, draw the dark base, then a regular grid of outlined cells, then sparse active cells, then the title on top. Use a centre exclusion mask based on the two measured type boxes in plate 6, expanded by roughly 3% of the frame in each direction. For frame 0 through frame 600, keep camera scale at ×1.000 and travel at 0% as measured in plate 5. Title transform is constant; no text build. Seed cell states so any variation is confined to peripheral cells. If adding restrained variation, crossfade individual active-cell opacity over 12 frames using cubic-bezier(0.33, 0, 0.67, 1), never a full-field transition. Render each frame on ones for clean fades; the measured camera cadence is still, so this is an implementation choice for the unmeasured cell detail. Use no global motion blur; optional 2 px glow on active glyph edges only. Avoid random changes on every render, dense highlights behind text, and an ending fade. There are no measured handoffs, internal changes, or no-visible-cut boundaries to implement.
Build order
- Set the 21:9 canvas and shot 1 frame range from plate 4.
- Create beat 1's grid, centre exclusion, brand accent states and title boxes from plate 6.
- Add the optional same-card
{{LOGO}}and{{CTA_URL}}footer if the campaign needs an in-video CTA. - Render the silent version; add the optional original WAV only after the picture passes plate 14.
Plate 14
QA checklist
- One 601-frame shot at 30 fps; zero cuts, camera travel and zoom change.
- Full claim readable at frame 0; 84 and 98 px cap levels at 1080p, with any readable footer at or above 50 px cap.
- Text boxes match plate 6 within 2% of frame width and height; active cells do not enter the expanded centre mask.
- Mean luma stays near the measured 0.20 curve; no global flash or closing fade.
- No sound cues are required; if adding the original bed, master X or LinkedIn output to −14 LUFS integrated and ≤ −1 dBTP.
- The last frame is a complete card, with no copied reference slogan, palette, logo, font or music.
Plate 15
Make it yours
Brand slots
| Slot | Replaces in the reference | Notes |
|---|---|---|
{{PRODUCT}} | Referenced product | Use its real name |
{{BRAND_FONT}} | Heavy reference sans | Use your own licensed face |
{{BRAND_BG}} | Reference charcoal field | Base surface role |
{{BRAND_ACCENTS}} | Reference orange status cells and word | One or more brand accent colours |
{{LOGO}} | No measured logo | Optional same-card footer for new version |
{{CTA_URL}} | No measured in-video URL | Plain text footer or post copy |
{{BENEFIT}} | Reference two-line promise | New factual claim |
What this film avoids (inferred): Voiceover, footage, UI chrome, feature lists, camera moves, cuts, dramatic transitions, fake outcomes and an app-store badge.
Brand-distance warning (inferred): Repeating the exact two-line slogan with the orange-on-charcoal checked grid would read as the original. Change the wording and accent motif; a brand-specific status symbol is the strongest single correction.
Adapt the aspect (inferred)
- 16:9: Centre-crop the 21:9 source to 1920×1080; the outer 11.9% on each side disappears, while both measured text boxes remain. Keep readable text at ≥38 px cap and keep platform UI away from the footer.
- 9:16: Re-lay out the claim as a compact centre stack and move active cells to top and bottom bands; a centre crop loses both text boxes. Use ≥22 px cap, and keep text clear of the top account strip and bottom action/caption controls.
- 1:1: Centre-crop to 1080×1080; both text boxes remain, but re-space the edge clusters and keep any footer inside platform UI safe space. Use ≥22 px cap.
Adapt the length (inferred)
- 15 s: Keep beat 1 and its signature edge field; shorten the seeded variation while retaining the frame-one claim and complete last card.
- 30 s: Keep beat 1; add another distinct accent-cell arrangement or a new factual
{{BENEFIT}}claim rather than lengthening a still hold without change. - 60 s: Preserve the immediate claim, then add separate product-proof beats using real assets and return to the same card for a closing CTA; do not turn the source's continuous shot into invented measured cuts.
The creator's signature (don't copy): Exact slogan, orange and charcoal pairing, and distinctive check distribution.
The transferable format (do copy): Immediate two-line promise, generous wide canvas, quiet centre, restrained peripheral cell field and one continuous card.
Source: https://x.com/thebtjackson/status/2117127409971675447 · measured with timeline v2 on 2026-11-04 · (measured) = read off the film · (inferred) = construction 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 824 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.3% of the width (cut 11.9% each side) | 2 of 2 | none | 38 px cap | a straight centre crop works |
| 9:16 | 1080×1920 | middle 24.1% of the width (cut 37.9% each side) | 0 of 2 | "YOUR WEEK,", "ONE SIMPLE STACK." | 22 px cap | re-lay out: a crop loses too much |
| 1:1 | 1080×1080 | middle 42.9% of the width (cut 28.5% each side) | 2 of 2 | 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 | scales | 601 | 450 | 900 | 962 |
| total | 601 f · 20.0 s | 450 f · 15.0 s | 900 f · 30.0 s | 962 f · 32.1 s + 27.9 s new beats |
60 s: stretching tops out at ×1.6 (32.1 s); add 27.9 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 20.03 s 21:9 film for {{PRODUCT}} in the format of 2117127409971675447 (edge-cell promise card). Brand: font {{BRAND_FONT}}, background {{BRAND_BG}}, accents {{BRAND_ACCENTS}}, logo {{LOGO}}, call to action {{CTA_URL}}. Benefit: {{BENEFIT}}. First load get_blueprint("2117127409971675447", format: "json") and follow its measurements. Show a fresh two-line benefit claim from the start, with one accent word. Build a dark, regular field of small outlined status cells; place sparse active cells at the edges and leave the title clear. Keep the camera locked at scale 1.000 and zero travel. Seed any peripheral cell variation; no cut, global flash, text reveal or closing fade. Use the measured 84 and 98 px cap levels, each above the 50 px phone minimum; make any readable CTA equally legible. The reference has no steady pulse or cues. Synthesise an original optional 72 BPM ambient bed, or render silent; master an audible X version to −14 LUFS and −1 dBTP maximum. Build in Remotion, including code-synthesised music; export 2520×1080 at 30 fps as H.264 MP4. End on the complete card with {{LOGO}} plus {{CTA_URL}} as text, not QR or store badges. Use real captures of {{PRODUCT}} or UI rebuilt in code; never generated product UI, fake screenshots or fake results. Never copy the reference's colours, font, logo, slogan or music.Films like this
Tagged motion graphicapp store headerdark backgroundbold typegrid patterncheckmark animationsilent videowide format