Skip to main content

The Problem This Solves

AI-generated video is cheap enough to post daily. It is also drift-prone: the same prompt on two different days returns a slightly different character, and an audience notices a mascot whose face changes between episodes long before they can articulate why the account feels untrustworthy. Character consistency is not a polish item. For a mascot-led account it is the brand. This page is the contract that keeps Professor High the same pineapple in episode 100 as in episode 1.
This spec is written for Cantina, but the structure — locked character block, shot grammar, negative prompt, continuity checklist — is tool-portable. If we change generators, port the blocks rather than rewriting from scratch.

The Cantina Prompt Block

Every script in every pack ends with a Cantina Prompt — a fenced block you copy whole and paste straight into Cantina. No assembly, no cross-referencing other pages. Professor High already exists in Cantina with his image, voice, personality, and tone attached. So the prompt block deliberately does not re-describe him. Re-describing a character that is already loaded is the single most common way to make him drift — the app blends your fresh description against the saved one and you get a slightly different pineapple. What the prompt block carries instead:
The DO NOT block is repeated in all 50 prompts rather than referenced once. Repetition costs nothing and a moderation strike costs the account.

The Template

Fill every [DATA: ...] token in the script before pasting. A prompt with an unfilled token generates a video with a placeholder spoken aloud.

Rule Zero: The Character Is Generated Once

Professor High is built once as a persistent character and reused. He is not re-described per video — re-describing a saved character makes the generator blend your new wording against the stored one, and that is what makes his face drift between episodes.

Character Config — the canonical spec

The full character-lock block, negative prompt, expression set, voice spec, and hard constraints live on one page. Paste the setup block once to create or repair professor-high-v1, then never again.
1

Build the character once

Paste the Cantina setup block into Cantina. Save it as professor-high-v1.
2

Archive a reference set

Generate stills of all five expressions — neutral, excited, skeptical, disappointed, deadpan — at identical framing. These are the continuity ground truth for every future check.
3

Reuse the saved character for every shot

The per-script prompt blocks below assume he is already loaded. They carry the script, tone, and environment — never his description.
4

Version deliberately

To change the look, bump to professor-high-v2 and re-shoot one full episode as a side-by-side test. Never mix versions inside a single episode.
Never put consumption on camera. No smoking, no lit product, no paraphernalia in any Professor High shot, in any show. It is a TikTok moderation risk that can cost the whole account, and it contradicts the positioning — he studies cannabis, he does not use it. The negative prompt enforces this at generation time.

Rule Zero Applies To One Character Only

Rule Zero locks Professor High. It does not lock anyone else, and every prompt in the library now says so explicitly in its CHARACTERS block:
Supporting characters are roles, not assets. Cast them from Cantina’s existing roster, build your own, or change your mind next month. The brief is what has to hold, not the specific character.

The Supporting Cast — briefs and swap rules

Nine roles with paste-ready casting briefs, the four swap rules, and the casting order that unlocks the most episodes per decision.
The one hard constraint on recasting: never inside a pack. A pack runs 5-10 reps of one format so a median exists. Change the cast at rep 4 and the pack stops measuring the format and starts measuring the recast, with no way to separate them afterwards. Cast once per pack, write it down, change freely between packs.

The Two Grammars

Comedy and education are different visual languages on this platform, and mixing them is what the first draft got wrong.
Education grammar is the suppressed grammar. The largest cannabis-science educator on the platform watched videos that used to do 200K fall to 2K. Comedy grammar is not suppressed. When in doubt, shoot comedy grammar and let the fact ride inside it.

Citation cards — education only

Both top cannabis educators put the actual paper on screen: Smith et al., PLOS One 2021, Gowin JL et al., JAMA Netw Open 2025. It converts an assertion into evidence in a single frame, and we do it nowhere. Any education script making a research claim now carries a citation card in the lower third for the duration of that claim. Format: Author et al., Journal Year. Small, persistent, never animated.

Shot Prompt Grammar

Every SHOT cell in a script pack is written in the same four-part order. Keep the order; the generator weights early tokens more heavily.
A complete shot cell:

Recurring Visual Assets

Build these once, reuse forever. Consistency of the furniture matters as much as consistency of the character.

Voice Direction

Word budgets, at pace, after leaving room for beats:
Scripts in this section are written to those budgets. If a script runs long in production, cut a clause from the setup — never from the payoff or the CTA.

Caption Burn-In

TikTok’s own auto-captions are inconsistent and ugly. Burn ours in.
  • Bold sans-serif, white, heavy stroke or drop shadow for legibility on any background.
  • Maximum six words per line, maximum two lines at a time.
  • Key terms — terpene names, percentages, strain names — highlighted in pineapple yellow (#D98E04).
  • Positioned in the lower third, clear of the TikTok UI safe zone: keep 250px clear at the bottom and 120px at the top of a 1080x1920 frame.
  • Captions appear word-synced, not sentence-dumped. Synced captions measurably hold retention better.

Audio

Output Spec

File Naming

Every render is named for its tracking row. This is what makes the performance log joinable to the actual files.
Renders live in the OpenMontage projects/ directory, not in this repository. Only scripts, logs, and specs are committed here.

Continuity Checklist

Run before any episode ships. Two minutes here prevents a visibly broken character on a video that goes big.
1

AI label applied

The AIGC / “AI-generated” toggle is on before posting. Properly labeled AI carries no algorithmic penalty; undisclosed synthetic content runs warning → 7-day restriction → 30-day suspension → permanent ban. This is non-negotiable and it is the first check for a reason.
2

Compliance lane

No consumption, no product, no paraphernalia in frame. Nothing that reads as promoting or glorifying use. The video is informative or observational. See The Compliance Lane.
3

Character match

Compare a frame against the archived reference stills. Crown shape, eye spacing, coat collar. If it reads as a different pineapple, regenerate.
4

Environment match

Lab background present and dark. No kitchen, no void, no drift into a new room.
5

Safe zones clear

Nothing important within 250px of the bottom or 120px of the top.
6

Data tokens filled

Zero [DATA: ...] tokens surviving in the burned-in text or the voiceover.
7

Claim check

No medical claim. No unverified number. No consumption on camera. Cross-check against the Verified Data Sheet.
8

Hook timing

A complete idea, spoken and on screen, before 1.5 seconds.

Draft-First Guardrail

Cantina renders drafts. Nothing auto-posts. Every video clears human review before it reaches a platform — the same rule the Video Production Pipeline applies to every other render path.

Script Room

The packs that consume this spec.

Verified Data

The numbers allowed on camera.

Video Pipeline

Render paths and draft-first guardrails.