@wji.ai/cli 0.5.0 → 0.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (32) hide show
  1. package/README.md +22 -2
  2. package/dist/commands/canvas.js +52 -5
  3. package/dist/commands/fsnode.js +13 -6
  4. package/dist/commands/gen.js +3 -2
  5. package/dist/commands/model.js +4 -2
  6. package/dist/commands/workspace.js +6 -3
  7. package/dist/core/output.js +29 -0
  8. package/dist/index.js +5 -2
  9. package/package.json +1 -1
  10. package/skill/ads/SKILL.md +176 -0
  11. package/skill/ads/reference/ai-consistency.md +109 -0
  12. package/skill/ads/reference/brief-template.md +103 -0
  13. package/skill/ads/reference/compliance.md +66 -0
  14. package/skill/ads/reference/formats-image.md +108 -0
  15. package/skill/ads/reference/formats-video.md +121 -0
  16. package/skill/ads/reference/models.md +95 -0
  17. package/skill/ads/reference/product-photography.md +119 -0
  18. package/skill/ads/reference/styles.md +70 -0
  19. package/skill/short-drama/SKILL.md +4 -0
  20. package/skill/short-drama/reference/canvas-recipes.md +18 -0
  21. package/skill/short-drama/reference/operations-cli.md +1 -0
  22. package/skill/short-drama/reference/operations-wji.md +27 -4
  23. package/skill/short-drama/reference/stage-storyboard.md +6 -0
  24. package/skill/social-media/SKILL.md +152 -0
  25. package/skill/social-media/reference/content-craft.md +124 -0
  26. package/skill/social-media/reference/plan-template.md +171 -0
  27. package/skill/social-media/reference/platforms-china.md +94 -0
  28. package/skill/social-media/reference/platforms-global.md +122 -0
  29. package/skill/social-media/reference/ratio-map.md +100 -0
  30. package/skill/social-media/reference/repurpose.md +119 -0
  31. package/skill/wji/SKILL.md +30 -2
  32. package/skill/wji/reference/commands.md +27 -12
