seedance-ad-creative: cinematic product/brand ad clips
Turns a product description (or a product photo) into a commercial-style
video clip: camera language, product framing, and brand tone become a
Seedance 2.5 prompt, which this skill submits, polls, downloads, and reports
the cost for.
This skill is a thin, scenario-specific layer over
ofox-video-core. It owns the ad-creative
prompt craft, the creative brief, recommended defaults, and the
pre-generation cost estimate; ofox-video-core owns talking to the Ofox API
correctly and safely (the OFOX_API_KEY handling, the no-resubmit rule,
error-code mapping, download/verification). Read that skill's safety
contract before using this one — it is not restated here.
The prompt structure shared by every Seedance scenario skill — the vendor's
formula, timestamp formats and segment lengths, transition and camera
vocabulary, consistency locks and negative lists, the two meanings of an
attached image — lives in
../ofox-video-core/references/prompt-structure.md.
Load it before writing a prompt. This file only adds what is specific to
ads.
The rules for the questions that come before a prompt exists are shared
the same way, in
../ofox-video-core/references/creative-brief.md;
the brief section below carries only this scenario's question set.
Before generating: the availability check
Run this once per session (not on every request):
bash ../ofox-video-core/references/ofox-video.sh check
If it fails, follow ofox-video-core's guidance (install curl/jq, or get
an OFOX_API_KEY at https://app.ofox.ai) — don't dead-end the
conversation, and don't re-run this check on every subsequent request once
it has passed.
Before writing the prompt: the creative brief
The shared rules are in
../ofox-video-core/references/creative-brief.md
— the three tiers, one round of at most four questions, the shape of a
question, the "Let the AI decide" discipline, the generic skip rows, the order
with the approval gate, the fallback for a runtime without
AskUserQuestion, and the anti-patterns. Read it before writing a prompt.
This section adds only what is specific to ads.
The brief is what turns "make an ad for this bottle" into choices the user
actually made instead of choices made for them in silence. Zero questions is
common here: "15-second vertical TikTok ad for this sneaker photo, young and
energetic, slow orbit" has settled every axis.
| Tier |
Ad-creative axes |
| must-ask |
is there a product photo? Ask this first — the answer changes the whole prompt route, and every gallery ad that had to match a real product, logo or person locked it to an image (cases 12, 13, 15, 24). |
| ask-if-open |
brand tone, the hero camera move, aspect ratio |
| never-ask |
resolution, model, provider, audio on/off, duration when the user gave one. 720p preview vs 1080p deliverable is two rows in the cost table, not a question. |
If four slots are not enough: Photo first, then the axis that changes the
picture most (Tone), then Camera, then Aspect; anything left falls to a
default and the cost table.
The product-photo question has no "Let the AI decide" option. A photo
that does not exist cannot be invented, and "you decide" from the user
delegates the taste axes only — it never answers this one.
The ad-creative question set
| # |
Tier |
header |
Question |
Options (1 = recommended, last = delegation) |
Ask when |
| 1 |
must-ask |
Photo |
Do you have a photo or render of the product? With one, label text and shape stay faithful. |
Yes — I'll give a local path (recommended): the real product is rendered from the image; the gallery's product, logo and packaging shots all lock to one (cases 12, 13, 24). / No — describe it in text: fine for a generic or fictional product; on a real SKU the label and logo may drift. The gallery's text-only ads all stay on generic categories — a bowl of ramen (case 14), juice bottles and produce (case 27), gym gear (case 25) — and its text-only product prompts (cases 16, 17, 19) are all fictional brands. No AI option. |
No image attached and the user did not say "no photo". |
| 2 |
ask-if-open |
Tone |
Brand tone — it sets the palette, the pace and the light. |
Put the archetype that fits the product category first, marked (recommended): perfume / watch / jewellery → Luxury — slow, dark background, warm gold highlights (cases 13, 15). snack / drink / sneaker → Playful/consumer — bright, saturated, cuts on the beat (cases 12, 14). headphones / gadget / app → Minimalist-tech — white or grey, cool light, steady precise camera. Then the other two. Then Let the AI decide — "I'll use the recommended archetype and mark it (AI's pick)". |
No tone word in the request. |
| 3 |
ask-if-open |
Camera |
The camera move for the hero segment. |
Slow 30-degree orbit (recommended): the whole product in one move; the orbit is the gallery's most reused rotation (cases 13, 15; official case 42 does a full 360 in 5s). The 30 degrees is this skill's convention, not a gallery figure. / Travelling move — the camera goes somewhere and the move is the transition: it plunges down through the gears, passes into a spinning brass box, spirals out to a wide (case 13, all three in one 30s piece, which never cuts); pick this when the product sits in a world worth crossing rather than on a table. / Slow push-in, shallow depth of field: one detail fills the frame (cases 19, 24) — with a rack focus as its variant when there is a background worth showing sharp first, then snapping off (the phrasing is in the shared file's Camera language; its examples, cases 7 and 26, are not ads). / Let the AI decide. |
No camera word in the request. |
| 4 |
ask-if-open |
Aspect |
Where will it run? That fixes the frame shape. |
16:9 hero (recommended): website, YouTube, landing page — this skill's default. / 9:16 vertical: TikTok, Reels, Shorts. / 1:1 square: feed placements. / Let the AI decide. When a product photo is attached the output ratio follows the image (adaptive), so each description must add "= I crop or pad the photo to this ratio before generating". |
No platform or ratio in the request. |
Not asked: 720p vs 1080p (two rows in the cost table); duration — take the
user's number, and if there is none use the default and say in the recap
that every gallery ad with a stated length runs 20–30s (see Recommended
defaults);
model, provider, the audio flag.
Skip rows specific to ad-creative
On top of the generic rows in creative-brief.md:
| Input says… |
Axis |
Value |
| a product photo is attached, or a path is given |
Photo |
have one → image-to-video; do not ask whether there is one |
| luxury, premium, high-end, elegant, "expensive-looking" |
Tone |
Luxury |
| young, fun, energetic, playful, bold |
Tone |
Playful/consumer |
| minimal, clean, tech, precise, "no clutter" |
Tone |
Minimalist-tech |
| "orbit", "circle around", "move around it" |
Camera |
slow orbit |
| "push in", "get closer", "zoom in on the detail" |
Camera |
slow push-in |
| "reveal", "come into focus" |
Camera |
rack-focus reveal |
| "spin", "turn", "360", "white background", "for my listing" |
scope |
that is seedance-product-video's job — see When NOT to use |
From answers to prompt — traceability
Every answer has to be findable in the prompt or the flags.
| Answer |
Lands in |
| Photo: yes, path |
--frame-first-image PATH, and the anchor sentence at the top of the prompt (Begin with the exact composition of the reference image …) |
| Photo: no |
a text-only PRODUCT block; --aspect-ratio becomes effective |
| Tone |
the STYLE and COLOR PALETTE lines of the header, and the segment pacing (Luxury: 5s segments, slow moves; Playful: 3s segments, cut-driven pace) |
| Camera |
the SHOWCASE segment's camera sentence in Template A |
| Aspect |
--aspect-ratio on text-to-video; the crop/pad step on the photo before image-to-video |
| Duration |
--duration, and the timestamps in the timeline |
The recap for this scenario
Brief:
- Photo: /Users/me/ads/bottle.jpg (given)
- Tone: Luxury (you chose)
- Camera: slow 30-degree orbit (AI's pick)
- Aspect: 9:16 (inferred from "Reels") — I will pad the photo to 9:16 first
- Duration / resolution: 15s / 720p preview and 1080p deliverable — two rows below
Then the full prompt, then the cost table, all in one message — the order and
the rule for a change made at the gate are in creative-brief.md's Order, with the approval gate.
Prompt template
Vocabulary is not repeated here. Timestamp formats and segment lengths:
Segmenting the timeline; cut and continuous-shot phrasing: Transitions
and Several shots in one job; shot sizes and moves: Camera language;
slow motion, speed ramps and cuts on the beat: Pacing; the closing
blocks: Consistency locks and the negative list; asset role sentences:
Reference assets as visual anchors — all headings in
../ofox-video-core/references/prompt-structure.md. What follows is the
ad-specific shape.
All nine gallery ad and UGC prompts (cases 12–15, 23–27) share one skeleton:
a style or format declaration first — or the asset anchor, when an image is
attached — then a multi-beat body and a stated closing action. Seven of the
nine end on a technical tail, and six carry a negative list (cases 14, 15,
23, 24, 25, 26). The cinematic ones pace as
hook → showcase → physical-event climax in slow motion → hero freeze
(cases 12, 14, 15); the UGC ones as a flat action chain that ends
"naturally, not promotionally" (cases 24–27).
Template A — cinematic ad, 15–30s
Segments run 3–5s (cases 15, 25, 26, 27); the one official 30s piece with
10s segments (case 13) never cuts. Slots are in <angle brackets>; optional
lines in [square brackets]. Pick one header labelling style and keep it.
The beats below are a floor, not a ceiling. Counted per case: the
gallery's ads run 5 shots in 20s (case 15, 4s each) up to 9 CUTs in one
generation (case 14), and case 26 runs seven segments in 30s — so a 30s spot
written as five 6-second beats is the slowest ad in the set. Split a beat into
two shots rather than holding one for six seconds; the per-case counts are in
"Shot density, measured per case" in the shared file. The Ofox-measured
envelope now reaches 20 seconds, 7 shots and 6 hard cuts in one job, with a
first frame attached — this scenario's own accepted jobs did it (see
"Several shots: timestamps inside one job, chain across jobs" below) — so Template
A's four or five beats are inside what has been run, not past it. Above 7
shots or 6 cuts is still gallery practice, and a first attempt there is an
experiment.
⚠️ That warning was only ever about the shot count, and a count is half
of the problem. It was in this file, in these words, when a 15s ad was
written as five beats at the floor — and the clip was rejected as "too
simple, too monotonous" anyway, because three of those five beats contained
no physical movement at all. A beat can be at the floor and still be dead;
"a floor, not a ceiling" says nothing about what happens inside a beat. The
missing half is now written down as 7. Every beat needs a physical event —
and "slow" is not "still" below, and it is the first thing to check after
the beat count.
[FORMAT: <N> seconds, <16:9 | 9:16 | 1:1>, hard cuts on the timestamps.] — optional; must match the flags
STYLE: <ad category> commercial, <capture anchor: 8K photoreal studio | 35mm film grain | glossy high-speed>, <tone: luxury — slow, dark, warm gold | playful — bright, saturated, fast | minimalist-tech — white or grey, cool, steady>.
COLOR PALETTE: <dominant>, <the product's warm or cool accent>, <contrast colour>, <metallic accent>. (case 14)
[CHARACTER: <one block — age range, build, hair, wardrobe item by item with colours, one signature accessory>. Referred to below as "<tag>".] (case 14; text only — see the real-person note below)
PRODUCT: <shape> <material and finish> <colour> <product name>, <label text in quotes, verbatim>, <contents or accessories item by item>.
[image1 provides the product exactly — <shape, label, cap, colour>; ignore its background.] (cases 12, 24)
SCENE: <backdrop>, <one or two props framing the shot>, <light: saturated studio key with a warm rim | golden hour | single hard key>.
0–<3–5>s HOOK — <one visual focus: a macro of one ingredient | the cap | the clock face>; <one strong move: a hard cut lands as the detail completes its motion | low-angle dolly-in | a white flash freezes the frame | layers unfold>. (cases 12, 13, 15, 14)
<TRANSITION between any two beats — name a kind; a hard cut is one of nine and an unnamed boundary becomes one: HARD CUT. | The camera plunges through <the gears / the pour / the open lid> into the next beat. (case 13) | <The product / the blade / a hand> sweeps past the lens and the camera comes out of the occlusion on <the next arrangement>. (the phrasing is cases 2, 8, 41, none of them ads) | A white flash freezes the frame, then <the next pose>. (case 15) | An extreme speed ramp carries <the event> into <the next beat>. (case 15) | Without cutting, <the array reassembles in frame>.>
<>–<>s SHOWCASE — <arrangement: a strict geometric array of the variants | <tag> holds the product toward the lens, steam rising | the camera orbits the product 30 degrees>; cut to close-ups of <two or three details>. <one physical event in this beat — required, see slot notes> (cases 12, 14, 24)
<>–<>s CLIMAX — <one physical event: the biscuit snaps | the broth erupts | the blade sweeps past the lens>; drops into slow motion for one second — <micro-detail: the filling bursts, crumbs fly, droplets hang> — then back to speed. (cases 12, 14, 15)
[<>–<>s PAYOFF — <the event's result, as its own timed shot: the drop lands and one ring spreads and dies | the crumbs settle on the white>; full speed, and the landing named as a required visible event.] (only when the payoff is small and fast; job 60fbea52 wrote it as CLIMAX's tail and lost it, job cb6b7870 gave it its own stamp and got it — slot notes below)
[<>–<>s VARIATION — back at full tempo, <a second arrangement>.] (case 12)
<>–<N>s CLOSE — product hero frame, <centered | in slow motion>; [the slogan "<text>" enters word by word, one word per cut;] [the logo per image2 in the last second;] hold the final frame. (cases 12, 13, 14, 15)
CAMERA: handheld energy and high-speed slow motion on the <climax>; smooth static holds on the <showcase>; cinematic shallow depth of field throughout. (case 14)
AUDIO: <room tone of the set>; <two or three recorded sounds tied to visible actions: the cap breaking its seal, the snap, fabric, a footfall in dust>; no dialogue. No music — see "4. No dialogue, no music — but a sound block" below. (jobs 7ae7d49e, ac927785)
CONSISTENCY: the product's shape, label, colours and proportions stay identical in every shot[; <tag>'s face, hair and wardrobe do not change]. (cases 24, 15)
AVOID: dialogue, subtitles, on-screen text other than the slogan card, watermarks, jitter, identity drift, wardrobe change, warped hands, extra limbs; music, score, soundtrack, instrumental, melody, rhythm track, percussion, <named instruments: cello, strings, piano, bell, chime>, humming, singing. (cases 15, 24, 14; the music items are jobs 1ff72400 / 7ae7d49e)
Notes on the slots:
- Every beat carries one physical event,
SHOWCASE included. This is the
slot where an ad goes quiet: it is the one whose job is "show the product",
and a rejected 15s spot spent it on an orbit that never moved — six frames
sampled across it hold the same orientation, the same cap perspective and
the same highlight. Name something that happens — the product is set
down, a hand enters, liquid moves, steam rises, a cloth is pulled away —
and check the whole timeline for a beat carried only by light sliding
across a surface. The measurement and the three repairs are in "7. Every
beat needs a physical event — and 'slow' is not 'still'" below.
- Anchor sentences when an image is attached — put them first, before
STYLE (cases 15, 24 both open on the asset):
Begin with the exact composition of the reference image. (case 15, a
--frame-first-image job) ·
Preserve the product exactly as in @image1 throughout — frame shape, lenses, hinges, colours, materials, proportions. (adapted from case 24) ·
one role line per asset, image1: product appearance. image2: logo, last second only. (cases 12, 13). Sentence patterns and the @image1 caveat:
Reference assets as visual anchors.
- Several pieces or an unboxing (case 24): name every piece and lock each
—
Use the uploaded sunglasses, retail box and leather case as locked product references — then run the showcase as a chain: box opens → case →
product lifted → rotated to show hinges and lenses → worn, turned to
catch the light → held beside the face → push in on the product, fade.
- A person interacting with the product (case 14): one CHARACTER block,
then the tag in every segment (
the model holds the bowl toward the lens with both hands, steam rising). Describe the person in text — and note
that this is a full route, not a consolation prize: see "A model and a
locked product: the route that works" below. Gallery cases 15 and 24
attached real-person images on other platforms; do not read them as Ofox
behaviour.
- Order the framing so the risky anatomy stays small. A person in an ad
is where hands, faces and limb counts go wrong. Job
ac927785-92ef-4e28-97b9-ff8172ec5554 (20s, 7 shots, a runner and a shoe)
came back with no deformation at all, and the thing it did differently was
the order: foot → hand and ankle and lower leg → lower leg and knee →
the foot again in slow motion → full body exactly once, and that once
distant, from behind, head turned away → the set empty again. Focus stayed
on the product in all seven shots and never on the person. So: escalate how
much of the body is in frame, keep the full figure to one distant shot, and
never make a hand or a face the focal point. Avoiding people entirely is
not the only option.
What that run did not establish is that a written size limit works, and a
later one shows it does not. Job
60fbea52-b14b-4796-80bf-03afe0aa4fa0 (a hand entering a macro on a
dropper) said twice — once in the shot and again in AVOID — only the fingertips and the first knuckle ever visible and never more of the hand than that, and the render shows most of the index finger and the hand to
the knuckles. The shot was still anatomically clean, with no extra or
warped fingers, and what kept it clean was the macro framing plus one
simple action, not the limit. Write the framing order above; treat a "never
more than X of a limb" clause as a wish, not a second line of defence.
- Give the climax's payoff its own timed shot when that payoff is small and
fast. Measured once, on
60fbea52-b14b-4796-80bf-03afe0aa4fa0 (15s, 5
shots, accepted): a five-second CLIMAX was written as 7-8.5s the pipette
lifts clear of the bottle, 8.5-10.5s in slow motion a drop swells at the
glass tip and falls, 10.5-12s back at full speed the drop lands on the surface of the oil in the bottle, one clean ring spreads out and dies against the glass. The build-up rendered beautifully and the landing
never happened: at 11.8s the drop is still hanging from the pipette, and
at 12.25s the clip cuts to the hero frame. Five and a half seconds of
climax bought a suspended drop and no event. A hanging, glowing droplet is
exactly the kind of picture this model is good at, so it made that and
skipped the fast physical beat at the end of it. The counter-measure is to
write the payoff as its own timestamped shot with its own share of the
seconds, compress the build-up to pay for it, and name the result as a
required visible event (the drop must be seen to leave the tip, land, and ring the surface) instead of trailing it off the end of a longer shot.
That is what the optional PAYOFF line in the template is for.
✅ That counter-measure has now been run, and it worked — the first
time it was tried, on cb6b7870. The payoff got its own boundary at
11-13s, separate from the CLIMAX before it, and its own required-event
sentence: A column of white steam must be seen to rise out of the open mouth of the bottle, climb into the warm key light where it glows, and drift off to the right. This is a required visible event: the steam has to leave the neck and travel up through the light within these two seconds, not merely hang above it. The steam rises, glows and drifts, confirmed at
t=12.5s — one of only two segments in that clip where anything physical
happens at all, in a clip rejected for being too still. Two things to copy
from the wording: the
event has its own timestamp, and the clause naming what it must not
do (not merely hang above it) describes the earlier failure exactly.
One before-and-after pair on two different events, not a controlled test —
but the fix is no longer a hypothesis.
- A continuous state change can be one of the listed changes, if its
direction is pinned. A consistency lock normally reads "nothing changes
except these things", and the things are discrete events. The same job also
let one continuous drift through, and it rendered correctly: the bars of
window light from the blinds were allowed to
only ever creep lower and warmer, never brighter, never higher, and never change direction — named
as the single permitted drift in a scene whose props were otherwise nailed
down. Opening and closing frames confirm the bars moved, and moved the
written way. One observation on one clip, but it means a dimming afternoon
or a cooling set does not have to be broken into discrete steps to be
controlled.
- An extreme macro inside a homogeneous liquid is the weakest showcase shot
on record here. The same job's 2.1-second macro inside amber serum came
back as a near-flat colour field with two soft refracted light bands:
competent, and nothing to watch. The comparable shot into a carbonated
drink carried itself on rising bubbles (
7ae7d49e). One observation each
way, so read it as a warning rather than a law — a liquid macro needs
something inside the liquid that moves.
- Do not ask the model for music. The AUDIO slot above used to read
<upbeat | cinematic | minimal> instrumental; percussion hits synced to <the climax event> — copied from cases 12 and 14, and that is the shape
that got refused here. A prompt asking for "one sustained low cello note"
and "a soft bell chime" came back failed with
error.code: output_moderation_failed and the upstream message the output audio may be related to copyright restrictions (job
1ff72400-0f30-4be1-a417-f52d43955d09, 2026-09-04). Nothing was billed.
Keeping only recorded, diegetic sound and naming the music words in AVOID
passed on the next run (7ae7d49e-7eb9-4165-9d95-09cd525d53ed); the next
ad in the same batch wrote it that way from the start and was also clean
(ac927785-92ef-4e28-97b9-ff8172ec5554). One refused sample, so the exact
trigger is unknown — but a real ad's music is laid in afterwards anyway, so
the cost of complying is nothing. Detail: "Asking for music can fail output
moderation on copyright" in the shared file.
- Slot pacing by tone: Luxury runs 5s segments and slow moves (case 13);
Playful runs 3s segments and cuts on the downbeat — the cuts, not the
music the downbeat came from (cases 12, 14). ⚠️ Luxury's longer segments
raise the stakes on the rule above rather than relaxing it: a 5-second beat
with no event in it is 5 seconds of nothing, where a 3-second one is only
- If a Luxury beat has no physical event available, split it into two
shorter shots instead of holding it.
- Five beats in 15 seconds has now been run three times, and an uneven
duration
split is honoured closely.
7ae7d49e, 60fbea52 and cb6b7870 are all
15s, 5
shots, 4 hard cuts, first frame attached, and all three kept every cut —
cb6b7870's four landed at 3.000 / 7.542 / 11.042 / 13.250s against
written stamps of 3 / 8 / 11 / 13, so within half a second each way. ⚠️ And
the third of those was rejected, which is the point worth carrying: the
structural half of this template is now well verified and the structural
half is not what decides whether an ad is watchable. See 7 in "Writing a
good ad-creative prompt". On
60fbea52 the per-shot budget was planned 3 / 2 / 2 / 5 / 3 seconds and
rendered 2.62 / 2.13 / 1.87 / 5.63 / 2.79 — every segment within 0.4s of
its plan, including a deliberately lopsided split that gave the climax more
than twice any other shot. So spending the seconds by function rather than
evenly is a real instrument on this path, not a hope. (This bullet used to
warn that four or five beats was past what had been verified; that warning
was retired in 1.9.0, and this is what replaced it.)
Template B — 10 seconds or less, three beats
Inferred from the 15–30s cases; the gallery has no ad prompt of 10s or
less (the shortest stated length is 20s, cases 15 and 27). No header
manifest — the vendor's formula order, subject and action first (shared
file, The vendor's own formula (ByteDance first-party)).
<Product> <one action or event> on <backdrop>; <tone archetype>, <capture anchor>. [image1 provides the product exactly.]
0–3s: <a macro of one detail>; a hard cut lands as it completes its motion.
3–7s: <the physical event> in slow motion — <micro-detail>; rim light along the edge.
7–10s: product hero frame, centered; [the slogan "<text>" | the logo per image2 in the last second;] hold the final frame.
<light line>. <palette line>. No music; ambient/SFX only; no dialogue. No subtitles, no watermarks, no jitter.
Worked example — adapted from case 12 (translated), timestamps added
The official fruit-biscuit ad, moved from its prose-ordered original into
Template A at 20 seconds. The original reads the strawberry variant from an
attached image and takes composition, motion and impact from six reference
clips; Ofox allows one video reference, so this version keeps only the
image. Word choice is ours; the beat order, the snap-in-slow-motion climax,
the word-by-word slogan and the scatter ending are the original's.
Case 12's own audio direction is an upbeat instrumental with the cuts synced
to its downbeat. That part is not carried over here — this version
replaces the scored cue with recorded sound only, because asking this model
for music has failed output moderation on audio copyright here (unbilled;
see "4. No dialogue, no music — but a sound block" above, and "Asking for
music can fail output moderation on copyright" in the shared file). A score
can be laid over the delivered clip afterwards, which is where case 12's
instrumental would have to come from anyway — so, unlike the rest of this
adaptation, the AUDIO line and the beat-timed cues below are a deliberate
departure from the original, not a translation of it.
FORMAT: 20 seconds, 16:9, hard cuts on the timestamps.
STYLE: bright, multicoloured snack commercial; clean, premium, strongly rhythmic; glossy high-speed capture.
COLOR PALETTE: strawberry red, mango yellow, blueberry violet and kiwi green on white; gold foil accents.
PRODUCT: rectangular fruit-filled biscuits in four flavours, each beside its fruit; image1 provides the strawberry variant's exact packaging and filling colour.
SCENE: white seamless backdrop, the fruit as the only props, saturated studio key light with a warm rim.
0–3s HOOK — a single strawberry fills the frame in macro; the cut lands as it rotates to catch the key light.
3–9s SHOWCASE — the four biscuits and their fruits in a strict geometric array, orderly and bright; cut to a close-up of each variant.
9–13s CLIMAX — one biscuit snaps; the instant drops into slow motion, the fruit filling bursts open and crumbs fly; back to speed.
13–16s VARIATION — full tempo again, the biscuits in a horizontal row.
16–20s CLOSE — the words "One bite of crispness, a heart full of delight" enter word by word, one per quick cut; product freeze frame, centered; biscuits and fruit scatter outward.
CAMERA: handheld energy on the snap, smooth static holds on the arrays, shallow depth of field throughout.
AUDIO: studio room tone; SFX: the biscuit's snap, crumbs scattering, fruit skin catching the light; no dialogue. No music.
CONSISTENCY: packaging colours, biscuit shape and filling colour identical in every shot.
AVOID: dialogue, subtitles, on-screen text other than the slogan, watermarks, jitter, music, score, instrumental, percussion.
UGC variant
Five of the nine gallery ad prompts are creator-style clips (cases 23–27).
This skill's description does not claim them, but the request "make it
look like a real customer filmed it" lands here often enough that the slot
differences are worth having. The boundary is what carries the clip: a
creator holding, using and describing the product stays here; a scene
carried by the performance and the exchange between people is
seedance-short-drama, per this skill's description. Same skeleton as
Template A; these slots change:
| Slot |
Template A (cinematic) |
UGC variant |
Cases |
| STYLE |
commercial + studio anchor |
realistic UGC-style … filmed on a smartphone, handheld, authentic, imperfect, no polished commercial look |
24, 25, 27 |
| Device line (new) |
— |
where the phone is (selfie mode · propped on a gym bench, slightly low angle · handheld) plus its flaws: autofocus hunting, exposure shifts, compression artifacts, mild sharpening |
25, 27 |
| Anchors |
product image |
a person image and each product piece, locked item by item — real-person frames are refused on Seedance 2.5 image-to-video, so on Ofox this is a text-described person |
24 |
| HOOK |
macro + a hard cut on the motion |
the person enters the scene, or the first line to camera |
24, 27 |
| CLIMAX |
physical event in slow motion |
none — a flat action chain (unbox → turn → try on → catch the light) |
24 |
| Dialogue |
none |
one quoted line per beat (a review), or a single closing line that is spontaneous, slightly breathless, not scripted |
24, 25 |
| AUDIO |
room tone + SFX, no music |
an ambience list (natural gym ambience only, eight sounds named); no music or low music |
25, 26 |
| CLOSE |
hero freeze + slogan |
holds them beside her face + push in + fade · walks out of frame while the camera continues recording for a moment · not promotional |
24, 25, 26 |
| AVOID |
text, jitter, drift |
adds cinematic color grading, beauty filters, artificial skin smoothing, dramatic slow motion, music, perfect lighting — the opposite of this skill's default look |
25 |
| Aspect |
16:9 |
9:16 appears (case 27); 16:9 also (cases 24–26) |
27 |
Writing a good ad-creative prompt
Where the product goes
Earlier versions of this skill said: product first, then camera, then mood.
The gallery does not support that order. All nine ad and UGC prompts open
with a style or format declaration — or, when a reference image is attached,
with the asset's anchor sentence, as cases 15 and 24 do — and place the
product second or third (case 14 runs Style: → Character: → Subject: →
Setting:). There is
no A/B evidence that either order renders the product better; there is
simply no collected prompt that leads with the product. So:
- 15s and longer: header manifest — FORMAT → STYLE / COLOR PALETTE →
CHARACTER (if any) → PRODUCT → SCENE → timeline → CAMERA → AUDIO →
CONSISTENCY / AVOID. Template A above; the shared file's
Prompt skeleton: header manifest, timeline, closing block.
- 10s and shorter: the vendor's formula order — subject and action first,
then scene, style, camera, sound, in two to four sentences and no
manifest. Template B above; the shared file's
The vendor's own formula (ByteDance first-party).
1. The product, described precisely
Shape, material, colour, finish, and any text on it verbatim in quotes.
Finish drives how light behaves on the surface (glass, brushed metal, matte
plastic), so name it (case 14's Subject: lists five ingredients; case 17
names the accent colour and every accessory).
A tall clear glass perfume bottle with a gold cap, "NOCTURNE" embossed on the front, centered on a reflective black surface.
2. Camera as a real shot, with a speed
Concrete cinematography terms steer the model; "make it look cool" does not.
The full vocabulary is in the shared file's Camera language; the moves ads
reuse most are the 30-degree orbit, the slow push-in with shallow
depth of field, the rack focus from background to product and the
pull-back reveal (cases 13, 15, 19, 24, 26). Ads also carry a speed
dimension the other scenarios rarely use — slow-motion insert, speed
ramp, freeze, static hold, cut on the beat — in the shared
file's Pacing (cases 12, 14, 15).
The camera orbits the bottle 30 degrees; soft rim light along the glass edge; shallow depth of field, the background gently blurred. The cap turn drops into slow motion for one second.
3. Brand tone, as an archetype plus a palette line
One archetype word steers grade and pacing more reliably than a paragraph of
adjectives; a Color palette: line (case 14) pins the colours it implies.
- Luxury: slow movement, dark or moody background, warm gold highlights,
5s segments (cases 13, 15). ⚠️
slow movement is a speed, not a
quantity — read it as "the movement is slow", never as "there is little
movement". This line as written above is what a rejected flask ad turned
into three separate sentences pinning the camera and the product still; see
7 below for the measurement and the three repairs.
- Playful/consumer: bright saturated colours, faster movement, cuts on
the beat, 3s segments (cases 12, 14).
- Minimalist/tech: clean white or grey background, precise steady camera,
cool light.
The negative list is where you name the tone you are not making — a Luxury
prompt excludes cartoonish, oversaturated; a UGC prompt excludes
cinematic color grading (case 25).
4. No dialogue, no music — but a sound block
Cinematic ad clips carry no speech (cases 12, 13, 15; case 14 allows one
vocal ad-lib), so say no dialogue to steer away from voice generation. Do
not stop there: write an AUDIO line, but write it as room tone plus two or
three recorded sounds keyed to visible actions — the cap breaking its seal,
the snap, a footfall in dust — and exclude music explicitly.
The music half of case 14's AUDIO line does not transfer to Ofox. A
prompt asking for a cello note and a bell chime failed
output_moderation_failed with the output audio may be related to copyright restrictions (job 1ff72400-0f30-4be1-a417-f52d43955d09, not
billed); the same ad without music passed
(7ae7d49e-7eb9-4165-9d95-09cd525d53ed). Score goes in afterwards, in an
editor, the way it does on a real spot. Shape and phrases: the shared file's
Dialogue and sound, and Asking for music can fail output moderation on copyright for the measurement.
A loudness written per shot is not honoured — write what each shot
contains, not how loud it is. Measured on job
60fbea52-b14b-4796-80bf-03afe0aa4fa0, whose shot 2 read Sound: room tone, nothing else, very quiet and came back as the loudest sustained passage in
the clip. Mean level per second: about -44.6 and -43.3 dB over the opening
shot, then -27.8, -24.3 and -27.0 dB across shot 2, back to roughly -37 to
-41 dB for the middle of the clip, and -47.7 then -54.4 dB in the last two
seconds. Two thirds of that AUDIO block did work: the loudest transients land
exactly where sound effects were written — peaks of -10.1 dB at 7-8s (the
pipette lifting) and -11.9 dB at 10-11s (the drop) — and the close thinned to
near silence as asked. What was ignored is the relative level between
shots. So do not plan a clip whose effect depends on one shot being quieter
than its neighbours; name each shot's sounds and leave the mix to an
editor, the same way the music goes on afterwards.
A sound written as faint can be honoured as inaudible, while the
placement instruction still works. Measured on cb6b7870, whose AUDIO line
named three cues: the cap thread turning, the short pneumatic tick of the seal parting at 9s, and a faint hiss of steam at 11s. The first two
landed clearly — the level rises off a -43 to -46 dB room-tone floor to
-30.9 dB at 7.7s and to a -21.7 dB peak across 8.8-9.2s, the loudest
sustained passage in the clip and exactly where the seal was written. The
third produced nothing measurable: at 11.5s the level drops to -41.6 dB and
stays near the floor for the whole PAYOFF, though the steam is plainly
visible on screen. So timing a sound to a visible action works and an
intensity adjective is not a volume control — do not hang a beat's effect
on a sound you have described as faint. Second observation of the transient
half, first of this nuance.
5. Text on screen: lock it, or design it out
Two measured facts pull in opposite directions, and both are usable — plus
one refinement of the second, from the run that tested it hardest.
- Text you want — a brand name, a wordmark — is reliable if it exists on
the attached first frame and the video only has to preserve it. Job
7ae7d49e closed on a legible wordmark in the frame's own typeface,
because the label was approved on the still first. Rendering the same text
from a description is the classic failure; read the label at full size
before spending on the clip. Confirmed a second time on 60fbea52, where
the label word AURA survived unaltered in every shot it appeared in
and the same word rendered correctly as an end card in an empty patch
of wall. What was written for it: the reference frame declared the only authority on how this product looks, the letterforms and the letter
spacing named as invariants, and an explicit ban — do not regenerate, redraw, restyle, re-letter, translate or reword the label, and no second
word, slogan, barcode or volume marking added to it.
- Text you don't want is best removed by the set, not by the negative
list. Both ads in this batch produced zero invented signage, and the
reason is that a near-black studio and an empty bright studio contain no
surface lettering could sit on. Compare a job on a neon street whose AVOID
list named signs, posters and characters in any language and still returned
sign-like shapes (
41f87ac7). Detail: Unwanted text is designed out of the set, not forbidden in the list in the shared file.
- Where the set cannot be emptied, forbid the objects rather than the
text. The two studio ads are the easy case: nothing in a near-black or an
empty bright studio can grow signage, so the rule was never really tested
by them. Job
60fbea52 is the hard case and the strongest data point in
this repo — a desk, where book spines, notebooks and loose paper are
the classic failure mode, and a brief that wanted a real brand word legible
in the same frame. It came
…(truncated)
1---2name: seedance-ad-creative3description: Requires OFOX_API_KEY — create one at https://app.ofox.ai. Generate a cinematic brand/product ad clip from a product description or photo using the Ofox video API (Seedance 2.5) — runs a short creative brief (product photo, brand tone, camera move, aspect ratio) when the request leaves them open, writes a timestamped shot-craft prompt (hook, showcase, slow-motion climax, hero close), shows a cost estimate, then calls ofox-video-core to submit, poll, download, and report the real cost. Use when a user asks for a commercial-style product or brand video, e.g. "give this perfume bottle a 10-second cinematic brand ad", "make a product ad for our new sneaker", "turn this product photo into a hero video for the landing page", or "I need a 15-second brand video with a slow orbit around the bottle". Do not use for dialogue-driven scenes with people talking (see seedance-short-drama).4license: MIT5---67# seedance-ad-creative: cinematic product/brand ad clips89Turns a product description (or a product photo) into a commercial-style10video clip: camera language, product framing, and brand tone become a11Seedance 2.5 prompt, which this skill submits, polls, downloads, and reports12the cost for.1314This skill is a thin, scenario-specific layer over15[`ofox-video-core`](../ofox-video-core/SKILL.md). It owns the ad-creative16prompt craft, the creative brief, recommended defaults, and the17pre-generation cost estimate; `ofox-video-core` owns talking to the Ofox API18correctly and safely (the `OFOX_API_KEY` handling, the no-resubmit rule,19error-code mapping, download/verification). **Read that skill's safety20contract before using this one** — it is not restated here.2122The prompt structure shared by every Seedance scenario skill — the vendor's23formula, timestamp formats and segment lengths, transition and camera24vocabulary, consistency locks and negative lists, the two meanings of an25attached image — lives in26[`../ofox-video-core/references/prompt-structure.md`](../ofox-video-core/references/prompt-structure.md).27Load it before writing a prompt. This file only adds what is specific to28ads.2930The rules for the questions that come **before** a prompt exists are shared31the same way, in32[`../ofox-video-core/references/creative-brief.md`](../ofox-video-core/references/creative-brief.md);33the brief section below carries only this scenario's question set.3435## Before generating: the availability check3637Run this once per session (not on every request):3839```bash40bash ../ofox-video-core/references/ofox-video.sh check41```4243If it fails, follow `ofox-video-core`'s guidance (install `curl`/`jq`, or get44an `OFOX_API_KEY` at `https://app.ofox.ai`) — don't dead-end the45conversation, and don't re-run this check on every subsequent request once46it has passed.4748## Before writing the prompt: the creative brief4950The shared rules are in51[`../ofox-video-core/references/creative-brief.md`](../ofox-video-core/references/creative-brief.md)52— the three tiers, one round of at most four questions, the shape of a53question, the "Let the AI decide" discipline, the generic skip rows, the order54with the approval gate, the fallback for a runtime without55`AskUserQuestion`, and the anti-patterns. Read it before writing a prompt.56This section adds only what is specific to ads.5758The brief is what turns "make an ad for this bottle" into choices the user59actually made instead of choices made for them in silence. Zero questions is60common here: "15-second vertical TikTok ad for this sneaker photo, young and61energetic, slow orbit" has settled every axis.6263| Tier | Ad-creative axes |64|---|---|65| **must-ask** | is there a product photo? Ask this **first** — the answer changes the whole prompt route, and every gallery ad that had to match a real product, logo or person locked it to an image (cases 12, 13, 15, 24). |66| **ask-if-open** | brand tone, the hero camera move, aspect ratio |67| **never-ask** | resolution, model, provider, audio on/off, duration when the user gave one. 720p preview vs 1080p deliverable is **two rows in the cost table**, not a question. |6869If four slots are not enough: `Photo` first, then the axis that changes the70picture most (`Tone`), then `Camera`, then `Aspect`; anything left falls to a71default and the cost table.7273**The product-photo question has no "Let the AI decide" option.** A photo74that does not exist cannot be invented, and "you decide" from the user75delegates the taste axes only — it never answers this one.7677### The ad-creative question set7879| # | Tier | `header` | Question | Options (1 = recommended, last = delegation) | Ask when |80|---|---|---|---|---|---|81| 1 | must-ask | `Photo` | Do you have a photo or render of the product? With one, label text and shape stay faithful. | **Yes — I'll give a local path (recommended)**: the real product is rendered from the image; the gallery's product, logo and packaging shots all lock to one (cases 12, 13, 24). / **No — describe it in text**: fine for a generic or fictional product; on a real SKU the label and logo may drift. The gallery's text-only ads all stay on generic categories — a bowl of ramen (case 14), juice bottles and produce (case 27), gym gear (case 25) — and its text-only product prompts (cases 16, 17, 19) are all fictional brands. **No AI option.** | No image attached and the user did not say "no photo". |82| 2 | ask-if-open | `Tone` | Brand tone — it sets the palette, the pace and the light. | Put the archetype that fits the product category first, marked `(recommended)`: perfume / watch / jewellery → **Luxury** — slow, dark background, warm gold highlights (cases 13, 15). snack / drink / sneaker → **Playful/consumer** — bright, saturated, cuts on the beat (cases 12, 14). headphones / gadget / app → **Minimalist-tech** — white or grey, cool light, steady precise camera. Then the other two. Then **Let the AI decide** — "I'll use the recommended archetype and mark it (AI's pick)". | No tone word in the request. |83| 3 | ask-if-open | `Camera` | The camera move for the hero segment. | **Slow 30-degree orbit (recommended)**: the whole product in one move; the orbit is the gallery's most reused rotation (cases 13, 15; official case 42 does a full 360 in 5s). The 30 degrees is this skill's convention, not a gallery figure. / **Travelling move — the camera goes somewhere and the move *is* the transition**: it plunges down through the gears, passes into a spinning brass box, spirals out to a wide (case 13, all three in one 30s piece, which never cuts); pick this when the product sits in a world worth crossing rather than on a table. / **Slow push-in, shallow depth of field**: one detail fills the frame (cases 19, 24) — with a rack focus as its variant when there is a background worth showing sharp first, then snapping off (the phrasing is in the shared file's `Camera language`; its examples, cases 7 and 26, are not ads). / **Let the AI decide**. | No camera word in the request. |84| 4 | ask-if-open | `Aspect` | Where will it run? That fixes the frame shape. | **16:9 hero (recommended)**: website, YouTube, landing page — this skill's default. / **9:16 vertical**: TikTok, Reels, Shorts. / **1:1 square**: feed placements. / **Let the AI decide**. When a product photo is attached the output ratio follows the image (`adaptive`), so each description must add "= I crop or pad the photo to this ratio before generating". | No platform or ratio in the request. |8586Not asked: 720p vs 1080p (two rows in the cost table); duration — take the87user's number, and if there is none use the default and say in the recap88that every gallery ad with a stated length runs 20–30s (see Recommended89defaults);90model, provider, the audio flag.9192### Skip rows specific to ad-creative9394On top of the generic rows in `creative-brief.md`:9596| Input says… | Axis | Value |97|---|---|---|98| a product photo is attached, or a path is given | Photo | have one → image-to-video; do not ask whether there is one |99| luxury, premium, high-end, elegant, "expensive-looking" | Tone | Luxury |100| young, fun, energetic, playful, bold | Tone | Playful/consumer |101| minimal, clean, tech, precise, "no clutter" | Tone | Minimalist-tech |102| "orbit", "circle around", "move around it" | Camera | slow orbit |103| "push in", "get closer", "zoom in on the detail" | Camera | slow push-in |104| "reveal", "come into focus" | Camera | rack-focus reveal |105| "spin", "turn", "360", "white background", "for my listing" | scope | that is `seedance-product-video`'s job — see When NOT to use |106107### From answers to prompt — traceability108109Every answer has to be findable in the prompt or the flags.110111| Answer | Lands in |112|---|---|113| Photo: yes, path | `--frame-first-image PATH`, and the anchor sentence at the top of the prompt (`Begin with the exact composition of the reference image …`) |114| Photo: no | a text-only PRODUCT block; `--aspect-ratio` becomes effective |115| Tone | the STYLE and COLOR PALETTE lines of the header, and the segment pacing (Luxury: 5s segments, slow moves; Playful: 3s segments, cut-driven pace) |116| Camera | the SHOWCASE segment's camera sentence in Template A |117| Aspect | `--aspect-ratio` on text-to-video; the crop/pad step on the photo before image-to-video |118| Duration | `--duration`, and the timestamps in the timeline |119120### The recap for this scenario121122```123Brief:124- Photo: /Users/me/ads/bottle.jpg (given)125- Tone: Luxury (you chose)126- Camera: slow 30-degree orbit (AI's pick)127- Aspect: 9:16 (inferred from "Reels") — I will pad the photo to 9:16 first128- Duration / resolution: 15s / 720p preview and 1080p deliverable — two rows below129```130131Then the full prompt, then the cost table, all in one message — the order and132the rule for a change made at the gate are in `creative-brief.md`'s `Order,133with the approval gate`.134135## Prompt template136137Vocabulary is not repeated here. Timestamp formats and segment lengths:138`Segmenting the timeline`; cut and continuous-shot phrasing: `Transitions`139and `Several shots in one job`; shot sizes and moves: `Camera language`;140slow motion, speed ramps and cuts on the beat: `Pacing`; the closing141blocks: `Consistency locks and the negative list`; asset role sentences:142`Reference assets as visual anchors` — all headings in143`../ofox-video-core/references/prompt-structure.md`. What follows is the144ad-specific shape.145146All nine gallery ad and UGC prompts (cases 12–15, 23–27) share one skeleton:147a style or format declaration first — or the asset anchor, when an image is148attached — then a multi-beat body and a stated closing action. Seven of the149nine end on a technical tail, and six carry a negative list (cases 14, 15,15023, 24, 25, 26). The cinematic ones pace as151**hook → showcase → physical-event climax in slow motion → hero freeze**152(cases 12, 14, 15); the UGC ones as a flat action chain that ends153"naturally, not promotionally" (cases 24–27).154155### Template A — cinematic ad, 15–30s156157Segments run 3–5s (cases 15, 25, 26, 27); the one official 30s piece with15810s segments (case 13) never cuts. Slots are in `<angle brackets>`; optional159lines in `[square brackets]`. Pick one header labelling style and keep it.160161**The beats below are a floor, not a ceiling.** Counted per case: the162gallery's ads run 5 shots in 20s (case 15, 4s each) up to 9 `CUT`s in one163generation (case 14), and case 26 runs seven segments in 30s — so a 30s spot164written as five 6-second beats is the slowest ad in the set. Split a beat into165two shots rather than holding one for six seconds; the per-case counts are in166"Shot density, measured per case" in the shared file. The Ofox-measured167envelope now reaches **20 seconds, 7 shots and 6 hard cuts in one job, with a168first frame attached** — this scenario's own accepted jobs did it (see169"Several shots: timestamps inside one job, `chain` across jobs" below) — so Template170A's four or five beats are inside what has been run, not past it. Above 7171shots or 6 cuts is still gallery practice, and a first attempt there is an172experiment.173174⚠️ **That warning was only ever about the shot *count*, and a count is half175of the problem.** It was in this file, in these words, when a 15s ad was176written as five beats at the floor — and the clip was rejected as "too177simple, too monotonous" anyway, because three of those five beats contained178no physical movement at all. A beat can be at the floor and still be dead;179"a floor, not a ceiling" says nothing about what happens *inside* a beat. The180missing half is now written down as **7. Every beat needs a physical event —181and "slow" is not "still"** below, and it is the first thing to check after182the beat count.183184```185[FORMAT: <N> seconds, <16:9 | 9:16 | 1:1>, hard cuts on the timestamps.] — optional; must match the flags186STYLE: <ad category> commercial, <capture anchor: 8K photoreal studio | 35mm film grain | glossy high-speed>, <tone: luxury — slow, dark, warm gold | playful — bright, saturated, fast | minimalist-tech — white or grey, cool, steady>.187COLOR PALETTE: <dominant>, <the product's warm or cool accent>, <contrast colour>, <metallic accent>. (case 14)188[CHARACTER: <one block — age range, build, hair, wardrobe item by item with colours, one signature accessory>. Referred to below as "<tag>".] (case 14; text only — see the real-person note below)189PRODUCT: <shape> <material and finish> <colour> <product name>, <label text in quotes, verbatim>, <contents or accessories item by item>.190 [image1 provides the product exactly — <shape, label, cap, colour>; ignore its background.] (cases 12, 24)191SCENE: <backdrop>, <one or two props framing the shot>, <light: saturated studio key with a warm rim | golden hour | single hard key>.1921930–<3–5>s HOOK — <one visual focus: a macro of one ingredient | the cap | the clock face>; <one strong move: a hard cut lands as the detail completes its motion | low-angle dolly-in | a white flash freezes the frame | layers unfold>. (cases 12, 13, 15, 14)194<TRANSITION between any two beats — name a kind; a hard cut is one of nine and an unnamed boundary becomes one: HARD CUT. | The camera plunges through <the gears / the pour / the open lid> into the next beat. (case 13) | <The product / the blade / a hand> sweeps past the lens and the camera comes out of the occlusion on <the next arrangement>. (the phrasing is cases 2, 8, 41, none of them ads) | A white flash freezes the frame, then <the next pose>. (case 15) | An extreme speed ramp carries <the event> into <the next beat>. (case 15) | Without cutting, <the array reassembles in frame>.>195<>–<>s SHOWCASE — <arrangement: a strict geometric array of the variants | <tag> holds the product toward the lens, steam rising | the camera orbits the product 30 degrees>; cut to close-ups of <two or three details>. <one physical event in this beat — required, see slot notes> (cases 12, 14, 24)196<>–<>s CLIMAX — <one physical event: the biscuit snaps | the broth erupts | the blade sweeps past the lens>; drops into slow motion for one second — <micro-detail: the filling bursts, crumbs fly, droplets hang> — then back to speed. (cases 12, 14, 15)197[<>–<>s PAYOFF — <the event's result, as its own timed shot: the drop lands and one ring spreads and dies | the crumbs settle on the white>; full speed, and the landing named as a required visible event.] (only when the payoff is small and fast; job 60fbea52 wrote it as CLIMAX's tail and lost it, job cb6b7870 gave it its own stamp and got it — slot notes below)198[<>–<>s VARIATION — back at full tempo, <a second arrangement>.] (case 12)199<>–<N>s CLOSE — product hero frame, <centered | in slow motion>; [the slogan "<text>" enters word by word, one word per cut;] [the logo per image2 in the last second;] hold the final frame. (cases 12, 13, 14, 15)200201CAMERA: handheld energy and high-speed slow motion on the <climax>; smooth static holds on the <showcase>; cinematic shallow depth of field throughout. (case 14)202AUDIO: <room tone of the set>; <two or three recorded sounds tied to visible actions: the cap breaking its seal, the snap, fabric, a footfall in dust>; no dialogue. No music — see "4. No dialogue, no music — but a sound block" below. (jobs 7ae7d49e, ac927785)203CONSISTENCY: the product's shape, label, colours and proportions stay identical in every shot[; <tag>'s face, hair and wardrobe do not change]. (cases 24, 15)204AVOID: dialogue, subtitles, on-screen text other than the slogan card, watermarks, jitter, identity drift, wardrobe change, warped hands, extra limbs; music, score, soundtrack, instrumental, melody, rhythm track, percussion, <named instruments: cello, strings, piano, bell, chime>, humming, singing. (cases 15, 24, 14; the music items are jobs 1ff72400 / 7ae7d49e)205```206207Notes on the slots:208209- **Every beat carries one physical event, `SHOWCASE` included.** This is the210 slot where an ad goes quiet: it is the one whose job is "show the product",211 and a rejected 15s spot spent it on an orbit that never moved — six frames212 sampled across it hold the same orientation, the same cap perspective and213 the same highlight. Name something that happens — the product is set214 down, a hand enters, liquid moves, steam rises, a cloth is pulled away —215 and check the whole timeline for a beat carried only by light sliding216 across a surface. The measurement and the three repairs are in "7. Every217 beat needs a physical event — and 'slow' is not 'still'" below.218- **Anchor sentences when an image is attached** — put them first, before219 STYLE (cases 15, 24 both open on the asset):220 `Begin with the exact composition of the reference image.` (case 15, a221 `--frame-first-image` job) ·222 `Preserve the product exactly as in @image1 throughout — frame shape,223 lenses, hinges, colours, materials, proportions.` (adapted from case 24) ·224 one role line per asset, `image1: product appearance. image2: logo, last225 second only.` (cases 12, 13). Sentence patterns and the `@image1` caveat:226 `Reference assets as visual anchors`.227- **Several pieces or an unboxing** (case 24): name every piece and lock each228 — `Use the uploaded sunglasses, retail box and leather case as locked229 product references` — then run the showcase as a chain: box opens → case →230 product lifted → rotated to show hinges and lenses → worn, turned to231 catch the light → held beside the face → push in on the product, fade.232- **A person interacting with the product** (case 14): one CHARACTER block,233 then the tag in every segment (`the model holds the bowl toward the lens234 with both hands, steam rising`). **Describe the person in text** — and note235 that this is a full route, not a consolation prize: see "A model *and* a236 locked product: the route that works" below. Gallery cases 15 and 24237 attached real-person images on other platforms; do not read them as Ofox238 behaviour.239- **Order the framing so the risky anatomy stays small.** A person in an ad240 is where hands, faces and limb counts go wrong. Job241 `ac927785-92ef-4e28-97b9-ff8172ec5554` (20s, 7 shots, a runner and a shoe)242 came back with no deformation at all, and the thing it did differently was243 the order: **foot → hand and ankle and lower leg → lower leg and knee →244 the foot again in slow motion → full body exactly once, and that once245 distant, from behind, head turned away → the set empty again.** Focus stayed246 on the product in all seven shots and never on the person. So: escalate how247 much of the body is in frame, keep the full figure to one distant shot, and248 never make a hand or a face the focal point. Avoiding people entirely is249 not the only option.250 **What that run did not establish is that a written size limit works, and a251 later one shows it does not.** Job252 `60fbea52-b14b-4796-80bf-03afe0aa4fa0` (a hand entering a macro on a253 dropper) said twice — once in the shot and again in AVOID — `only the254 fingertips and the first knuckle ever visible and never more of the hand255 than that`, and the render shows most of the index finger and the hand to256 the knuckles. The shot was still anatomically clean, with no extra or257 warped fingers, and what kept it clean was the macro framing plus one258 simple action, not the limit. Write the framing order above; treat a "never259 more than X of a limb" clause as a wish, not a second line of defence.260- **Give the climax's payoff its own timed shot when that payoff is small and261 fast.** Measured once, on `60fbea52-b14b-4796-80bf-03afe0aa4fa0` (15s, 5262 shots, accepted): a five-second CLIMAX was written as `7-8.5s` the pipette263 lifts clear of the bottle, `8.5-10.5s` in slow motion a drop swells at the264 glass tip and falls, `10.5-12s` back at full speed `the drop lands on the265 surface of the oil in the bottle, one clean ring spreads out and dies266 against the glass`. The build-up rendered beautifully and **the landing267 never happened**: at 11.8s the drop is still hanging from the pipette, and268 at 12.25s the clip cuts to the hero frame. Five and a half seconds of269 climax bought a suspended drop and no event. A hanging, glowing droplet is270 exactly the kind of picture this model is good at, so it made that and271 skipped the fast physical beat at the end of it. The counter-measure is to272 **write the payoff as its own timestamped shot with its own share of the273 seconds**, compress the build-up to pay for it, and name the result as a274 required visible event (`the drop must be seen to leave the tip, land, and275 ring the surface`) instead of trailing it off the end of a longer shot.276 That is what the optional `PAYOFF` line in the template is for.277 ✅ **That counter-measure has now been run, and it worked** — the first278 time it was tried, on `cb6b7870`. The payoff got its own boundary at279 `11-13s`, separate from the CLIMAX before it, and its own required-event280 sentence: `A column of white steam must be seen to rise out of the open281 mouth of the bottle, climb into the warm key light where it glows, and282 drift off to the right. This is a required visible event: the steam has to283 leave the neck and travel up through the light within these two seconds,284 not merely hang above it.` The steam rises, glows and drifts, confirmed at285 t=12.5s — one of only two segments in that clip where anything physical286 happens at all, in a clip rejected for being too still. Two things to copy287 from the wording: the288 event has its **own timestamp**, and the clause naming what it must **not**289 do (`not merely hang above it`) describes the earlier failure exactly.290 One before-and-after pair on two different events, not a controlled test —291 but the fix is no longer a hypothesis.292- **A continuous state change can be one of the listed changes, if its293 direction is pinned.** A consistency lock normally reads "nothing changes294 except these things", and the things are discrete events. The same job also295 let one *continuous* drift through, and it rendered correctly: the bars of296 window light from the blinds were allowed to `only ever creep lower and297 warmer, never brighter, never higher, and never change direction` — named298 as the single permitted drift in a scene whose props were otherwise nailed299 down. Opening and closing frames confirm the bars moved, and moved the300 written way. One observation on one clip, but it means a dimming afternoon301 or a cooling set does not have to be broken into discrete steps to be302 controlled.303- **An extreme macro inside a homogeneous liquid is the weakest showcase shot304 on record here.** The same job's 2.1-second macro inside amber serum came305 back as a near-flat colour field with two soft refracted light bands:306 competent, and nothing to watch. The comparable shot into a carbonated307 drink carried itself on rising bubbles (`7ae7d49e`). One observation each308 way, so read it as a warning rather than a law — a liquid macro needs309 something inside the liquid that moves.310- **Do not ask the model for music.** The AUDIO slot above used to read311 `<upbeat | cinematic | minimal> instrumental; percussion hits synced to312 <the climax event>` — copied from cases 12 and 14, and **that is the shape313 that got refused here**. A prompt asking for "one sustained low cello note"314 and "a soft bell chime" came back `failed` with315 `error.code: output_moderation_failed` and the upstream message `the output316 audio may be related to copyright restrictions` (job317 `1ff72400-0f30-4be1-a417-f52d43955d09`, 2026-09-04). Nothing was billed.318 Keeping only recorded, diegetic sound and naming the music words in AVOID319 passed on the next run (`7ae7d49e-7eb9-4165-9d95-09cd525d53ed`); the next320 ad in the same batch wrote it that way from the start and was also clean321 (`ac927785-92ef-4e28-97b9-ff8172ec5554`). One refused sample, so the exact322 trigger is unknown — but a real ad's music is laid in afterwards anyway, so323 the cost of complying is nothing. Detail: "Asking for music can fail output324 moderation on copyright" in the shared file.325- **Slot pacing by tone**: Luxury runs 5s segments and slow moves (case 13);326 Playful runs 3s segments and cuts on the downbeat — the *cuts*, not the327 music the downbeat came from (cases 12, 14). ⚠️ Luxury's longer segments328 raise the stakes on the rule above rather than relaxing it: a 5-second beat329 with no event in it is 5 seconds of nothing, where a 3-second one is only330 3. If a Luxury beat has no physical event available, split it into two331 shorter shots instead of holding it.332- **Five beats in 15 seconds has now been run three times, and an uneven333 duration334 split is honoured closely.** `7ae7d49e`, `60fbea52` and `cb6b7870` are all335 15s, 5336 shots, 4 hard cuts, first frame attached, and all three kept every cut —337 `cb6b7870`'s four landed at 3.000 / 7.542 / 11.042 / 13.250s against338 written stamps of 3 / 8 / 11 / 13, so within half a second each way. ⚠️ And339 the third of those was **rejected**, which is the point worth carrying: the340 structural half of this template is now well verified and the structural341 half is not what decides whether an ad is watchable. See 7 in "Writing a342 good ad-creative prompt". On343 `60fbea52` the per-shot budget was planned 3 / 2 / 2 / 5 / 3 seconds and344 rendered 2.62 / 2.13 / 1.87 / 5.63 / 2.79 — every segment within 0.4s of345 its plan, including a deliberately lopsided split that gave the climax more346 than twice any other shot. So spending the seconds by function rather than347 evenly is a real instrument on this path, not a hope. (This bullet used to348 warn that four or five beats was past what had been verified; that warning349 was retired in 1.9.0, and this is what replaced it.)350351### Template B — 10 seconds or less, three beats352353Inferred from the 15–30s cases; **the gallery has no ad prompt of 10s or354less** (the shortest stated length is 20s, cases 15 and 27). No header355manifest — the vendor's formula order, subject and action first (shared356file, `The vendor's own formula (ByteDance first-party)`).357358```359<Product> <one action or event> on <backdrop>; <tone archetype>, <capture anchor>. [image1 provides the product exactly.]3600–3s: <a macro of one detail>; a hard cut lands as it completes its motion.3613–7s: <the physical event> in slow motion — <micro-detail>; rim light along the edge.3627–10s: product hero frame, centered; [the slogan "<text>" | the logo per image2 in the last second;] hold the final frame.363<light line>. <palette line>. No music; ambient/SFX only; no dialogue. No subtitles, no watermarks, no jitter.364```365366### Worked example — adapted from case 12 (translated), timestamps added367368The official fruit-biscuit ad, moved from its prose-ordered original into369Template A at 20 seconds. The original reads the strawberry variant from an370attached image and takes composition, motion and impact from six reference371clips; Ofox allows one video reference, so this version keeps only the372image. Word choice is ours; the beat order, the snap-in-slow-motion climax,373the word-by-word slogan and the scatter ending are the original's.374375Case 12's own audio direction is an upbeat instrumental with the cuts synced376to its downbeat. **That part is not carried over here** — this version377replaces the scored cue with recorded sound only, because asking this model378for music has failed output moderation on audio copyright here (unbilled;379see "4. No dialogue, no music — but a sound block" above, and "Asking for380music can fail output moderation on copyright" in the shared file). A score381can be laid over the delivered clip afterwards, which is where case 12's382instrumental would have to come from anyway — so, unlike the rest of this383adaptation, the AUDIO line and the beat-timed cues below are a deliberate384departure from the original, not a translation of it.385386```387FORMAT: 20 seconds, 16:9, hard cuts on the timestamps.388STYLE: bright, multicoloured snack commercial; clean, premium, strongly rhythmic; glossy high-speed capture.389COLOR PALETTE: strawberry red, mango yellow, blueberry violet and kiwi green on white; gold foil accents.390PRODUCT: rectangular fruit-filled biscuits in four flavours, each beside its fruit; image1 provides the strawberry variant's exact packaging and filling colour.391SCENE: white seamless backdrop, the fruit as the only props, saturated studio key light with a warm rim.3923930–3s HOOK — a single strawberry fills the frame in macro; the cut lands as it rotates to catch the key light.3943–9s SHOWCASE — the four biscuits and their fruits in a strict geometric array, orderly and bright; cut to a close-up of each variant.3959–13s CLIMAX — one biscuit snaps; the instant drops into slow motion, the fruit filling bursts open and crumbs fly; back to speed.39613–16s VARIATION — full tempo again, the biscuits in a horizontal row.39716–20s CLOSE — the words "One bite of crispness, a heart full of delight" enter word by word, one per quick cut; product freeze frame, centered; biscuits and fruit scatter outward.398399CAMERA: handheld energy on the snap, smooth static holds on the arrays, shallow depth of field throughout.400AUDIO: studio room tone; SFX: the biscuit's snap, crumbs scattering, fruit skin catching the light; no dialogue. No music.401CONSISTENCY: packaging colours, biscuit shape and filling colour identical in every shot.402AVOID: dialogue, subtitles, on-screen text other than the slogan, watermarks, jitter, music, score, instrumental, percussion.403```404405### UGC variant406407Five of the nine gallery ad prompts are creator-style clips (cases 23–27).408This skill's `description` does not claim them, but the request "make it409look like a real customer filmed it" lands here often enough that the slot410differences are worth having. The boundary is what carries the clip: a411creator holding, using and describing the product stays here; a scene412carried by the performance and the exchange between people is413`seedance-short-drama`, per this skill's `description`. Same skeleton as414Template A; these slots change:415416| Slot | Template A (cinematic) | UGC variant | Cases |417|---|---|---|---|418| STYLE | commercial + studio anchor | `realistic UGC-style … filmed on a smartphone`, `handheld`, `authentic, imperfect, no polished commercial look` | 24, 25, 27 |419| Device line (new) | — | where the phone is (`selfie mode` · `propped on a gym bench, slightly low angle` · `handheld`) plus its flaws: `autofocus hunting, exposure shifts, compression artifacts, mild sharpening` | 25, 27 |420| Anchors | product image | a person image **and** each product piece, locked item by item — real-person frames are refused on Seedance 2.5 image-to-video, so on Ofox this is a text-described person | 24 |421| HOOK | macro + a hard cut on the motion | the person enters the scene, or the first line to camera | 24, 27 |422| CLIMAX | physical event in slow motion | none — a flat action chain (unbox → turn → try on → catch the light) | 24 |423| Dialogue | none | one quoted line per beat (a review), or a single closing line that is `spontaneous, slightly breathless, not scripted` | 24, 25 |424| AUDIO | room tone + SFX, no music | an ambience list (`natural gym ambience only`, eight sounds named); no music or low music | 25, 26 |425| CLOSE | hero freeze + slogan | `holds them beside her face` + push in + fade · walks out of frame while `the camera continues recording for a moment` · `not promotional` | 24, 25, 26 |426| AVOID | text, jitter, drift | adds `cinematic color grading, beauty filters, artificial skin smoothing, dramatic slow motion, music, perfect lighting` — the opposite of this skill's default look | 25 |427| Aspect | 16:9 | 9:16 appears (case 27); 16:9 also (cases 24–26) | 27 |428429## Writing a good ad-creative prompt430431### Where the product goes432433Earlier versions of this skill said: product first, then camera, then mood.434The gallery does not support that order. All nine ad and UGC prompts open435with a style or format declaration — or, when a reference image is attached,436with the asset's anchor sentence, as cases 15 and 24 do — and place the437product second or third (case 14 runs `Style:` → `Character:` → `Subject:` →438`Setting:`). There is439no A/B evidence that either order renders the product better; there is440simply no collected prompt that leads with the product. So:441442- **15s and longer**: header manifest — FORMAT → STYLE / COLOR PALETTE →443 CHARACTER (if any) → PRODUCT → SCENE → timeline → CAMERA → AUDIO →444 CONSISTENCY / AVOID. Template A above; the shared file's `Prompt skeleton:445 header manifest, timeline, closing block`.446- **10s and shorter**: the vendor's formula order — subject and action first,447 then scene, style, camera, sound, in two to four sentences and no448 manifest. Template B above; the shared file's `The vendor's own formula449 (ByteDance first-party)`.450451### 1. The product, described precisely452453Shape, material, colour, finish, and any text on it verbatim in quotes.454Finish drives how light behaves on the surface (glass, brushed metal, matte455plastic), so name it (case 14's `Subject:` lists five ingredients; case 17456names the accent colour and every accessory).457458```459A tall clear glass perfume bottle with a gold cap, "NOCTURNE" embossed on the front, centered on a reflective black surface.460```461462### 2. Camera as a real shot, with a speed463464Concrete cinematography terms steer the model; "make it look cool" does not.465The full vocabulary is in the shared file's `Camera language`; the moves ads466reuse most are the **30-degree orbit**, the **slow push-in with shallow467depth of field**, the **rack focus from background to product** and the468**pull-back reveal** (cases 13, 15, 19, 24, 26). Ads also carry a speed469dimension the other scenarios rarely use — **slow-motion insert**, **speed470ramp**, **freeze**, **static hold**, **cut on the beat** — in the shared471file's `Pacing` (cases 12, 14, 15).472473```474The camera orbits the bottle 30 degrees; soft rim light along the glass edge; shallow depth of field, the background gently blurred. The cap turn drops into slow motion for one second.475```476477### 3. Brand tone, as an archetype plus a palette line478479One archetype word steers grade and pacing more reliably than a paragraph of480adjectives; a `Color palette:` line (case 14) pins the colours it implies.481482- **Luxury**: slow movement, dark or moody background, warm gold highlights,483 5s segments (cases 13, 15). ⚠️ **`slow movement` is a speed, not a484 quantity — read it as "the movement is slow", never as "there is little485 movement".** This line as written above is what a rejected flask ad turned486 into three separate sentences pinning the camera and the product still; see487 7 below for the measurement and the three repairs.488- **Playful/consumer**: bright saturated colours, faster movement, cuts on489 the beat, 3s segments (cases 12, 14).490- **Minimalist/tech**: clean white or grey background, precise steady camera,491 cool light.492493The negative list is where you name the tone you are *not* making — a Luxury494prompt excludes `cartoonish, oversaturated`; a UGC prompt excludes495`cinematic color grading` (case 25).496497### 4. No dialogue, no music — but a sound block498499Cinematic ad clips carry no speech (cases 12, 13, 15; case 14 allows one500vocal ad-lib), so say `no dialogue` to steer away from voice generation. Do501not stop there: write an AUDIO line, but write it as **room tone plus two or502three recorded sounds keyed to visible actions** — the cap breaking its seal,503the snap, a footfall in dust — and exclude music explicitly.504505**The music half of case 14's AUDIO line does not transfer to Ofox.** A506prompt asking for a cello note and a bell chime failed507`output_moderation_failed` with `the output audio may be related to508copyright restrictions` (job `1ff72400-0f30-4be1-a417-f52d43955d09`, not509billed); the same ad without music passed510(`7ae7d49e-7eb9-4165-9d95-09cd525d53ed`). Score goes in afterwards, in an511editor, the way it does on a real spot. Shape and phrases: the shared file's512`Dialogue and sound`, and `Asking for music can fail output moderation on513copyright` for the measurement.514515**A loudness written per shot is not honoured — write what each shot516contains, not how loud it is.** Measured on job517`60fbea52-b14b-4796-80bf-03afe0aa4fa0`, whose shot 2 read `Sound: room tone,518nothing else, very quiet` and came back as the loudest sustained passage in519the clip. Mean level per second: about -44.6 and -43.3 dB over the opening520shot, then -27.8, -24.3 and -27.0 dB across shot 2, back to roughly -37 to521-41 dB for the middle of the clip, and -47.7 then -54.4 dB in the last two522seconds. Two thirds of that AUDIO block did work: the loudest transients land523exactly where sound effects were written — peaks of -10.1 dB at 7-8s (the524pipette lifting) and -11.9 dB at 10-11s (the drop) — and the close thinned to525near silence as asked. What was ignored is the *relative* level between526shots. So **do not plan a clip whose effect depends on one shot being quieter527than its neighbours**; name each shot's sounds and leave the mix to an528editor, the same way the music goes on afterwards.529530**A sound written as `faint` can be honoured as inaudible, while the531placement instruction still works.** Measured on `cb6b7870`, whose AUDIO line532named three cues: the cap thread turning, `the short pneumatic tick of the533seal parting at 9s`, and `a faint hiss of steam at 11s`. The first two534landed clearly — the level rises off a -43 to -46 dB room-tone floor to535-30.9 dB at 7.7s and to a -21.7 dB peak across 8.8-9.2s, the loudest536sustained passage in the clip and exactly where the seal was written. The537third produced nothing measurable: at 11.5s the level *drops* to -41.6 dB and538stays near the floor for the whole PAYOFF, though the steam is plainly539visible on screen. So **timing a sound to a visible action works and an540intensity adjective is not a volume control** — do not hang a beat's effect541on a sound you have described as faint. Second observation of the transient542half, first of this nuance.543544### 5. Text on screen: lock it, or design it out545546Two measured facts pull in opposite directions, and both are usable — plus547one refinement of the second, from the run that tested it hardest.548549- **Text you want** — a brand name, a wordmark — is reliable if it exists on550 the attached first frame and the video only has to preserve it. Job551 `7ae7d49e` closed on a legible wordmark in the frame's own typeface,552 because the label was approved on the still first. Rendering the same text553 from a description is the classic failure; read the label at full size554 before spending on the clip. Confirmed a second time on `60fbea52`, where555 the label word `AURA` survived unaltered in every shot it appeared in556 **and** the same word rendered correctly as an end card in an empty patch557 of wall. What was written for it: the reference frame declared `the only558 authority on how this product looks`, the letterforms and the letter559 spacing named as invariants, and an explicit ban — `do not regenerate,560 redraw, restyle, re-letter, translate or reword the label`, and no second561 word, slogan, barcode or volume marking added to it.562- **Text you don't want** is best removed by the set, not by the negative563 list. Both ads in this batch produced **zero** invented signage, and the564 reason is that a near-black studio and an empty bright studio contain no565 surface lettering could sit on. Compare a job on a neon street whose AVOID566 list named signs, posters and characters in any language and still returned567 sign-like shapes (`41f87ac7`). Detail: `Unwanted text is designed out of568 the set, not forbidden in the list` in the shared file.569- **Where the set cannot be emptied, forbid the objects rather than the570 text.** The two studio ads are the easy case: nothing in a near-black or an571 empty bright studio can grow signage, so the rule was never really tested572 by them. Job `60fbea52` is the hard case and the strongest data point in573 this repo — a **desk**, where book spines, notebooks and loose paper are574 the classic failure mode, and a brief that wanted a real brand word legible575 in the same frame. It came576577…(truncated)