# Prompt laws

> All 26.


## STRATEGY

*STRATEGY — how to run the business. Not prompts.*

### One post carries an entire account

**PROVEN**

> Reach is lottery-shaped, not accumulative. Plan for a hit rate near 1 in 20 rather than steady growth: ship many DISTINCT concepts, judge a concept by its own first few posts, and never conclude an account is working or dead from its average.

**Evidence:** Measured across all 47 full catalogues, 2,578 posts, and independently reverified: the median account gets 44% of its ENTIRE lifetime reach from a single post, and 79% from its top three. 18 of 47 have one post worth more than half of everything they have ever done.

### Accounts hit within days or not at all

**PROVEN**

> A new product account should show something inside its first ~15 posts at 3-5 posts/day. If nothing moves by then the concept is wrong, and posting more of the same concept is the expensive way to find that out.

**Evidence:** 8 of 47 accounts crossed 1M inside 7 days of their first post, on a median of 13 posts at 26/week. The accounts that took over 90 days needed a median of 206 posts and had the MOST followers. Grinding is what a wrong concept looks like.

### Score products on the ceiling, never on the account's floor

**PROVEN**

> Rank a competitor's product on its single best post and how many of its videos cleared 1M. Ignore follower count and account median entirely.

**Evidence:** Over 160 videos, a video's plays correlate with the posting account's followers at rho +0.072 and with the account's median at rho +0.118 - both near zero, so neither predicts the next hit. The median is downstream of the hit, not upstream: the highest floors in the corpus belong to the youngest accounts (@paw_baths, 226,865 median at 11 posts / 3 days old). Never feed outlier multiples into a PRODUCT score - OM is plays divided by that same median (rho -0.66), so it silently reinstates what you just excluded and ranks a 425k-play product (@cuddlynestco, 1,059x off a 402 floor) above a 24.7M-play one (@pawlyprints, 1,196x). Keep OM for FORMAT comparisons only. Same product, both sides of the split: gun alarm clock 4.78M at @trigger.time2 (median 186,837) vs 342k at @thehoodalarm (median 5,645); dino costume at @fossilsnug (median 29,563) vs @cozyy.dinoo (median 4,153, but best post 10.5M

### Half your competitors are already AI

**PROVEN**

> Visible AI artifacts do not stop a video from working when the concept is strong. Do not burn rounds chasing a perfect frame on a weak concept. Fix the concept first, then the artifact.

**Evidence:** 77 of 160 winners are AI-generated or partly AI, across 32 of 47 accounts. Within-account, AI and real-filmed perform the same (0.88x, p=1.000, 12 accounts). One AI video did 5.4M at 343x with four visible artifacts: hand merging into a cup, ladder legs merging into the floor, fan blades clipping the body.

### Handmade is the proof layer, never the hook

*hunch*

> Lead with an identity or character the viewer already loves; handmade is only the proof it is real. Never let 'I made this' be the hook.

**Evidence:** CONTRADICTS the house line that the handmade belief is what stops the scroll. Handmade converts attention fine - 17 videos, median OM 34.6 vs 23.5 for the other 143, account-clustered 42.1 vs 58.3, p=0.60, i.e. no difference - but it has never produced a mega-hit here. The 5-6 handmade-first accounts have 199-211 posts fully harvested and their single best post EVER clusters in one narrow band: 2,474,129 / 1,791,293 / 1,176,932 / 1,142,509 / 1,095,015. 0 of 6 cleared 2.5M vs 11 of 25 size-matched non-handmade accounts. Every handmade video in the corpus that cleared 1M carried a SECOND, non-handmade hook: licensed IP (Harry Potter resin lamps, OM 440 and 271), or a horror-villain identity object (horror rugs 2.47M, knife blocks OM 173 and 171). The handmade-only videos with no character hook are the bottom of the bucket: culture totes OM 1.7 and 11, grille masks 7.5, and the worst video 

### A CTA is a funnel choice, not a reach lever

*hunch*

> Comment-for-link probably costs reach and definitely is not free. Prefer no CTA on a hero video whose job is reach, and carry the CTA on the split tests that follow it off the same clip library.

**Evidence:** Corpus-wide, comment-for-link posts median 458k plays against 816k for no CTA. But within-account (8 accounts shipped both) the gap is 0.19x at p=0.289 - directionally the same, nowhere near significant. Treat as a real risk, not a measured cost.

