Skip to main content

Why Hooks Get IDs

A hook is the only part of a video that most people ever see. It is also the cheapest thing to change: re-cutting three seconds costs minutes, re-shooting an episode costs a production slot. So we treat the hook as a separately tracked variable. Every hook in this library has an ID. Every script names the hook IDs it uses. Every row in the performance log records which hook ID ran. After thirty or forty videos we stop guessing which hook family works for cannabis education on TikTok and start knowing.
This page is the TikTok-specific, ID’d, testable version of the broader hook patterns in social-content/references/trending-hooks.md. That file holds the writing theory. This page holds the tracked inventory.

The Rules

1.5 seconds

A complete idea must land, spoken and on screen, before the 1.5 second mark. No greeting, no logo, no wind-up.

Spoken and written

The hook appears as burned-in text and voiceover. Sound-off viewers are a large share of the feed and they decide just as fast.

Nine words or fewer

Longer hooks measurably underperform. If it does not fit in nine words, it is a setup, not a hook.

One idea

A hook that promises two things delivers neither. Pick the sharper one.

Hook Families

Eight families, each with an ID prefix. Scripts cite the ID; the log tracks the ID; the family is the unit we actually learn about.

Outcome-Led (OL)

This is the highest-performing hook category in the research — showing the result, transformation, or finished thing first averages the most views per clip. It was also our biggest gap: almost every hook we originally wrote was a claim or a question, and very few opened on the payoff.
The pattern: state the ending, then earn it. “Fewer than 1 in 200 strains hits 30%” is a data drop. “This man paid ninety dollars to feel exactly the same” is the same fact as an outcome — and it opens a loop the viewer needs closed.

Pattern Interrupt (PI)

Open on something visually or audibly unexpected — a cold open mid-scene, an unusual angle, a frozen frame, an object doing something it should not. Cheap for an animated character and almost entirely unused in our first draft.
A pattern interrupt still has to resolve inside 3 seconds. Confusion that does not pay off immediately reads as a mistake and viewers leave. The interrupt buys attention; the next beat has to spend it.

Bold Claim (BC)

Knowledge Gap (KG)

Problem Agitation (PA)

Data Drop (DD)

Every DD hook must trace to the Verified Data Sheet. If the number is not on that page or pulled live, the hook does not ship.

Story (ST)

Contrarian (CT)

Question (QN)

Comedy (CM)

Comedy hooks only work if Professor High plays them completely straight. The absurdity is the situation — a pineapple running a courtroom — not the delivery. He never acknowledges the bit.

Registry — The 100

The hooks below were written for The 100 and are registered here because the library is the registry, not an archive. They extend the same ten families above; nothing new was invented at the family level.
This section is generated from every script pack in the library by docs-site/scripts/sync-hook-library.py. Add a hook to a script, re-run the script, and it appears here. Hand-edits are overwritten.The script fails if one ID is used for two different hooks — including against the curated tables above — because that silently corrupts hook-level attribution in the performance log.
220 hooks, across 9 families. Every one is cited by at least one script and carries the same ID in the performance log.

Outcome-Led (OL) — 87 added

Pattern Interrupt (PI) — 25 added

Comedy (CM) — 42 added

Contrarian (CT) — 15 added

Question (QN) — 19 added

Problem Agitation (PA) — 11 added

Knowledge Gap (KG) — 7 added

Story (ST) — 8 added

Bold Claim (BC) — 6 added

How Hooks Get Assigned

Every script carries three hooks: A, B, and C, drawn from different families. Testing across families rather than across wordings is what makes results generalize. Two Bold Claims that differ by three words teach nothing; a Bold Claim against a Data Drop teaches which register this audience responds to.

Reading Hook Results

Hook performance is measured almost entirely by 3-second hold rate — the share of viewers still watching at 3 seconds.
A high hold rate with a low completion rate means the hook wrote a check the body did not cash. That is a script problem, not a hook problem — and it is the most common failure mode for data-led content.

Adding A Hook

  1. Write it in nine words or fewer.
  2. Assign the next ID in its family.
  3. If it contains a number, verify against the Verified Data Sheet and note the source.
  4. Add it here before it appears in a script — the library is the registry, not an archive.

Testing Framework

How hook IDs become decisions.

Verified Data

The source for every DD hook.

Script Room

The packs where these hooks run.