What does Short Video Copywriting do?
One-sentence topic → A set of scripts ready to shoot.
This skill is an engine + presets structure: the methodology is here, the styles are in presets/, and the current selection is in profile.md.
0. Read These Two Things First
profile.md— current selection (platform / category / tone / duration / density / person / cta / banned)- Go to the corresponding preset file and read only the section it selects, not the whole file
| profile field | Go read this | Read only this section |
|---|---|---|
platform | presets/platforms.md | Matching section header (Douyin / Xiaohongshu / WeChat Video / Bilibili / Generic) |
category | presets/categories.md | Matching section header |
tone | presets/tones.md | Matching section header |
| hooks | presets/hooks.md | Pick 1–2 types based on topic |
Values in profile take precedence over everything in this file; whatever the user says on the spot takes precedence.
1. Default Workflow: Output First, Then Collect Parameters
When the user gives a one-sentence topic, do not start with a long list of questions. First use the current profile (if none, use: Generic / Clear and Direct / 30 seconds) to generate a complete draft so they can see something, then ask.
Step 1: Generate a Generic Draft
All four components: voiceover + storyboard + publish copy. Time calculated using presets/timing.md.
Start with a note: "This is the generic version, not platform-specific" — otherwise the user might think this is the final version.
Step 2: Four Fixed Questions
Ask only these four, in order, each with options. Do not add extra questions.
1. Platform: Douyin / Xiaohongshu / WeChat Video / Bilibili / Stick with generic? — Determines pace, speech rate, CTA
2. Tone: Sharp / Friendly / Humorous / Reserved Professional / Keep it clear and direct? — Determines sentence length, verbs, distance from the audience
3. Structure: Three-part voiceover / Educational (conclusion first + mechanism) / Story (experience + takeaway) / Skit (conflict + twist)? — Determines paragraph order and proportions
4. Twist & Hooks: None / A counter-intuitive twist in the middle / A reversal at the end / Double hook (stop in the first 3 seconds + keep viewers at 8 seconds)? — Determines completion rate design
After asking, add: "Just reply with numbers like 1/2/3, or tell me in one sentence—I'll rewrite based on that."
Step 3: Rewrite
- Only modify the affected paragraphs; keep parts the user approved.
- Start with a line explaining what changed:
Platform→Douyin, Tone→Sharp, Duration 30→15 seconds, added a counter-intuitive twist in the middle - After rewriting, recalculate the time; do not reuse the old timing.
Step 4: Should We Remember This?
If the user says "Always do this", "Remember", "Set as default" → Follow §5 to write profile.md and report back.
Exceptions
| Situation | Handling |
|---|---|
| User specifies platform/tone upfront | Skip the questionnaire, go straight to a targeted draft |
| User says "Show me the generic version" | Only output the generic draft, no questions |
| User wants only hooks, not the full text | Only offer 5 candidate hooks and let them pick |
1b. What's Missing in a One-Sentence Topic
| Missing | How to handle |
|---|---|
| Target audience | Infer the most likely audience from the topic, state your assumption explicitly |
| Desired action | Use the profile's cta |
| Length | Use the profile's duration |
| Platform | Use the profile's platform; if none, use "Generic" |
During the generic draft phase, only fill in the most critical assumption. Do not fire a barrage of questions. Save those for the fixed four questions in Step 2.
2. Assembly: How the Four Presets Stack
Order must not be changed; each layer solves a different problem:
platform → Determines pace, speech rate, CTA (outer form)
category → Determines paragraph order and proportions (skeleton)
tone → Determines sentence length, verbs, distance (skin)
hooks → Determines the first 3 seconds (door)
Conflict priority: platform > category > tone. For example, Xiaohongshu wants "slow," but product promotion wants "dense"; take a middle value and state the trade-off at the end.
Common Combinations (Recommended for Users)
| Goal | Combination |
|---|---|
| Douyin viral feel | Douyin + Educational knowledge + Sharp + Counter-intuitive hook |
| Xiaohongshu product seeding | Xiaohongshu + Product promotion + Friendly + Pain point scene |
| WeChat Video trust | WeChat Video + Personal brand + Reserved Professional + Story presence |
| Bilibili hardcore | Bilibili + Educational knowledge + Reserved Professional + Specific numbers |
| Safest for beginners | Generic + Voiceover + Clear and direct + Counter-intuitive |
3. Output: Default is Only the Script
Don't pile on a ton of stuff right away. By default, only output two things: the script and the publish copy. Ask before giving the storyboard.
3.1 Script (Default Deliverable—the Only Mandatory Piece)
A timed voiceover script in three columns:
| Time | Word Count | Lines |
|---|---|---|
| 0.0–1.9s | 6 | The more you rest, the more tired you get. |
- Time calculated using
presets/timing.md, not estimated by hand; directly runnode scripts/timing.mjs --rate <speech_rate> "line 1" "line 2" - Punctuation and sentence structure strictly follow
presets/punctuation.md: full-width punctuation, single sentence ≤ 15 characters, at most 2 commas per sentence - End time must be within 0.5 seconds of the target duration. If exceeded, cut words—do not rely on speaking faster.
- When delivering, do not attach JSON or a storyboard unless the user asks for it.
3.2 Publish Copy (Default Deliverable)
Title (≤ 20 characters) + 3–5 hashtags + one comment section call-to-action sentence.
3.3 Must Ask After Delivery
After delivering the script, immediately ask:
Do you need a storyboard based on this script? (What visuals, on-screen text, and timing for each line?)
- User says yes → Output 3.4
- User says no or doesn't respond → Stop here
- Do not proactively hand out
content.json; do not ask "Do you want to produce the video?"
3.4 Storyboard (Only When User Explicitly Requests It)
| # | Time | Visual | On-Screen Text | Notes |
|---|
- Time column must exactly copy the time from 3.1—do not allocate independently.
- One line of dialogue = one shot; if a line is split into two, write
1a/1b, and their sum must equal the original line. - Merge shots shorter than 1.2 seconds; split shots longer than 6 seconds.
- Visual column must describe something that can actually be filmed, not "atmospheric b-roll."
3.5 Effects Check (Only When User Explicitly Wants to Produce the Video)
Only when the user says "I want to produce it" or "Give me a draft":
cd <video-studio>
.\check-effects.ps1 -Human
| Result | Action |
|---|---|
| Script doesn't exist | User hasn't installed the video pipeline → skip, do not treat as an error |
installed=true | Continue |
installed=false | Warn first, then ask—don't generate silently |
You haven't generated the effects asset library yet (9 files, about 196 MB). Do you want to generate it now? About 2.5 minutes.
Do not run generation unless the user agrees.
3.6 Things Explicitly Not Done
- Do not output
content.json/scenes: that's the video side's structure; the copywriting side doesn't need to carry it. - Do not proactively offer a storyboard; do not proactively suggest "Do you want to produce the video?"
- Do not decide the platform and tone for the user—that's in
profile.md.
4. Self-Check
- First 3 seconds are a hook, not an introduction
- Hook belongs to a clear category in
hooks.md, not mixed - There's a sentence that can be screenshot and shared standalone
- At least one specific number, and it's fulfilled in the body text
- Each line ≤ 15 characters; read through at the given speech rate without exceeding time
- Single tone throughout, no mid-text mood change
- Structure matches the selected category's paragraph proportions
- No absolute language (most, first, cure, one hundred percent)
- No efficacy promises for medical, financial, or educational content
- Any word in
banned? If so, rewrite that line - All punctuation is full-width, no half-width
,.!? - Consistent quotation marks («» or “”), ellipsis is
……, em dash is—— - No long sentences with trailing commas; each sentence ≤ 15 characters
- Consistent number formatting (15 seconds / 73%), spaces around English words
5. How to Handle Feedback
Change the presets, not the engine.
| User says | Change this |
|---|---|
| Too long / Too short | duration |
| Too formal / Too aggressive / Too cheesy | tone |
| Doesn't sound like Xiaohongshu / sounds like Douyin | platform |
| Too information-dense / Too empty | density |
| Wrong structure | category |
| Bad opening | Change hook category |
| Don't use this word | banned |
Temporary vs Permanent Changes (Important)
| User says | What you do | Save? |
|---|---|---|
| "Rewrite this version for Xiaohongshu" | Just rewrite this one version with the new parameters | ❌ Don't write |
| "Always use Xiaohongshu" / "Remember" / "Set as default" | Must use the editing tool to change profile.md | ✅ Write |
| "Too aggressive" / "Too cheesy" | Judge temporary or long-term, ask or treat as long-term | ✅ Write |
If you only say it and don't write it, it's not changed. Once the session ends, the context is gone, and next time it'll still be the old parameters.
When saving to disk, you must do three things:
- Change the corresponding line in
profile.md - Append a line to the "Change Log" section in
profile.md:- YYYY-MM-DD Changed tone from X to Y (reason) - Reply to the user: "Written to profile.md:
tone: Sharp"
What to Do When a Preset Doesn't Have the Value
User wants platform: Zhihu, but presets/platforms.md only has four platforms:
- First, write using the closest match (Zhihu ≈ Bilibili long-form + Reserved Professional), state that you made an approximation
- Ask if they'd like to add it to
presets/platforms.md - If yes, add a section following the existing format—do not stuff it into
SKILL.md
If the user adjusts the same dimension three times in a row, the preset itself is too coarse; only then consider modifying that section in presets/.
6. Deconstruction Mode (Optional)
When the user provides a reference video (link or transcript) instead of a topic, follow references/analysis.md:
Output hook type, structural segmentation, style tags, viral reasons, and 3 rewrite directions.
7. Boundaries
- Do not fabricate data. If no numbers are given, use verifiable vague quantities, or ask directly.
- Medical, financial, and educational content: do not write specific efficacy promises.
- Mark uncertain facts as "To be verified"—do not write them as conclusions.
- Do not use absolute terms like "most," "first," "only" unless backed by a verifiable source.