### Never grade a hook line on one post

*hunch*

> Judge a hook line only on 3+ posts of comparable age. Never promote or kill a line off a single post.

**Evidence:** Across the 7 (account, hook-line) families with 3+ posts - 34 videos from 7 of the 46 accounts - the SAME line, on the SAME account, for the SAME product still spans 6.3x to 25x in plays after controlling for post age in a 7-60 day window. Median spread 6.7x, down from the uncontrolled 11x because the headline families were age-ordered (Spearman +0.80 to +1.00) and included posts as young as 0-2 days: @fossilsnug 207x (15,112,984 vs 73,456), @grinride 58x, @minifroggieco 25x, @ducksilentofficial 11.5x, @rileyvoss13 7.1x, @sarahs.pottery01 6.1x, @swirlcup.cream 3.5x. Hook-family membership explains only ~18% of log-play variance (pooled within-family SD 0.568 vs corpus 0.627). Do NOT claim within-hook variance exceeds between-archetype variance - every age-windowed family is TIGHTER than random same-size corpus draws (6.3x vs 10.0x at n=3, 25.0x vs 65.6x at n=9), and with 7 families the b

### Ship on hook strength, not on artifact hunting

*hunch*

> Do not scrap a batch over minor AI tells. Only rendered text, hands and morphing carry a measured cost - fix those three, then post.

**Evidence:** NUANCES the 'no AI-obvious aesthetics' rule: AI-ness itself is not a measured penalty here, specific breakages are. Corpus-wide AI looks worse (AI-touched n=77 / 32 accounts, median 535,634 plays and OM 22.2, vs real n=83 / 31 accounts, 902,209 and 30.0) but that is account selection: at account level AI leads on median OM 44.0 vs 36.7, the per-video difference is not significant (permutation p=0.44 on OM, p=0.12 on plays), and within the 16 accounts that ran both lanes AI beat real in 7 (median ratio 0.78, sign test p~1.0); coding partial-AI as real instead gives 12 accounts, AI wins 6, median ratio 1.01. Either way a coin flip. AI is also not less engaging: 330 comments per million vs 245, engagement rate 1.99% vs 1.84%. The #1 AI video in the corpus (@chopperfan.ops, 5,457,776 plays, OM 343) carries four named breakages including a hand merging into a coffee cup and fan blades clippin

### Plan for a 5% hit rate and one post carrying it

*hunch*

> Expect ~5% of posts to clear 1M and one post to carry a third of lifetime reach. Never kill a product or a format on a handful of posts.

**Evidence:** 2,578 real posts across all 47 full catalogues - accounts that had ALREADY produced a winner. 5.2% cleared 1M (median per-account rate 5.83%; 9 of the 47 never cleared it once), 8.0% cleared 500k, 18.3% cleared 100k, and the median post from a proven winning account earns 10,046 plays. Half of everything (49.9%) is under 10,000 plays and 9.3% is under 1,000. Concentration, using only the 28 accounts with a real catalogue of 30+ posts: the single best post is ~36% of lifetime plays and the top 3 are ~70-81%. The widely-quoted 44%/79%/96% figures are inflated by 8 small-catalogue accounts (median top-1 64%) and by 3 accounts where top-10 is 100% by arithmetic. And the monster post does NOT level you up: across the 27 accounts testable on both sides of their peak, median plays after the peak are only 1.07x those before. Because these 47 accounts were selected for having produced a hit, 5.2%


## STORYBOARD

*STORYBOARD — the shape of a video. Fed to the concept writer.*

### Every video carries an on-screen hook line

**PROVEN**

> Every concept must have an on-screen hook line, written verbatim in the storyboard as caption text. It is overlaid at edit time and must NEVER be described inside an image or video prompt.

**Evidence:** 159 of 160 winners, and 47 of 47 accounts. The single most universal fact in the corpus. It is a conformity rule, not a reach lever: content without it does not look native here.

### Runtime 8 to 16 seconds, target 12

**PROVEN**

> Total runtime 8-16 seconds. Default to 12. Do not write a storyboard whose beat seconds sum past 16.

**Evidence:** 130 of 160 winners fall in 8-16s across 44 of 47 accounts; median is 12.0s. Within-account testing could not show that longer or shorter changes reach, so treat this as the native length, not as an optimum.

### Hook beat runs 3.0-3.5s, then stop tuning it

**PROVEN**

