| name | skyyrose-social-tiktok-script |
| description | Writes frame-by-frame TikTok and Reels scripts — hook, spoken word, text overlays, transitions, audio cues — in SkyyRose brand voice for product reveals, founder stories, and styling content. |
| allowed-tools | Read Write Edit Glob |
SkyyRose Social — TikTok Script
When to Use This Skill
- Writing a 15-second product reveal for a new drop (teaser / first look)
- Scripting a 30-second brand story featuring Corey or Oakland context
- Producing a 60-second "3 ways to style" transition video for a single garment
- Building a POV or reaction format video adapted to SkyyRose's aesthetic
- Creating a behind-the-scenes packing or production clip
- Generating a founder-perspective "hot take" on fashion or streetwear culture
DO NOT use this for Instagram carousel scripts (use skyyrose-social-instagram-carousel), full 30-day video plans (use skyyrose-social-short-form-video-plan), or long-form YouTube content. This is for single short-form video scripts: 15–60 seconds, vertical.
Brand Canon (non-negotiable)
- Tagline close: Every brand-story or product-reveal video ends with "Luxury Grows from Concrete." — either spoken or as the final text overlay + logo.
- Collection voice is strict: Love Hurts = crimson heat, "the bloodline that raised me." Black Rose = armor, defiance, "you already stood up." Signature = "stay golden / the standard," West Coast elevation. Kids Capsule = little royalty, heritage. Never cross-register.
- No hype-merchant delivery. Corey's tone: unhurried, earned, Oakland-direct. No "You NEED this", no "fire 🔥🔥", no countdown-pressure delivery.
- Burned-in captions are mandatory. 70% of viewers watch without sound. Every text overlay must be brief enough to read in the time it's on screen (3-7 words).
- Name, not SKU. "Love Hurts Bomber Jacket" in the video — never "lh-004".
- The Five only for aesthetic reference: Kith editorial, Oaklandish community, Culture Kings hype energy (adapted, not copied), Fear of God restraint, Palm Angels graphic confidence.
Full canon: ../skyyrose-content-engine/brand-guardrails.md
Phase 1: Brief
Required Inputs
| Input | What to Ask | Default |
|---|
| Product / topic | "Which product or theme? Use the product NAME." | No default — must be provided |
| Collection | "Black Rose, Love Hurts, Signature, or Kids Capsule?" | Derive from product |
| Video format | "Product reveal, founder story, styling transition, POV, behind-the-scenes, or hot take?" | Product reveal |
| Duration | "15, 30, or 60 seconds?" | 30 seconds |
| Platform | "TikTok, Instagram Reels, or both?" | Both (same script, minor caption adaptation) |
| On-camera presence | "Corey on camera, model, hands-only, or text-on-screen only?" | Depends on format |
| Trending hook | "Any trending format or sound to anchor this to?" | None — use evergreen |
GATE: Confirm product name, duration, and format before scripting. If the collection is Love Hurts, confirm no Black Rose language is anywhere in the brief.
Phase 2: Outline
Script Structure
Hook (0–3 sec): Stop the scroll. Text overlay + visual action.
Setup (3–10 sec): Context — what is this, why it matters.
Body (10–X sec): The value: reveal, styling beats, construction detail, or story.
Payoff (last 5 sec): The takeaway or emotional landing.
CTA (final 2–3 sec): Single action + "Luxury Grows from Concrete." close.
GATE: Approve outline and duration before writing full script.
Phase 3: Write
Full Script Format
## [Internal title — not shown on video]
**Duration:** [X seconds]
**Format:** [product reveal / founder story / styling transition / POV / BTS / hot take]
**Collection:** [Black Rose / Love Hurts / Signature / Kids Capsule]
### HOOK (0–3 seconds)
**On screen:** [What the viewer sees — physical action, cut, or visual]
**Text overlay:** "[3-7 words — reads in under 2 seconds]"
**Audio:** [Spoken words OR trending sound cue OR music style]
### SETUP (3–10 seconds)
**On screen:** [Visual description]
**Spoken:** "[Exact words — write for spoken delivery, not reading]"
**Text overlay:** "[Supporting phrase if needed]"
### BODY (10–X seconds)
**On screen:** [Visual — b-roll, detail shot, styling cut, talking head]
**Spoken:** "[Exact words]"
**Text overlay:** "[Key phrase — 3-7 words per card]"
**Transition:** [Cut / zoom in / swipe / slow reveal — specific]
### PAYOFF (last 5 seconds)
**On screen:** [Final visual — product worn, product flat, or founder frame]
**Spoken:** "[Exact words — the landing]"
**Text overlay:** "[Takeaway phrase]"
### CTA (final 2–3 seconds)
**On screen:** [SkyyRose logo or wordmark frame]
**Spoken:** "[CTA — e.g. 'Pre-order. Link in bio.']"
**Text overlay:** "Luxury Grows from Concrete."
---
**Audio suggestion:** [Trending sound name if applicable, or music style description]
**Hashtags (5-8):** [Collection-specific + niche tags — goes in caption]
**Caption:** [15-30 words, platform-native adaptation — TikTok vs Reels noted]
SkyyRose Hook Formulas
Use ONE per video. Label it in the script.
| Formula | SkyyRose application |
|---|
| Identity statement | "This is what The Town looks like when it levels up." |
| Fabric-first reveal | Open on hands pulling garment from packaging — no words for the first second. |
| Founder direct address | Corey to camera: "I made this because nothing else was built for us." |
| Contrarian take | "Luxury doesn't come from Europe. Never did." |
| Result first | Show finished look (fully styled), then cut back to the piece alone. |
| POV anchor | "POV: You just opened your SkyyRose order." |
| Community call | "If you're from The Town, you already know what this is." |
Writing Rules
| Rule | Detail |
|---|
| Word count | ~2.5 words per second of video |
| Text overlays | 3-7 words. Never a full sentence. |
| One idea per video | A product reveal is NOT also a brand story. |
| Conversational delivery | Write how Corey talks — Oakland cadence, no hype filler. |
| Retention trigger | Include at least one mid-video hook: "And here's the part most brands skip..." |
| No dead air | Every second: visual action OR audio OR text overlay. Not silence over a still frame. |
| Burned-in captions | Text overlays are mandatory. Not optional. |
SkyyRose Video Script Templates (seeded from content-engine)
15-Second Product Reveal
[0–1.5s] HOOK: Text overlay on dark frame: "[Identity or fabric statement]"
[1.5–5s] REVEAL: Hands pulling product from branded SkyyRose packaging
[5–10s] DETAIL: Close-up of construction detail — embroidery, hardware, ribbing
[10–13s] WEAR: Cut to product being worn — confident, still, no performance
[13–15s] CTA: SkyyRose wordmark + "Link in bio" or "skyyrose.co"
Text overlay: "Luxury Grows from Concrete."
30-Second Brand Story
[0–3s] HOOK: Corey in Oakland setting (outdoor, real location — not a studio).
Text overlay: "[Emotional statement from collection register]"
[3–10s] CONTEXT: Voice-over about the making while showing production/products
[10–20s] PRODUCTS: Quick cuts across collections — 1-2 seconds each, confident pacing
[20–27s] EMOTION: Corey with community moment or quiet product hold
[27–30s] CLOSE: "Luxury Grows from Concrete." + SkyyRose logo
60-Second "3 Ways to Style"
[0–3s] HOOK: Text: "3 ways to style the [Product Name]"
[3–20s] LOOK 1: Full outfit reveal with text overlay — describe the vibe, not the outfit
[20–37s] LOOK 2: Different context/styling, transition cut (not a swipe effect)
[37–54s] LOOK 3: Most elevated look — slow reveal, no rushing
[54–60s] CTA: "Which is your style? Comment 1, 2, or 3."
+ "skyyrose.co" + "Luxury Grows from Concrete."
Phase 4: Polish
Script Checklist
- [ ] Hook stops the scroll in under 3 seconds
- [ ] Spoken word count matches target duration (~2.5 words/sec)
- [ ] Text overlays are 3-7 words (readable at a glance before the cut)
- [ ] One topic per video — no scope creep
- [ ] CTA is specific and appears as text overlay
- [ ] Script reads naturally when spoken aloud (not like a blog post)
- [ ] At least one retention trigger mid-video
- [ ] Audio/sound suggestion included
- [ ] 5-8 hashtags in the caption (not burned into video)
- [ ] "Luxury Grows from Concrete." appears in final frame
- [ ] Collection voice verified — no cross-attribution
- [ ] No hype-merchant delivery in the spoken lines
Repurposing Notes
Provide brief notes after every script:
- TikTok: stitch/duet opportunity? Trending sound integration?
- Instagram Reels: cover image suggestion (first frame must work as a still); Stories cross-promotion
- Posting note: Best windows for SkyyRose audience: 9 AM, 12 PM, 6 PM, 9 PM PST — test and iterate
Implementation
from agents.social_media_agent import SocialMediaAgent
agent = SocialMediaAgent()
post = agent.generate_post("lh-004", "tiktok", "product_launch")
print(post.caption)
print(post.hashtags)
python -m skyyrose.elite_studio.ventures.social smoke --sku lh-004
Scheduler/production row example:
{
"sku": "lh-004",
"product_name": "Love Hurts Bomber Jacket",
"collection": "love-hurts",
"format": "tiktok-script",
"duration_sec": 30,
"video_format": "product_reveal",
"on_camera": "model",
"audio_suggestion": "original audio — Corey VO",
"platforms": ["tiktok", "instagram_reels"],
"scheduled_utc": "2026-06-10T21:00:00Z",
"batch_session": 1,
"repurpose_to": ["instagram_carousel", "x_post"]
}
Example: Love Hurts Bomber — 30-Second Product Reveal
Product: Love Hurts Bomber | Collection: Love Hurts | Format: Product reveal, talking head + b-roll
## Love Hurts Bomber — Product Reveal (30 sec)
**Duration:** 30 seconds
**Format:** Product reveal — model + b-roll
**Collection:** Love Hurts
### HOOK (0–3 seconds)
**On screen:** Close-up of crimson stitching on bomber sleeve. Hands entering frame.
**Text overlay:** "This one's for the ones who stayed."
**Audio:** Ambient sound — fabric movement only, no music yet.
### SETUP (3–10 seconds)
**On screen:** Full product flat-lay on dark surface, rose gold accents visible.
**Spoken:** "Love Hurts is the collection for everything the streets taught you.
The bomber was built to carry that."
**Text overlay:** "Love Hurts Collection"
### BODY (10–22 seconds)
**On screen:** Quick cut — model putting on the bomber, exterior shot.
**Spoken:** "Satin lining. Embroidered Love Hurts script across the back.
The crimson isn't a color choice. It's a statement."
**Text overlay (card 1):** "Satin lining."
**Text overlay (card 2):** "Embroidered script."
**Text overlay (card 3):** "Crimson. Always."
**Transition:** Cut on action — bomber zips up, cut to exterior street shot.
### PAYOFF (22–27 seconds)
**On screen:** Model, still, facing camera. Urban Oakland backdrop.
**Spoken:** "The bloodline that raised me. This is for it."
**Text overlay:** "The bloodline that raised me."
### CTA (27–30 seconds)
**On screen:** SkyyRose wordmark on dark frame.
**Spoken:** "Pre-order. Link in bio."
**Text overlay:** "Luxury Grows from Concrete."
---
**Audio suggestion:** Soulful, minimal — no lyrics. Think KAYTRANADA instrumental energy.
**Hashtags:** #SkyyRose #LoveHurtsCollection #LuxuryGrowsFromConcrete #BlackOwnedFashion #OaklandFashion #StreetLuxury #BayAreaStyle
**TikTok caption:** "The bloodline that raised me. Love Hurts Bomber — pre-order link in bio."
**Reels caption:** "Built to carry what the streets taught you. Love Hurts Bomber. Pre-order open → link in bio."
Anti-Patterns
- Slow hooks — "Hey everyone, so today I'm going to show you the new SkyyRose collection drop..." wastes the first 3 seconds. Start mid-action or with a text overlay.
- Cross-attributing collection language — "The bloodline that raised me" on a Black Rose video, or "armor" language on Love Hurts. These are locked to their collections.
- Hype-merchant delivery — "This is FIRE 🔥" or "You're going to WANT this" is not Corey's register. Specific, earned, direct.
- Reading the script word-for-word — spoken lines must sound natural at Oakland cadence. Read aloud before approving; rewrite any phrase that sounds scripted.
- Text overlays as full sentences — "This bomber was constructed with satin lining and crimson embroidery" is not a text overlay, it's a caption. Cut to the essential phrase.
- No retention trigger — a 30-second product reveal with no mid-point hook loses half its audience by second 15. Build in "and the detail nobody expects..." type beats.
- Ending without the tagline — every SkyyRose video closes with "Luxury Grows from Concrete." in the final frame. Missing this breaks brand consistency across the library.
- Multiple CTAs — "Follow, comment, share AND link in bio" is no CTA. One action per video.
- Trending sound that breaks the mood — a trending audio that conflicts with the collection's emotional register undermines the whole video. Only adapt trends that fit. Skip the rest.
- SKU in the caption or overlay — "lh-004 just dropped" is internal language. Always the product name.
Recovery
- No on-camera confidence: Default to text-on-screen with b-roll + Corey voiceover. The face is optional; the voice is the brand.
- Topic too dense for 30 seconds: Split into a 3-part "series" TikTok. End each with "Part 2 drops tomorrow" to drive follow.
- No trending audio that fits: Use original audio — Corey's voice as the soundtrack IS the differentiator. Don't force a trend that breaks the collection's register.
- Script feels stiff: Read it aloud. Replace every phrase you wouldn't say to a friend. Contractions, pauses, fragments — all fine.
- Video underperforming: The hook is 80% of performance. Test 3 different first-3-seconds over the same body content. Don't change the body until you've exhausted hook variants.
- Collection voice isn't landing: Read
docs/brand/collection-stories.md — the per-collection emotional register is there verbatim. If a line could belong to any collection, it's not specific enough for SkyyRose.