@@ -0,0 +1,171 @@
1
+ # Plan template — the post spec sheet
2
+
3
+ One spec sheet per post (one platform × one surface × one asset). It is written before any
4
+ generation, filled from the platform row (platforms-global.md / platforms-china.md), the ratio
5
+ row (ratio-map.md) and the craft rules (content-craft.md); the campaign's sheets together are
6
+ the deliverables checklist of repurpose.md. The block below is the template; after it, one
7
+ filled example — a 3-episode 短剧 launch on 小红书, 抖音 and Instagram Reels with a teaser and a
8
+ poster per platform. Every figure in a sheet is copied from a reference row or marked
9
+ "not confirmed"; nothing is invented in the sheet.
10
+
11
+ ## Fields
12
+
13
+ | Field | Meaning | Where it comes from |
14
+ | --- | --- | --- |
15
+ | campaign | name of the launch / series / promotion | the user |
16
+ | platform | 小红书, 抖音, Instagram … | the user |
17
+ | surface | the row: 图文, video note, Reels, Stories, thumbnail … | platform file |
18
+ | ratio | delivered ratio | platform row |
19
+ | px | delivered pixel size | platform row |
20
+ | duration cap | the surface's cap and the planned length | platform row; content-craft.md |
21
+ | safe zone | the pixel bands text and faces avoid | platform row / 9:16 diagram |
22
+ | source asset | episode + segment ids, KV id, uploaded file | short-drama storyboard / ads brief / user assets |
23
+ | generation plan | model, `ratio`, `resolution`, `duration`, references (`@imageN`), prompt notes (framing sentence) | ratio-map.md |
24
+ | crop | native ratio → target px, anchor | ratio-map.md, crop anchoring |
25
+ | cover | file or "first frame"; template name | content-craft.md, covers |
26
+ | caption | hook line + body + CTA, within the limit | content-craft.md, captions |
27
+ | hashtags | count and list, within the cap | content-craft.md |
28
+ | CTA | one verb | the brief / series plan |
29
+ | posting slot | day + time in the audience's time zone; "starting point" or "from insights" | content-craft.md, posting times |
30
+ | disclosure | the platform's AI toggle and its state; 「AI生成」 for China | platforms-china.md; repurpose.md §3 |
31
+ | status | planned · quoted · generated · cropped · overlaid · scheduled · posted | the work |
32
+
33
+ ## Template block
34
+
35
+ ```
36
+ campaign:
37
+ platform:
38
+ surface:
39
+ ratio:
40
+ px:
41
+ duration cap: (surface cap) / planned:
42
+ safe zone:
43
+ source asset:
44
+ generation plan:
45
+ model:
46
+ ratio:
47
+ resolution:
48
+ duration:
49
+ references: @image1 = … · @image2 = …
50
+ prompt notes:
51
+ crop: native → target, anchor:
52
+ cover:
53
+ caption:
54
+ hashtags: (n / cap)
55
+ CTA:
56
+ posting slot:
57
+ disclosure:
58
+ status:
59
+ ```
60
+
61
+ ## Filled example — 《穿越战神》 3-episode launch, 小红书 + 抖音 + Instagram Reels
62
+
63
+ Six sheets: a teaser and a poster per platform. Beats and references are the same across the
64
+ three teasers; only the ratio (all 9:16 here), the copy and the covers differ.
65
+
66
+ ```
67
+ campaign: 穿越战神 E01–E03 launch, week 1
68
+ platform: 抖音
69
+ surface: video
70
+ ratio: 9:16
71
+ px: 1080×1920
72
+ duration cap: 60 min (verify) / planned: 30 s
73
+ safe zone: pixel bands not confirmed for 抖音 — using the 9:16 diagram union: x 120–960, y 270–1248
74
+ source asset: E01 storyboard segments 03 (turn), 05 (爽点), 07 (cliff); character sheets C01, C02; scene sheet S02 (the ancestral hall)
75
+ generation plan:
76
+ model: seedance-2.5-ref
77
+ ratio: 9:16
78
+ resolution: 1080p
79
+ duration: 4 segments × 7–8 s (hook 3 s inside segment 1)
80
+ references: @image1 = C01 sheet · @image2 = C02 sheet · @image3 = S02 sheet · @audio1 = C01 voice sample
81
+ prompt notes: vertical, faces at the upper third, hall built in depth (pillar foreground, altar behind); hook variant A = the line 「跪下的应该是你」 cut in cold; subtitles burned in at y 1100–1240
82
+ crop: none (video is regenerated at 9:16)
83
+ cover: first frame of variant A, title template 「穿越战神 · 第1集」 in the centre 60 %
84
+ caption: 「跪下的应该是你。」 穿越战神 第1集 — 他回来了,这次跪的是谁? 主页看全集
85
+ hashtags: 4 / no fixed cap: #穿越战神 #短剧 #逆袭 #第1集
86
+ CTA: 主页看全集
87
+ posting slot: Wed 20:00 CST — not confirmed for 抖音, starting point; replace from insights after week 1
88
+ disclosure: 「AI生成」 toggle on (标识办法 2025-09-01)
89
+ status: quoted
90
+ ```
91
+
92
+ ```
93
+ campaign: 穿越战神 E01–E03 launch, week 1
94
+ platform: 小红书
95
+ surface: 图文 (poster + 3 cards)
96
+ ratio: 3:4
97
+ px: 1242×1660
98
+ duration cap: — / 4 images (≤ 18)
99
+ safe zone: title inside the middle 70 %; the tile is half a screen
100
+ source asset: E01 爽点 keyframe (C01 standing over C02 in the hall); scene sheet S02
101
+ generation plan:
102
+ model: nano-banana-pro
103
+ ratio: 3:4
104
+ resolution: 2K
105
+ references: @image1 = C01 sheet · @image2 = C02 sheet · @image3 = S02 sheet
106
+ prompt notes: poster: two figures, C01 lit from the altar candles, title band lower third with 「穿越战神」 + 「第1集 · 跪下的应该是你」 rendered in the picture; cards 2–4 without text (overlaid after)
107
+ crop: 3:4 2K frame → cover-fit to 1660 high → trim 1–2 px each side → 1242×1660
108
+ cover: card 1 (the poster) — template 「剧名 / 第N集 / one-line hook」
109
+ caption: 标题 (18 chars): 穿越战神|第1集他回来了跪的是谁 · 正文: 3 short lines with emoji markers, the keyword 穿越战神 in line 1, 主页看全集 as the last line
110
+ hashtags: 6 / no fixed cap: #穿越战神 #短剧推荐 #逆袭 #穿越 #第1集 #AI短剧
111
+ CTA: 关注 + 主页看全集
112
+ posting slot: Thu 12:30 CST — not confirmed for 小红书, starting point
113
+ disclosure: 「AI生成」 toggle on
114
+ status: planned
115
+ ```
116
+
117
+ ```
118
+ campaign: 穿越战神 E01–E03 launch, week 1
119
+ platform: Instagram
120
+ surface: Reels
121
+ ratio: 9:16
122
+ px: 1080×1920
123
+ duration cap: 3 min in-app / planned: 30 s
124
+ safe zone: Meta unified (Mar 2026): 269 px top, 384–672 px bottom, 65 px sides
125
+ source asset: the 抖音 teaser's segments (same references), English subtitle layer regenerated
126
+ generation plan:
127
+ model: same clips as 抖音 (no new generation); overlay layer in English at the final ratio
128
+ ratio: 9:16
129
+ resolution: 1080p
130
+ duration: 30 s
131
+ references: —
132
+ prompt notes: hook variant B for this market: the result-first cut (the kneel) before the line
133
+ crop: none
134
+ cover: first frame of variant B; title in the centre — the grid tile is 3:4
135
+ caption: "You should be the one kneeling." Ep 1 of 穿越战神 — full episode in bio.
136
+ hashtags: 5 / 5: #shortdrama #aidrama #cdrama #reels #ep1
137
+ CTA: full episode in bio
138
+ posting slot: Tue 12:00 local — Sprout 2026 starting point (Mon–Thu 10–15)
139
+ disclosure: Meta AI label per policy (auto-detected from Jun 2026; state it in the caption as well)
140
+ status: planned
141
+ ```
142
+
143
+ ```
144
+ campaign: 穿越战神 E01–E03 launch, week 1
145
+ platform: Instagram
146
+ surface: feed poster (4:5)
147
+ ratio: 4:5
148
+ px: 1080×1350
149
+ duration cap: —
150
+ safe zone: avoid the outer 3 % per side (3:4 grid crop since Jan 2025)
151
+ source asset: the 小红书 poster's references
152
+ generation plan:
153
+ model: nano-banana-pro
154
+ ratio: 4:5
155
+ resolution: 2K
156
+ references: @image1 = C01 sheet · @image2 = C02 sheet · @image3 = S02 sheet
157
+ prompt notes: same composition as the 3:4 poster; English title band 「WARLORD RETURNS · EP 1」 rendered in the picture
158
+ crop: none (4:5 is native to nano-banana-pro)
159
+ cover: itself
160
+ caption: hook line + 2 lines + "full episode in bio"
161
+ hashtags: 5 / 5
162
+ CTA: full episode in bio
163
+ posting slot: with the Reel, same day
164
+ disclosure: Meta AI label per policy
165
+ status: planned
166
+ ```
167
+
168
+ The 抖音 poster sheet mirrors the 小红书 one at 9:16 (a native 9:16 generation, title in the
169
+ centre 60 %), and the 抖音 teaser variant C (the direct question hook) is a fourth video sheet
170
+ with only the hook segment regenerated. Six sheets, one references set, two image generations
171
+ per ratio, four video segments plus two extra hook segments — that is the whole quote.
@@ -0,0 +1,94 @@
1
+ # Platform specs — China (抖音, 快手, 小红书, 视频号, B站, 微博, 微信公众号)
2
+
3
+ The same table shape as platforms-global.md for the mainland platforms: per surface, the ratio
4
+ and pixel size, duration and file caps, the safe zone, the text limits, and the conventions that
5
+ decide whether a post is read at all. Chinese trade terms are kept in Chinese (图文, 封面, 话题,
6
+ 标题) because that is how the platform's own upload screens name them. Rows marked *(verify)*
7
+ had conflicting figures in the 2025–2026 research; "not confirmed" means no figure was found —
8
+ say so in the plan rather than guess. Generation ratios and crop boxes per row are in
9
+ ratio-map.md.
10
+
11
+ ## 抖音 (Douyin)
12
+
13
+ | Surface | Ratio · px | Duration | File size | Safe zone | Text limits | Notes |
14
+ | --- | --- | --- | --- | --- | --- | --- |
15
+ | Video | 9:16 1080×1920 (16:9 accepted, letterboxed); 30 or 60 fps | 60 min *(verify; older figure 15 min)* | web upload ≤4 GB | pixel bands not confirmed — same layout as TikTok (right rail, bottom caption): use the 9:16 diagram in platforms-global.md until verified | 标题 ≈20 chars visible; 话题 tags (#…#) appended | product or hook inside 3 s; 抖音 ranks completion rate and re-watches |
16
+ | 图文 | 3:4 or 9:16 images, one ratio per post | — | not confirmed | as video | 标题 ≈20 chars | image count cap not confirmed; swipes with music like TikTok photo mode |
17
+ | 封面 | 9:16 frame (a chosen frame or an uploaded cover) | — | not confirmed | profile grid crops to a taller tile — keep cover text in the centre 60 % | cover text ≤ ≈8 chars readable at thumbnail size | series use one template: same title position, same colour band |
18
+
19
+ ## 快手 (Kuaishou)
20
+
21
+ | Surface | Ratio · px | Duration | File size | Safe zone | Text limits | Notes |
22
+ | --- | --- | --- | --- | --- | --- | --- |
23
+ | Video | 9:16 1080×1920 | ≈10 min | 2–3 GB *(verify)* | not confirmed — use the 9:16 diagram | not confirmed | double-column feed on the home tab: the 封面 is a tile, so its text must survive being half-width |
24
+ | 封面 | 9:16 or 3:4 | — | not confirmed | — | not confirmed | one idea, big type, face if there is one |
25
+
26
+ ## 小红书 (Xiaohongshu / RED)
27
+
28
+ | Surface | Ratio · px | Duration | File size | Safe zone | Text limits | Notes |
29
+ | --- | --- | --- | --- | --- | --- | --- |
30
+ | 图文 note | 3:4 1242×1660 (or 1080×1440); 1:1 and 9:16 accepted | — | ≤18 images, ≤20 MB each | the feed card shows the first image at 3:4 — a 1:1 or 9:16 first image is cropped; titles inside the image sit in the middle 70 % | 标题 ≤20 chars; 正文 ≤1,000 (长文 6,000); 话题 tags inside the body | **one ratio per note**: the first image sets the frame for all; the cover is the hook (see content-craft.md) |
31
+ | Video note | 9:16 or 3:4 | ≤15 min | not confirmed | not confirmed — use the 9:16 diagram | 标题 ≤20; 正文 ≤1,000 | 3:4 video shows larger in the two-column feed than 9:16 |
32
+ | 封面 | 3:4 or 9:16 | — | ≤5 MB | two-column feed: the tile is half the screen width — cover text must read at that size | cover text ≤ ≈8 chars, ≤2 lines | 3:4 covers dominate the discovery feed; a 9:16 cover is cropped to 3:4 on the card |
33
+
34
+ ## 视频号 (WeChat Channels)
35
+
36
+ | Surface | Ratio · px | Duration | File size | Safe zone | Text limits | Notes |
37
+ | --- | --- | --- | --- | --- | --- | --- |
38
+ | Feed video | 6:7 1080×1260 (largest in the feed); 9:16 1080×1920; 4:3 1080×810; 1:1 1080×1080; any ratio 0.33–3.0 accepted | web 3 s–8 h; phone ≤60 min | ≤2 GB | 9:16 plays with black bars in the feed until tapped — 6:7 fills the card without bars | 描述 limit not confirmed; 话题 tags supported | 6:7 has no native generation ratio — crop from 3:4 or 1:1 (ratio-map.md) |
39
+ | 封面 | same ratio as the video; **朋友圈 share crops the cover to 1:1** | — | not confirmed | keep the title and face inside the central square of the cover | — | a 6:7 cover loses 90 px top and bottom in the 朋友圈 card |
40
+ | Live / 直播 preview | 9:16 | — | — | — | — | not covered here |
41
+
42
+ ## B站 (Bilibili)
43
+
44
+ | Surface | Ratio · px | Duration | File size | Safe zone | Text limits | Notes |
45
+ | --- | --- | --- | --- | --- | --- | --- |
46
+ | Video | 16:9 1920×1080 or 3840×2160 | not confirmed | not confirmed | — | 标题 and 简介 limits not confirmed | 横屏 first; vertical is accepted but shown pillar-boxed on desktop |
47
+ | 封面 | 1146×717 (≈16:10) or 1920×1200 | — | ≤2–5 MB | **keep the bottom-left corner clear** (duration badge overlays it); the title of the card sits under the cover, not on it | cover text ≤ ≈10 chars | crop from 3:2 or 16:9 — see ratio-map.md |
48
+ | 动态 (dynamic post) | 1:1 or 4:3 images | — | not confirmed | — | not confirmed | nine-grid like 微博 |
49
+
50
+ ## 微博 (Weibo)
51
+
52
+ | Surface | Ratio · px | Duration | File size | Safe zone | Text limits | Notes |
53
+ | --- | --- | --- | --- | --- | --- | --- |
54
+ | 头条文章 cover | 1000×562 (safe area 1000×400) or 900×500 | — | not confirmed | the card crops top and bottom: keep the title inside the middle 400 px | article title limit not confirmed | crop from 16:9 — see ratio-map.md |
55
+ | Post images | not confirmed | — | not confirmed | not confirmed | post text limit not confirmed | nine-grid: the first three images are seen; make the first the hook |
56
+ | Video | *(verify)* | *(verify)* | *(verify)* | — | *(verify)* | the research produced no reliable 2026 figures for 微博 video |
57
+
58
+ ## 微信公众号 (WeChat Official Account)
59
+
60
+ | Surface | Ratio · px | Duration | File size | Safe zone | Text limits | Notes |
61
+ | --- | --- | --- | --- | --- | --- | --- |
62
+ | 头图 / cover | 2.35:1 900×383 — **plus the 1:1 share crop** taken from its centre | — | not confirmed | title and face inside the central 383×383 square so the 1:1 share card still reads | article title limit not confirmed | crop from 21:9 — see ratio-map.md |
63
+ | Secondary cover (次条) | 1:1 200×200, export at 2× (400×400) | — | not confirmed | — | — | small: one object or one face, no text |
64
+ | 图文 body | images the width of the article column; 900 px wide matches the cover width (practice, not a platform rule) | — | not confirmed | — | body length not confirmed | see 图文 layout notes below |
65
+
66
+ 图文 layout notes: the article opens on the cover and the first line, so the first image after
67
+ the title is a second hook, not a decoration; one image per point, captions under images in a
68
+ lighter weight; a share card at the end repeats the CTA; the 1:1 share crop is what most
69
+ readers see first in a chat, so the cover's centre square is the real cover.
70
+
71
+ ## China-specific practice
72
+
73
+ - **「AI生成」 label.** 《人工智能生成合成内容标识办法》 has been in force since 2025-09-01: AI-generated
74
+ or AI-edited video, images and audio carry a visible 「AI生成」 label (most platforms add a
75
+ toggle on upload — switch it on) and the file keeps implicit metadata / watermark marking. Do
76
+ not strip the marking in the crop step; do not describe AI footage as real footage.
77
+ - **Title style.** 小红书 标题 ≤20 chars and the platform hides more; 抖音 shows ≈20. Front-load the
78
+ keyword the search box will match (product, place, problem), then the twist. Number + result
79
+ patterns (「3个…」「第2集…」) and bracketed qualifiers (【】) read as native; clickbait without the
80
+ payoff in the body is down-ranked.
81
+ - **Emoji and keyword conventions.** Emoji as bullet markers at line starts, not inside
82
+ sentences; the body repeats the title's keyword once in the first line; 话题 tags (#…#) go at
83
+ the end of the body, 3–6 on 小红书, and they are searchable — use the platform's suggested
84
+ spellings, not invented ones.
85
+ - **图文 storytelling.** The cover is the hook (question, contrast, result), each following image
86
+ is one idea with one line of text on it, the last image is the CTA (follow / 主页看全集 / 领取).
87
+ One ratio for the whole set, one title template for the whole account.
88
+ - **Cover text is the headline.** On 小红书 and 快手 the tile is half the screen: ≤8 chars, one
89
+ colour band behind the text, face or product filling the rest.
90
+ - **Search first.** 小红书 and 抖音 surface posts by search as much as by feed: the title, the
91
+ cover text and the first body line should agree on one keyword.
92
+ - **Platform video-style borrowing.** 抖音 audiences reject an obvious repost from TikTok (English
93
+ overlays, foreign sounds); regenerate the overlay layer in Chinese rather than translating on
94
+ top of the old one.
@@ -0,0 +1,122 @@
1
+ # Platform specs — global (Instagram, TikTok, YouTube, Facebook, X, LinkedIn, Pinterest, Threads, Snapchat)
2
+
3
+ One table per platform, one row per surface: the ratio and pixel size to deliver, the duration
4
+ and file-size caps, the safe zone where UI covers the picture, the text limits, and what has
5
+ changed recently with the date. Copy the row into the post spec sheet (plan-template.md) before
6
+ generating anything; the generation ratio and crop box for each row is in ratio-map.md, and the
7
+ Chinese platforms are in platforms-china.md. Figures marked *(verify)* were inconsistent between
8
+ sources in the 2025–2026 research; "not confirmed" means the research produced no figure — never
9
+ fill it from memory, say so and let the user check the platform's current help page.
10
+
11
+ ## The 9:16 safe zone (1080×1920) — one diagram for every vertical surface
12
+
13
+ Vertical surfaces all hide the top band behind the status bar and the bottom band behind the
14
+ caption, the sound tag and the action rail on the right. Measured bands, in pixels of a
15
+ 1080×1920 frame:
16
+
17
+ ```
18
+ y 0 ┌────────────────────────────┐
19
+ │ ▒ top band: Meta 14 % = 269 px (Stories / Reels, unified Mar 2026)
20
+ │ TikTok 108 · IG Reels 220 · Snapchat 150
21
+ y 270 ├────────────────────────────┤ ▒ right rail (likes / comments / share):
22
+ │ │ TikTok 120 px · Meta 6 % = 65 px
23
+ │ SAFE — faces, headline, │ ▒ left band: TikTok 60 px · Meta 65 px
24
+ │ subtitles, product, │
25
+ │ x 120 → 960 │
26
+ y 1248 ├────────────────────────────┤
27
+ │ ▒ bottom band: Meta 20–35 % = 384–672 px (caption + sound + CTA)
28
+ │ TikTok 320 · IG Reels 420 · Snapchat 330
29
+ y 1920 └────────────────────────────┘
30
+ ```
31
+
32
+ The conservative union — text and faces inside **x 120–960, y 270–1248** — is safe on every
33
+ platform in this file at once, so a single 9:16 master can be posted everywhere. Per-platform
34
+ bands are looser; use them only when a variant is made for one platform.
35
+
36
+ ## Instagram
37
+
38
+ | Surface | Ratio · px | Duration | File size | Safe zone | Text limits | Notes |
39
+ | --- | --- | --- | --- | --- | --- | --- |
40
+ | Feed image | 4:5 1080×1350 (standard); 3:4 1080×1440 (shows uncropped in the grid); 1:1 1080×1080; 1.91:1 1080×566 | — | not confirmed | grid tile is 3:4 since Jan 2025: a 4:5 loses ≈3 % per side, 1:1 ≈12 % per side, 1.91:1 keeps only the centre | caption 2,200; **≤5 hashtags since Dec 2025** | 4:5 fills the most feed height; 1080×1440 may fail via API upload |
41
+ | Feed video | 4:5 or 9:16 | 3 s–60 min | not confirmed | as Reels | caption 2,200; ≤5 hashtags | every feed video is shown as a Reel |
42
+ | Reels | 9:16 1080×1920 | 3 min in-app (Jan 2025); up to 15 min upload *(verify)* | not confirmed | 220 px top, 420 px bottom (IG figure); Meta unified 14 % / 20–35 % / 6 % from Mar 2026 | caption 2,200; ≤5 hashtags | cover frame is cropped to 3:4 in the grid — keep the cover's title in the centre |
43
+ | Stories | 9:16 1080×1920 | 60 s per card | not confirmed | 14 % top and bottom clear (269 px) | sticker text, link sticker | tap-through: one idea per card |
44
+ | Carousel | one ratio for every slide (4:5 recommended) | — | not confirmed | first slide sets the crop for all | caption 2,200; ≤5 hashtags | ≤20 slides; last slide carries the CTA |
45
+ | Profile grid | 3:4 tiles since Jan 2025 | — | — | design covers for the 3:4 tile | — | previews of 9:16 Reels and 1:1 posts are centre-cropped |
46
+
47
+ ## TikTok
48
+
49
+ | Surface | Ratio · px | Duration | File size | Safe zone | Text limits | Notes |
50
+ | --- | --- | --- | --- | --- | --- | --- |
51
+ | Video | 9:16 1080×1920 | ≤60 min upload, 10 min in-app | not confirmed | 108 px top · 320 px bottom · 60 px left · 120 px right | caption 4,000 | product or key message inside 3 s; start in motion |
52
+ | Photo mode | 9:16 (1:1 and 4:5 accepted) | — | not confirmed | as video | caption 4,000 | ≤35 images; swipes like a carousel with music |
53
+ | Cover | first frame or a chosen frame, 9:16 | — | — | profile-grid tile crop not confirmed — keep title text in the centre 60 % of the frame | cover text | face + ≤4 words; the same template across a series |
54
+
55
+ ## YouTube
56
+
57
+ | Surface | Ratio · px | Duration | File size | Safe zone | Text limits | Notes |
58
+ | --- | --- | --- | --- | --- | --- | --- |
59
+ | Long-form | 16:9 1920×1080 or 3840×2160 | 15 min unverified account, 12 h verified | not confirmed | end-screen area in the last 5–20 s | title 100 (≈60–70 shown), description 5,000 | chapters from timestamps in the description |
60
+ | Shorts | 9:16 or 1:1 | ≤3 min (Oct 2024) | not confirmed | pixel bands not confirmed — keep captions above the bottom UI; use the 9:16 diagram | title 100 | a Short is any vertical video ≤3 min with #Shorts optional |
61
+ | Thumbnail | 16:9 1280×720 | — | ≤2 MB | duration badge sits bottom-right; keep that corner clear | — | face + ≤4 words, high contrast; see content-craft.md |
62
+ | Posts (formerly Community tab) | image ratio not confirmed | — | not confirmed | — | not confirmed | renamed from "Community" to "Posts"; polls, images, text |
63
+ | End screens | inside the 16:9 frame | last 5–20 s of videos ≥25 s | — | elements occupy the frame — no important picture behind them | — | ≤4 elements (video, playlist, subscribe, link) |
64
+
65
+ ## Facebook
66
+
67
+ | Surface | Ratio · px | Duration | File size | Safe zone | Text limits | Notes |
68
+ | --- | --- | --- | --- | --- | --- | --- |
69
+ | Feed image | 4:5 1080×1350 or 1:1 1080×1080 | — | not confirmed | — | post text not confirmed | 4:5 fills the most feed height |
70
+ | Feed video | 4:5 or 9:16 | 1 s–240 min | not confirmed | Meta 9:16 bands | not confirmed | **all Facebook video is published as Reels since Jun 2025** |
71
+ | Reels | 9:16 1080×1920 | 3–90 s | not confirmed | Meta unified: 14 % top, 20–35 % bottom, 6 % sides (Mar 2026) | caption not confirmed | same master as Instagram Reels |
72
+ | Stories | 9:16 1080×1920 | 1–60 s | not confirmed | Meta unified bands | sticker text | — |
73
+ | Link preview | 1.91:1 1200×630 (OG image) | — | not confirmed | — | title and description from the page's OG tags | crop from 16:9 — see ratio-map.md |
74
+
75
+ ## X
76
+
77
+ | Surface | Ratio · px | Duration | File size | Safe zone | Text limits | Notes |
78
+ | --- | --- | --- | --- | --- | --- | --- |
79
+ | Image post | 16:9 1600×900 or 1:1 | — | not confirmed | timeline preview crops tall images to 16:9-ish — keep the subject centred | 280 chars (Premium longer) | up to 4 images; the first sets the layout |
80
+ | Video | 16:9 or 1:1, ≤1920×1200 | 2 min 20 s (Premium up to 4 h) | 512 MB | — | 280 chars | autoplays muted — burned subtitles |
81
+
82
+ ## LinkedIn
83
+
84
+ | Surface | Ratio · px | Duration | File size | Safe zone | Text limits | Notes |
85
+ | --- | --- | --- | --- | --- | --- | --- |
86
+ | Image post | 1080×1080 or 4:5 1080×1350 | — | not confirmed | — | 3,000 chars ("see more" after ≈3 lines) | first two lines carry the hook |
87
+ | Link preview | 1.91:1 1200×627 | — | not confirmed | — | OG title / description | crop from 16:9 — see ratio-map.md |
88
+ | Video | 16:9, 1:1 or 9:16 | ≤10 min organic | 5 GB | — | 3,000 chars | muted autoplay — burned subtitles; 3 hashtags |
89
+ | Document / carousel | PDF pages, 1:1 or 4:5 | — | not confirmed | — | — | one idea per page, last page CTA |
90
+
91
+ ## Pinterest
92
+
93
+ | Surface | Ratio · px | Duration | File size | Safe zone | Text limits | Notes |
94
+ | --- | --- | --- | --- | --- | --- | --- |
95
+ | Standard Pin | 2:3 1000×1500 | — | not confirmed | — | title 100; description 500–800 *(verify)* | Idea Pins merged into standard Pins in 2023 |
96
+ | Video Pin | 9:16 (2:3 accepted) | 4 s–15 min | not confirmed | bottom band hides behind the title on the feed card | title 100 | first frame is the cover unless a cover is chosen |
97
+
98
+ ## Threads
99
+
100
+ | Surface | Ratio · px | Duration | File size | Safe zone | Text limits | Notes |
101
+ | --- | --- | --- | --- | --- | --- | --- |
102
+ | Post | 4:5 best; 9:16, 1:1, 16:9 accepted | video ≤5 min | 500 MB | — | 500 chars | text-first feed: the first line is the hook |
103
+
104
+ ## Snapchat
105
+
106
+ | Surface | Ratio · px | Duration | File size | Safe zone | Text limits | Notes |
107
+ | --- | --- | --- | --- | --- | --- | --- |
108
+ | Story / Spotlight | 9:16 1080×1920 | 3–180 s | not confirmed | 150 px top · 330 px bottom | caption not confirmed | full-screen only; no letterboxing |
109
+
110
+ ## Recent changes to keep in mind (dated)
111
+
112
+ | When | Platform | Change | Effect on delivery |
113
+ | --- | --- | --- | --- |
114
+ | Oct 2024 | YouTube | Shorts up to 3 min | drama teasers up to 3 min qualify as Shorts |
115
+ | Jan 2025 | Instagram | profile grid tiles 3:4; Reels 3 min in-app | covers designed for 3:4; 4:5 posts lose ≈3 % per side in the grid |
116
+ | 2025 | YouTube | Community tab renamed Posts | say "Posts" in plans |
117
+ | Jun 2025 | Facebook | every video post is a Reel | there is no separate feed-video spec; use the Reels row |
118
+ | Dec 2025 | Instagram | hashtags capped at 5 per post | captions with more are rejected or trimmed; pick 5 |
119
+ | Mar 2026 | Meta | one unified safe zone for Stories and Reels: 14 % top, 20–35 % bottom, 6 % sides | one 9:16 master serves IG and FB Reels and Stories |
120
+
121
+ Where a row says "not confirmed", the platform may well have a published figure; the research
122
+ did not verify it, so the plan must not state one.
@@ -0,0 +1,100 @@
1
+ # Ratio map — placement size → generation ratio, model, crop box
2
+
3
+ Every image placement in platforms-global.md and platforms-china.md, mapped to the ratio a WJI
4
+ image model actually generates (taken from the model seeds — the model's `ratio` list is the
5
+ law, not the platform's wish) and, where the placement is not a native ratio, to the nearest
6
+ native ratio plus the crop box that reaches the exact pixels. Then the same for video, where
7
+ the rule is different: **video is regenerated at the target ratio from the same references,
8
+ never cropped**. Read this after choosing the surfaces and before writing the generation plan
9
+ in plan-template.md.
10
+
11
+ ## Native image ratios per model (from the seeds)
12
+
13
+ | Model (`model`) | Ratios | Resolution | Refs |
14
+ | --- | --- | --- | --- |
15
+ | nano-banana, nano-banana-pro, nano-banana-2 | auto 1:1 2:3 3:2 3:4 4:3 **4:5** 5:4 9:16 16:9 21:9 9:21 | pro / 2: 1K–4K | 14 (pro / 2), 4 (nano-banana) |
16
+ | nano-banana-2-lite | same minus 9:21 | | |
17
+ | gpt-image-2 | auto 1:1 4:3 3:4 16:9 9:16 | 1K / 2K / 4K | 16 |
18
+ | gpt-image-2.5 (sunburst / flare) | gpt-image-2 + **21:9** | 1K / 2K / 4K | 16 |
19
+ | bytedance-seedream-4.5 | 1:1 4:3 3:4 16:9 9:16 | 2K / 4K | |
20
+ | bytedance-seedream-5-lite / 5-pro | seedream-4.5 + 3:2 **2:3** 21:9 | size select; 5-pro layered PNG | |
21
+ | flux-2-flex | 1:1 16:9 3:2 2:3 **4:5** 5:4 9:16 3:4 4:3 | | |
22
+ | marketing-studio-image | auto 1:1 3:2 2:3 4:3 3:4 16:9 9:16 21:9 | 1k / 2k / 4k | 8 |
23
+ | runninghub-midjourney v7 / v8.1 / v8.2 | 1:1 4:3 3:2 16:9 3:4 2:3 9:16 | | |
24
+
25
+ No model generates 1.91:1, 6:7, 16:10, 2.35:1 or any banner size. Those are crops.
26
+
27
+ **Resolution rule.** Pick the resolution whose generated short side is at least the target's short
28
+ side after cover-fit, then downscale; never upscale a 1K frame to a 1242-px-wide note. 1K frames
29
+ (≈1024 on the long side) are too small for every placement in this file except 200×200 and
30
+ 400×400; generate at 2K for everything else and at 4K when the crop keeps less than 60 % of the
31
+ frame.
32
+
33
+ ## Image placements
34
+
35
+ | Placement (file) | Target px | Ratio | Native models | If not native: generate → crop |
36
+ | --- | --- | --- | --- | --- |
37
+ | IG feed / FB feed / Threads | 1080×1350 | 4:5 | nano-banana, nano-banana-pro, nano-banana-2, flux-2-flex | 3:4 → cover-fit to 1080 wide (1080×1440) → crop 45 px top and 45 px bottom |
38
+ | IG feed grid-native, 小红书 图文, 抖音 图文, 小红书 cover | 1080×1440 / 1242×1660 | 3:4 | all models in the table above | 1242×1660 is 4 px off exact 3:4 — cover-fit to height 1660 (1245 wide) → crop 1–2 px each side |
39
+ | IG Reels / Stories / TikTok / Shorts / 抖音 / 快手 covers, Snapchat, 视频号 9:16 | 1080×1920 | 9:16 | all | — |
40
+ | IG 1:1, FB 1:1, LinkedIn post, 视频号 1:1, 公众号 secondary cover, X square | 1080×1080 / 1200×1200 / 400×400 | 1:1 | all | — |
41
+ | YouTube thumbnail, X, B站 video frame, 微博 1000×562 | 1280×720 / 1600×900 / 1920×1080 / 1000×562 | 16:9 | all | 1000×562 is 16:9 to the pixel — resize only; keep the title inside the middle 400 px |
42
+ | Pinterest Pin | 1000×1500 | 2:3 | nano-banana family, seedream-5-lite / 5-pro, flux-2-flex, marketing-studio-image, midjourney | 3:4 → cover-fit to height 1500 (1125 wide) → crop 62 px left, 63 px right |
43
+ | 视频号 4:3, B站 动态 | 1080×810 | 4:3 | all | — |
44
+ | IG landscape | 1080×566 | 1.91:1 | none | 16:9 → cover-fit to 1080 wide (1080×608) → crop 21 px top and bottom |
45
+ | FB / LinkedIn link preview, Google landscape | 1200×630 / 1200×627 / 1200×628 | 1.91:1 | none | 16:9 → cover-fit to 1200 wide (1200×675) → crop 22–24 px top and bottom (45 / 48 / 47 px in total) |
46
+ | 视频号 feed card | 1080×1260 | 6:7 | none | 3:4 → 1080×1440 → crop 90 px top and 90 px bottom (keeps full width); or 1:1 → cover-fit to height 1260 (1260 wide) → crop 90 px each side (keeps full height) |
47
+ | B站 cover | 1146×717 | ≈16:10 | none | **3:2** (closest) → cover-fit to 1146 wide (1146×764) → crop 23 px top, 24 px bottom; or 16:9 (from the master) → cover-fit to height 717 (1275 wide) → crop 64–65 px each side |
48
+ | B站 cover large | 1920×1200 | 16:10 | none | 3:2 → 1920×1280 → crop 40 px top and bottom; or 16:9 → 2133×1200 → crop 106–107 px each side |
49
+ | 公众号 cover | 900×383 | 2.35:1 | none | 21:9 (gpt-image-2.5, nano-banana family, seedream-5-lite / 5-pro, marketing-studio-image) → cover-fit to 900 wide (900×386) → crop 1 px top, 2 px bottom; the 1:1 share crop is the centre 383×383 (x 258–641) — compose for that square |
50
+ | 微博 头条文章 alt | 900×500 | 1.8:1 | none | 16:9 → cover-fit to 900 wide (900×506) → crop 3 px top and bottom |
51
+ | 公众号 secondary | 200×200 (export 400×400) | 1:1 | all | generate 1:1 at 1K, downscale to 400, deliver 400×400 |
52
+
53
+ "Cover-fit" means: scale the generated frame uniformly until it covers the target box, then cut
54
+ what falls outside, anchored as described under "Crop anchoring". One generated frame per ratio,
55
+ never one per pixel size: a single 16:9 frame serves the YouTube thumbnail, X, 微博 and every
56
+ 1.91:1 preview.
57
+
58
+ ## Video placements
59
+
60
+ | Placement | Ratio | Models that generate it natively (`ratio`) | Duration range (`duration`) |
61
+ | --- | --- | --- | --- |
62
+ | Reels, Stories, TikTok, Shorts, 抖音, 快手, 小红书 video, 视频号 9:16, Snapchat, Pinterest video | 9:16 | minimax-h3 (+ -ref), seedance-2.5 (+ -ref), seedance-2.0 family, wan-3.0 (+ -ref, prime), veo-3.1, kling-3, happy-horse | h3 5–15 s · seedance-2.5 4–30 s · seedance-2.0 4–15 s · wan-3.0 2–30 s · veo-3.1 4–8 s · kling-3 3–15 s · happy-horse 3–15 s |
63
+ | YouTube long-form, B站, X, LinkedIn, FB in-stream | 16:9 | all of the above | as above |
64
+ | IG / FB / LinkedIn square, 视频号 1:1, Shorts 1:1, X 1:1 | 1:1 | minimax-h3, seedance-2.5, seedance-2.0, wan-3.0, kling-3, happy-horse (not veo-3.1) | as above |
65
+ | 视频号 4:3 | 4:3 | minimax-h3, seedance-2.5, seedance-2.0, wan-3.0, happy-horse | as above |
66
+ | 小红书 3:4 video, 视频号 tall card, 抖音 图文-style video | 3:4 | minimax-h3, seedance-2.5, seedance-2.0, wan-3.0, happy-horse | as above |
67
+ | Cinematic banner, hero loop | 21:9 | minimax-h3, seedance-2.5, seedance-2.0 | as above |
68
+ | 视频号 6:7, Pinterest 2:3, 1.91:1 previews | — | none | deliver the nearest accepted ratio instead: 视频号 takes 3:4 or 1:1 (0.33–3.0 accepted), Pinterest takes 9:16, link previews take a 16:9 still |
69
+
70
+ Resolutions: minimax-h3 480P / 768P / 2K / 4K; seedance-2.5 480p / 720p / 1080p; wan-3.0 480P /
71
+ 720P / 1080P; seedance-2.0 480p / 720p. Publish 1080p or the model's top tier below it; the
72
+ platform re-encodes anyway.
73
+
74
+ **The video rule.** A 16:9 master cropped to 9:16 loses two thirds of the frame and lands the
75
+ faces under the caption band; a 9:16 master padded to 16:9 is a phone video with bars. So every
76
+ ratio in the placement list is a **new generation**: the same character / scene / product
77
+ references (`@image1` …), the same segment prompt with the framing sentence rewritten for the
78
+ new frame ("vertical, subject centred, head at the upper third, room built in depth"), the same
79
+ `duration`. Cost is one clip per ratio per segment — plan it in repurpose.md, quote it, then
80
+ generate. The only cut permitted on a video is trimming its length.
81
+
82
+ ## Crop anchoring
83
+
84
+ A crop box has an anchor: the point that must stay inside. Decide it per frame before cutting.
85
+
86
+ | Frame content | Anchor | Then |
87
+ | --- | --- | --- |
88
+ | A face (poster, teaser cover, testimonial still) | the face box; eyes at ≈1/3 from the top of the target | crop from the bottom first, then the top; never cut the chin or the hairline |
89
+ | Two faces | the midpoint between them, both boxes inside | if both cannot fit, regenerate the frame tighter rather than cut one out |
90
+ | Product / packshot | the product's centre; the whole product plus its shadow inside | crop the sides symmetrically; on 1.91:1 previews keep the label readable at 600 px wide |
91
+ | Headline zone (key visual with text) | the text block plus its margin | text is rendered into the picture only on the final ratio — on crops, generate without text and overlay after |
92
+ | Scene / landscape | the horizon or the main light | side crops are free; top / bottom crops keep the horizon off the edge |
93
+
94
+ After the crop, re-check the target's safe zone (platforms-global.md / platforms-china.md):
95
+ a 6:7 视频号 cover is shared to 朋友圈 as its centre 1:1, so the face has to sit inside that
96
+ square; a 900×383 公众号 cover is read as its centre 383×383 in chats; a 4:5 IG post loses ≈3 %
97
+ per side in the 3:4 grid; a 16:9 thumbnail keeps the bottom-right corner clear for the duration
98
+ badge and a B站 cover the bottom-left. When the anchor cannot survive the crop, the answer is a
99
+ new generation at the closer native ratio (3:4 instead of 1:1 for 6:7, 3:2 instead of 16:9 for
100
+ 1146×717), not a smaller face.
@@ -0,0 +1,119 @@
1
+ # Repurposing — one master → every placement; episode → teaser; ad → placements
2
+
3
+ How one piece of source material becomes a full set of platform deliverables without cropping
4
+ video: which surfaces need which variant, what is regenerated and what is cropped, in which
5
+ order, and the two recipes that use it most — a 短剧 episode turned into vertical teasers and a
6
+ poster set, and an ad master turned into its placements. Sizes come from platforms-global.md
7
+ and platforms-china.md, the generation ratios and crop boxes from ratio-map.md, the hook and
8
+ caption rules from content-craft.md; the result is written into the spec sheet of
9
+ plan-template.md.
10
+
11
+ ## 1. Master → placement matrix
12
+
13
+ Two masters exist: a **16:9 master** (long-form, TVC, 中剧 / movie, B站, YouTube) or a
14
+ **9:16 master** (短剧, Reels-first ads). Given one, the matrix says what each surface needs.
15
+
16
+ | Surface | From a 16:9 master | From a 9:16 master | Kind |
17
+ | --- | --- | --- | --- |
18
+ | YouTube long-form, B站, X, LinkedIn 16:9 | the master, trimmed | regenerate 16:9 (wides can carry two people; keep the vertical's cut points) | video |
19
+ | Reels, TikTok, Shorts, 抖音, 快手, 小红书 video, 视频号 9:16, Snapchat, Pinterest video | **regenerate 9:16** from the same references, reframed on faces | the master, trimmed to the surface's cap | video |
20
+ | IG / FB / LinkedIn square, 视频号 1:1 | regenerate 1:1 | regenerate 1:1 | video |
21
+ | 视频号 6:7 card, 小红书 3:4 video | regenerate 3:4 (视频号 accepts it; 6:7 is not generatable) | regenerate 3:4 | video |
22
+ | YouTube thumbnail, X image, 微博 1000×562 | a keyframe of the master, 16:9 | regenerate a 16:9 still from the same references | image |
23
+ | IG feed 4:5, Threads | regenerate 4:5 still (nano-banana family / flux-2-flex) | regenerate 4:5 | image |
24
+ | 小红书 图文 / cover 3:4, IG grid 3:4 | regenerate 3:4 still | regenerate 3:4 | image |
25
+ | Pinterest 2:3 | regenerate 2:3 still | regenerate 2:3 | image |
26
+ | Link previews 1.91:1, 微博 cover, 公众号 900×383, B站 1146×717, 视频号 6:7 cover | crop from the 16:9 / 21:9 / 3:2 / 3:4 still per ratio-map.md | same, from a regenerated still | image crop |
27
+ | Stories cards | regenerate 9:16 stills or reuse the 9:16 clips ≤ 60 s | trim the master into ≤ 60-s cards | either |
28
+
29
+ **Regenerate vs crop.** Video: always regenerate (ratio-map.md, the video rule) — same
30
+ `@imageN` references, same `duration`, framing sentence rewritten for the new frame. Image:
31
+ regenerate at every native ratio (4:5, 3:4, 2:3, 1:1, 16:9, 21:9); crop only for the ratios no
32
+ model has (1.91:1, 6:7, 16:10, 2.35:1), and crop from the nearest native, not from the master.
33
+
34
+ **Order of work.** (1) Spec sheet rows for every surface. (2) Stills first: one generation per
35
+ native ratio, from the same references; approve them — they are the covers and the reference
36
+ frames for the clips. (3) Crops from the approved stills. (4) Video regenerations, one ratio at
37
+ a time, primary platform first; quote before each batch. (5) Overlays and subtitles at the final
38
+ ratio. (6) Captions, hashtags, slots. (7) The deliverables checklist (section 4) filled in.
39
+
40
+ ## 2. Drama episode → teaser + poster set
41
+
42
+ Source: an episode's storyboard (segments, cuts, the 爽点 and the cliff) and the character /
43
+ scene sheets it was generated from. The teaser is not the episode's first 30 seconds and not a
44
+ crop of the episode; it is **new 9:16 segments** built from the same sheets.
45
+
46
+ ### The 4-beat teaser (15–45 s)
47
+
48
+ | Beat | Time | Content | Source in the storyboard |
49
+ | --- | --- | --- | --- |
50
+ | Hook | 0–3 s | the most shocking line or action from the *middle* of the episode, cut in cold, burned-in text of the line | the 爽点 cut or the turn's reveal cut |
51
+ | Context | 3–15 s | who wants what, in two cuts and one line — enough to make the hook hurt | the episode's establish / evidence cuts |
52
+ | Escalation | 15–35 s | the pressure rising toward the payoff: the decision cut, the reaction cut | the cuts before the 爽点 / cliff |
53
+ | Cut before payoff | last 2–5 s | freeze one beat before the answer + 「主页看全集 / full episode in bio」 card in the same template as the cover | the cliff cut, ending early |
54
+
55
+ - **2–3 variants** that differ only in the hook beat (a line, a result-first, a question — see
56
+ content-craft.md); beats 2–4 are shared, so only the hook segment is regenerated per variant.
57
+ - Generated as **9:16 segments** with the same character and scene sheets as references
58
+ (`@image1` character, `@image2` scene …), segment length inside the video model's range
59
+ (ratio-map.md), 3–5 segments for a 30-s teaser. Prompts reframe on faces: medium / close /
60
+ extreme-close, space built in depth (foreground shoulder, counter edge, room behind) — a wide
61
+ on a phone says nothing.
62
+ - Subtitles burned in, inside the safe zone; the hook line is on screen from frame 1.
63
+ - Sound: the episode's voice track for the lines, one Seed Audio sting under the cut-before-payoff.
64
+ - A 16:9 teaser for YouTube / B站 is a further regeneration of the same beats, not a pad.
65
+
66
+ ### The poster / cover set
67
+
68
+ From the episode's keyframes or a regenerated hero still (the two leads in the 爽点 pose, the
69
+ scene sheet behind), one generation per native ratio, then the crops; title-safe zones per
70
+ surface:
71
+
72
+ | Surface | Ratio · px | Generate | Title-safe zone |
73
+ | --- | --- | --- | --- |
74
+ | 小红书 cover / 图文 | 3:4 1242×1660 | native 3:4, text inside the picture (nano-banana-pro / seedream-5-pro) | middle 70 % — the tile is half a screen |
75
+ | Instagram feed | 4:5 1080×1350 | native 4:5 | avoid the outer 3 % (grid crop) |
76
+ | Pinterest | 2:3 1000×1500 | native 2:3 | lower third for the title band |
77
+ | YouTube thumbnail | 16:9 1280×720 | native 16:9, face + ≤ 4 words | keep the bottom-right clear |
78
+ | B站 cover | 1146×717 | 3:2 → crop 23 / 24 px | keep the bottom-left clear |
79
+ | 视频号 cover | 6:7 1080×1260 | 3:4 → crop 90 / 90 px | inside the centre 1:1 square (朋友圈 crop) |
80
+ | Reels / TikTok / 抖音 cover | 9:16 1080×1920 | the teaser's first frame or a native 9:16 still | centre 60 % (grid tile crop) |
81
+
82
+ One title template for the whole series: 剧名 + 第N集 + one-line hook, same position on every
83
+ cover.
84
+
85
+ ## 3. Ad master → placements
86
+
87
+ Source: the ad brief (product references, CTA, legal lines, disclosure need), the key visual
88
+ (KV) and the master clip (16:9 or 9:16) from the ads skill.
89
+
90
+ - **KV crops per size**: the KV is regenerated at 4:5, 1:1, 3:4, 2:3, 16:9 and 21:9 with the
91
+ packshot as `@image1` and "keep the label, shape and colour exactly"; the 1.91:1 previews,
92
+ 900×383, 1146×717 and 6:7 are crops of those (ratio-map.md), anchored on the product centre.
93
+ Legal text and small print are overlaid after the crop, never generated.
94
+ - **Vertical / square video regenerations**: 9:16 and 1:1 (and 4:3 / 3:4 for 视频号 and 小红书)
95
+ from the same product stills and the same shot list; product in frame by 3 s; CTA card in the
96
+ last 3 s inside the safe zone; 15–30 s for Reels / Stories ads, ≤ 6 s for a bumper-style cut.
97
+ - **Per-platform copy** from the brief's CTA and legal lines: the CTA verb stays the platform's
98
+ button (shop now, learn more, 立即购买), the legal line goes into the caption or the end card,
99
+ the hashtags follow content-craft.md (IG ≤ 5, TikTok 3–5, LinkedIn 3, 小红书 keyword + 话题).
100
+ - **Disclosure toggles**: YouTube "altered or synthetic" for realistic people / voices; Meta
101
+ "AI info" (automatic for Meta-tool ads, mandatory disclosure for political / social ads);
102
+ TikTok "contains AI-generated content"; China 「AI生成」 on every platform (since 2025-09-01).
103
+ Record the toggle state per placement in the spec sheet.
104
+ - Sound-off first: the ad reads with captions alone; the audio track is a bonus.
105
+
106
+ ## 4. Deliverables checklist
107
+
108
+ One row per file. Empty cells are work not yet done.
109
+
110
+ | File | Platform · surface | Ratio | px | Duration | Cover | Caption | Hashtags | Posting slot | Disclosure | Status |
111
+ | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
112
+ | teaser-A-9x16.mp4 | 抖音 video | 9:16 | 1080×1920 | 28 s | cover-9x16-A.jpg | ✓ | 4 话题 | Wed 20:00 CST | 「AI生成」 on | generated |
113
+ | teaser-A-9x16.mp4 | Instagram Reels | 9:16 | 1080×1920 | 28 s | cover-9x16-A.jpg | ✓ | 5 | Tue 12:00 local | AI label per policy | scheduled |
114
+ | poster-3x4.jpg | 小红书 图文 cover | 3:4 | 1242×1660 | — | itself | ✓ | keyword + 5 话题 | Thu 12:30 CST | 「AI生成」 on | to crop |
115
+ | thumb-16x9.jpg | YouTube thumbnail | 16:9 | 1280×720 | — | itself | — | — | with the video | — | pending |
116
+ | cover-bili.jpg | B站 封面 | ≈16:10 | 1146×717 | — | itself | — | — | with the video | 「AI生成」 on | pending |
117
+
118
+ Status values: planned · quoted · generated · cropped · overlaid · scheduled · posted. A row is
119
+ complete when every cell is filled and the file's pixel size equals the platform row.