> First beat is the hook, 3.0-3.5s, or 4-5s when there is no build. Never trade hook content for hook length; duration is not a lever.

**Evidence:** Median hook beat is 3.28s = 26% of runtime, first beat is the hook in 160/160 videos. Raw buckets look like longer wins (median OM 9.8 sub-2s vs 52.5 at 3-4s vs 69.1 at 5s+) but that is account size: longer hooks come from smaller accounts (r with log followers -0.19) and OM is plays over the account's own median. Within the 25 accounts with 3+ videos (130 videos) every bucket from sub-2s to 5s+ sits inside 0.11 log10 of the others, within-account r = -0.05 (LOO -0.17..+0.03). Against raw plays the effect reverses (r -0.07). Top-20 by OM run hooks of 1.5s to 7.0s. Of the 10 accounts that posted both a sub-3s and a 4s+ hook, 7 did better SHORTER (median -0.42 log10), so if forced to move, move shorter. Hook length tracks total duration (r +0.42): 3.3s belongs in a 12-16s video, 2.5-3s in an 8s one.

### A cut roughly every 2 seconds, 4 to 7 beats

**PROVEN**

> Storyboards run 4-7 beats with roughly 2 seconds of screen time each. A beat longer than 3 seconds needs a reason; a 5-second static beat is the AI tell.

**Evidence:** Median 6 beats at 1.9s per shot across the 160, p25-p75 = 1.6-2.5s. Measured from real ffmpeg cut detection, not estimated.

### Music and text, not talking

**PROVEN**

> Default to trending music with on-screen text carrying the story. Do not write dialogue or a voiceover script unless the concept specifically calls for one.

**Evidence:** 147 of 160 winners have no spoken voiceover, across 46 of 47 accounts. 126 of 160 ride trending music.

### One build shot, never two or three

*hunch*

> Use exactly one build beat, or cut the build entirely. Never storyboard two or three ordinary build shots - the worst structure in the corpus.

**Evidence:** Build-beat count vs median outlier multiple: 1 build 47.6 (n=40, 24 accounts), 0 builds 25.6 (n=63, 23 accounts), 4+ builds 28.2 (n=21, 10 accounts), 2-3 builds 9.2 (n=36, 20 accounts). Within-account log10 delta: 4+ +0.14, 0 builds +0.09, 1 build 0.00, 2-3 builds -0.17 - the only negative bucket, and 12 of the 15 accounts that posted both formats underperformed their own baseline on the 2-3-build video (p=0.035). It survives restricting to wow products (10.9 vs 26.7 / 44.7 / 21.9). Median per-shot build length is 1.48s there, so the dead zone is specifically two or three normal-length build shots totalling 3-4s. Permutation test 2-3 vs everything else is 9.2 vs 32.3 at p=0.109, directional not conclusive - hence hunch. Do NOT read this as 'use a 4+ montage' for wow: 14 of the 21 4+ videos are handmade from a 6-account pool, and within wow only, 4+ falls to 21.9 (n=7, 5 accounts), below 

### Write for the laugh, not the satisfaction

*hunch*

> The payoff beat must land a laugh: a prank, a flinch, an absurd sight in a mundane room. Satisfying, curious or shocking alone is not enough.

**Evidence:** NEW, computed here. Videos the analyser tagged mechanism=humour are n=47 across 16 accounts, median 1,088,605 plays vs a corpus median of 639,973. Within account - the metric that controls for account size - humour sits +0.341 log10 (2.2x) above the same account's own baseline, and it wins in 8 of the 9 accounts that posted both humour and non-humour videos (@slashersnugs +0.52, @carwake.co +0.47, @calmtails.co +0.42, @grinride +0.40, @skeletonkittyco +0.34, @floatiekicks +0.27, @trigger.time2 +0.15, @minifroggieco +0.13; only @starwarsiesadults -0.37). Leave-one-account-out keeps the median between +0.306 and +0.369. The losers by the same within-account measure: shock -0.397 (0 of 5 accounts beat their baseline, n=13), transformation -0.396 (1 of 4), curiosity_gap -0.131 (4 of 11, n=26 and the lowest raw median plays at 292,476). Caveat: virality_mechanism was labelled by the same visi

### A long result tail is free; a buildless one is not

*hunch*

> Four to seven trailing result beats cost nothing, so ship them. Never pair a long result tail with zero build beats.

**Evidence:** Grouping all 160 by trailing result+proof beats: short tail 0-1 = 69 videos / 31 accounts, median OM 25.6; long tail 4+ = 52 videos / 18 accounts, median OM 26.7. Ratio 1.04x, and it stays null under a 20,000-draw account-clustered permutation test (p=0.51 on the clustered version, p=0.91 unclustered). Within-account it is equally flat: tail 4-5 +0.07, tail 0-1 +0.01, tail 2-3 -0.02, tail 6+ -0.07 log10. This is an UNDERPOWERED null, not proof - tail length is a fixed account habit (only 8 of 47 accounts ever ship both shapes) and the account-clustered 95% CI runs 0.32x to 3.87x. The one cell that is genuinely bad: 4+ result beats AND <=1 build beat runs median OM 19.4 (n=37, 11 accounts, 8 of them from minifroggieco alone) vs 43.0 for short-tail/low-build (n=46, 20 accounts) - 0.45x, the weakest cell in the whole table. So stop rejecting a five-beat result tail when the build is intact,

### Open with POV; retire 'DON'T let a X see this'

*hunch*

> Open the hook line with POV: plus a specific identity. Retire the worn 'DON'T let a X see this' and 'babe stop buying stupid stuff' framings.

**Evidence:** NEW, computed here, and deliberately low confidence. Hooks whose line starts with 'POV:' are n=28 across 13 accounts, median 1,552,882 plays vs 525,278 for the other 132 - a 2.96x gap that survives dropping either heavy contributor (1,318,288 without @pawlyprints, 1,475,554 without @carwake.co). BUT the account-controlled metric is flat: median OM 25.5 vs 24.5, and the within-account advantage (+0.28 log10, 6 of 8 accounts) is carried by @pawlyprints at +1.96, which is the 50.7M and 24.7M slipper videos. So POV is a raw-reach signal that may just be account size - treat it as a default, not a proof. The two tired families are mildly negative on the account-controlled metric: reverse-psychology / fake-regret hooks (DON'T let, do not show, I regret buying) are n=43 / 16 accounts at median OM 18.2 vs 28.2, within-account -0.157 log10 and winning in only 4 of 11 accounts; partner-conflict ho


## PROMPT

*PROMPT — compiled into every image/video prompt. Nothing else ever is.*

### Handheld, never locked off, on every clip

**PROVEN** · engine: `seedance`

> handheld phone video with small organic sway and micro-corrections, as if a real person is holding it

**Evidence:** 110 of 160 winners are handheld across 43 of 47 accounts. Confirms the locked 2026-07-24 correction: a static clip reads as an animated photo, which is the AI tell.

### Never let the model render text in-frame

*hunch*

> No box art, signage, posters, price labels, shirt graphics or embroidered logos in frame. Every word gets burned in the editor, never rendered.

**Evidence:** Garbled text is the single most-cited AI giveaway in the corpus: 'text' appears in ai_evidence for 42 of the 77 AI/partial videos and 'gibberish' explicitly in 22, ahead of morphing (36/77), physics (28/77), hands (23/77) and faces (20/77). The 35 videos (22 accounts) where warped or gibberish text was named sit at median 348,598 plays vs 695,983 for the other 42 (24 accounts) - a 2.0x plays penalty, permutation p=0.03. Weakened because outlier multiples are NOT significantly different (19.4 vs 26.1, p=0.26) and among the 14 accounts that posted both, the garbled video loses only 8 of 14 times. Named failures: @meowtors 'gibberish text embroidered on the silk cover', @skeletonkittyco 'nonsensical CATSAUR box art', @paw_baths store signs reading 'Traling Treats', @carwake.co garbled poster text. Note the limit: the corpus never tests LEGIBLE rendered text, so this forbids ASKING for text,

### In AI shots, make a live animal the hero

*hunch*

> Put a live cat, dog, puppy or kitten at the centre of the AI shot. A costume or an object alone does not substitute for a real animal.

**Evidence:** Inside AI-generated videos only: those whose beats feature a cat, dog, puppy, kitten or pet are n=11 across 7 accounts, median 1,408,423 plays and median outlier multiple 117.4, versus n=43 across 18 accounts at 455,962 plays and 14.9 without one - a 7.9x multiple gap. It holds at account level (median-of-account-medians 114.7 vs 22.8; 6 of the 7 animal accounts above, @leos.rugs at 8.3 the exception) and survives dropping the 5-video skeletonkittyco cluster (n=6 / 6 accounts, 83.6). Crucially it is AI-SPECIFIC: on real footage animal videos are slightly WORSE (n=20 / 9 accounts, OM 23.0 vs 38.6 for n=63 / 23 accounts), so this is not 'animals win', it is 'animals are what the generator can fake convincingly'. Caveat that keeps it a hunch: AI-animal accounts are smaller (5,471 vs 15,099 median followers), which inflates the multiple though not the raw plays. Do NOT extend to costume or o


## CAPTION

*CAPTION — the posted caption only. NEVER goes in a generation prompt.*

### Five hashtags maximum, four is the house style

**PROVEN**

> Never write more than 5 hashtags. Four is the default. Zero is also proven and fine. Caption layer only.

**Evidence:** Median 4, p75 5, and nothing in the 160 winners or the 2,594-post catalogues behind them exceeds 5-6. Verified flat on performance from 0 to 5 tags, so this is conformity: 6+ tags marks a post as not-from-here.

### The comment keyword is one word, in quotes

**PROVEN**

> Comment CTA format: one word only, wrapped in quotes. Vary the frame across the three proven families - want ('Comment "X" if you want one!'), link ('Comment "X" for the link'), need ('Comment "X" if you need this') - and keep it in the caption, never as on-screen text in a generated frame.

**Evidence:** 61 of 61 comment-for-link captions in the corpus use a single word, across 26 of 47 accounts, no exceptions. Either the product noun (Dino, HELI, paw, GTR) or a want-word (NEED, LOVE, BEAST). 20 of 61 are all-caps.

### One line of caption, about 60 characters

**PROVEN**

> One line of human copy, roughly 40-90 characters, plus up to 5 hashtags. Never multi-paragraph prose. Never truncate a caption to hit a count: if it is too long, regenerate it, because blind truncation deletes the CTA.

**Evidence:** Median caption is 60 chars, p25-p75 = 41-87. Length showed no reliable within-account effect, so this is house style rather than an optimum. The hard end is the top: captions past ~250 chars collapse.

### Comment-for-link buys comments and costs reach

*hunch*

> Default to no caption CTA. Add 'comment X for the link' only on posts meant to sell, never on posts meant to reach.

**Evidence:** NEW, computed here. cta_type=comment_for_link is 68 videos across 31 accounts, median 458,043 plays and median OM 14.1. No CTA at all is 63 videos across 20 accounts, median 815,672 plays and median OM 52.5; link_in_bio is 19 videos / 14 accounts at 1,108,952 plays. Within the 13 accounts that posted both, the comment-bait videos sit 0.593 log10 BELOW their own baseline - about a 4x hit, the largest within-account effect I found anywhere in this corpus - and they lose in 10 of 13 accounts (binomial p=0.046); leave-one-account-out keeps the median between -0.638 and -0.537. Biggest losers @pawlyprints -1.96, @fossilsnug -1.75, @carwake.co -1.24. It does deliver what it asks for: median 362 comments per million plays vs 165 with no CTA and 193 for link-in-bio, so this is a genuine trade, not a free win. Held at hunch because reverse causality is live - an account may only tag its sell-post

### Short caption, five hashtags, one emoji

*hunch*

> Caption under 90 characters of body text, 0-5 hashtags, one or two emoji. Line breaks are fine; never write a paragraph.

**Evidence:** Caption length is the only part that survives the account confound: across the 8 accounts with 5+ videos each, caption length correlates negatively with plays in 6 of 8 (Spearman -1.00, -0.79, -0.51, -0.36, -0.22, -0.20, -0.17; one positive at +0.43). The target is ~90 chars, not 60 - the 20 highest-OM videos have a median caption of 87.5 chars and the 81-140 char bucket has the highest median OM of the main buckets (n=33, OM 73.2, 16 accounts). Do NOT force one line: multi-line captions (n=52, 16 accounts) beat single-line on median plays, 768,748 vs 508,771. Hashtags: 0 tags n=30, 1 n=20, 2 n=7, 3 n=21, 4 n=30, 5 n=52 - the 5-tag bucket is both the largest and the best-supported (24 distinct accounts) with the highest median OM at 37.5, so 5 is safe rather than risky. But the 'never more than 5' ceiling is UNTESTED: all 160 hand-picked videos are already <=5, so there is no 6+ group to

