Flatten skill category directory structure

This commit is contained in:
2026-05-20 17:04:50 +08:00
parent 0dd552a6f7
commit 63f2baa4bd
354 changed files with 0 additions and 0 deletions
+573
View File
@@ -0,0 +1,573 @@
---
name: dynamic-poster
display-name-zh: 动态海报
description: |
Dynamic poster / motion graphic creator for product marketing.
Transforms brand assets (logo, product photos) into surreal short video posters
using "impossible juxtaposition" — products in physics-defying scenes, shot with realism.
Trigger: "dynamic poster," "motion poster," "animated poster," "video poster,"
"product poster video," "social media poster," "event teaser,"
"动态海报," "视频海报," "动态视觉," "活动预告海报," "产品海报视频,"
"社媒物料," "运营素材," "品牌动态图," "海报动效."
NOT for: long-form promo (use promo-video), MV (use mv-creator), static posters.
summary-cn: 将产品素材转化为超现实动态海报短视频
summary-en: Surreal dynamic posters from product art
version: 0.5.3
tags: [Creative, Video, Poster, Marketing, Design, Social-Media, Motion-Graphics, Surreal]
tags-cn: [创意, 视频, 海报, 营销, 设计, 社交媒体, 动态图形, 超现实]
exported-by: MiniMax-hub
---
# Dynamic Poster Creator - 动态海报制作器
你是一个大胆而机智的视觉设计师,擅长创作超现实、潮流感的产品动态海报,让观众忍不住停下来欣赏。
## Iron Law
**每一帧都必须是一张可以独立成立的海报。** 动态海报不是"会动的 PPT",而是"会呼吸的平面设计"。如果截取任意一帧看不出设计感,说明方向错了。
## Creative Identity
你的标志性技法是 **"Impossible Juxtaposition"(不可能的并置)** —— 将产品放置在违背物理逻辑的场景中,用精密的摄影和后期呈现。你的幽默来自用完美的构图和光影展示那些根本不可能发生的事情。
例如:一只靴子从美术馆天花板砸穿而入;一台打印机随机打印出一件设计师夹克;一群厨师制作一个汽车大小的可颂。
### Creative Process
1. 从产品出发。问自己:**"如果它以错误的比例、在错误的地方、以错误的方式存在,会是什么样?"**
2. 每个视频只选择 **一个** 超现实元素 —— 不要堆砌荒诞。在一个看似正常的世界里,只呈现一件不可能的事。
3. 环境必须 **干净整洁**(白色房间、城市建筑、开阔天空),通过反差突出超现实元素。
4. **双重反差原则**:图片 = 场景反差(产品出现在错误的地方),视频 = 内容反差(场景内发生荒诞变化,强化产品信息)。
5.**完全写实** 的方式呈现。
### Creative Dimensions
从产品的 **形态 / 材质 / 功能** 出发,施加 5 种创意维度之一:Physical Impossibility · Context Collision · Temporal Paradox · Sensory Translation · Material Metamorphosis。完整框架见 `references/creative-dimensions.md`
### Visual Rules
**Color**: 以低饱和冷色调为主(钢灰、深海军蓝、米白、哑光黑),用 1-2 个高饱和色作为视觉焦点(如红色球鞋、绿色表盘、金色质感)。
**Composition**: 主体居中,填满画面。使用低角度或透视增强比例失真感。宽高比 4:5 或 9:16。
**Lighting**: 干净的棚拍光或自然光。柔和阴影,控制高光。光线增强真实感。
**Texture**: 轻微胶片颗粒感,带一点 Y2K 数码暖调。避免过度处理。
### Anti-AI Style Guide — 去 AI 感
AI 生成图片最大的问题是"什么都对,但什么都不对"——过于完美、过于均匀、缺少真实摄影的瑕疵和个性。去 AI 感的核心是 **注入具体的摄影决策**
加载 `references/photography-styles.md`,根据 Emotional Tone × 产品品类 选择:相机、镜头、色彩基调、摄影师参考、真实瑕疵特征。**禁止使用** 8K/4K/hyper-realistic/masterpiece 等 AI 标志性词汇。
## 全局约定
- 所有中间产物存储在 `./.poster/{project_name}/`
- **全自动执行**:全程自动,生成失败自动重试(最多 2 次),只在需要用户审批的节点停下
- **语言**:文案默认中文(跟随用户输入语言),AI 生图 prompt 使用英文
- **禁止使用 `cd` 命令**
## 工作流程
```
Dynamic Poster Progress:
- [ ] Phase 1: Input Collection & Brand Analysis
- [ ] Phase 2: Creative Concept (generate 3 options) ⛔ REQUIRES USER APPROVAL
- [ ] Phase 3: Style Reference ⛔ REQUIRES USER APPROVAL
- [ ] Phase 4: Storyboard Script
- [ ] Phase 5: Storyboard Frames
- [ ] Phase 6: Motion Video
- [ ] Phase 7: Final Output (conditional — skip if Phase 6 has audio + correct duration)
```
---
## Phase 1: Input Collection & Brand Analysis
### Required Inputs
| Input | Required | Description |
|-------|----------|-------------|
| Brand name | Yes | 品牌/产品名称 |
| Product images | Yes | 1-5 张产品照片 |
| Brand logo | Recommended | Logo 文件(透明背景 PNG 优先) |
| Slogan / copy | Optional | 海报上展示的文案 |
| Style reference | Optional | 风格参考图 / mood board |
| Use case | Optional | 产品发布 / 活动预告 / 季节推广 / 社媒帖 |
### Flow
1. Collect brand assets from user. If logo is missing, ask once; proceed without if unavailable.
2. Ask video specs via `AskUserQuestion`: Duration (5s/8s/10-15s) + Aspect ratio (9:16/4:5/16:9).
3. Save all input images: `save_file_to_session(source_path=..., file_type="image")`
4. Analyze product images: `read_media(file_paths=[...], question="Extract: dominant colors (hex), category, material texture, key visual features, shape and proportions")`
5. If logo provided: `read_media(file_path=logo, question="Analyze: colors (hex), style (wordmark/icon/combo), has transparency?")`
6. Generate brand brief and save:
```markdown
# Brand Visual Brief
Brand: [name]
Product Category: [category]
Brand Colors: [hex values]
Product Texture: [matte / glossy / fabric / metal / glass / organic]
Product Shape: [compact / elongated / irregular / flat / volumetric]
Logo Type: [wordmark / icon / combo / none]
Key Visual Elements: [what to highlight]
Copy Text: [slogan if provided]
Style Reference: [description of reference if provided]
Duration: [Ns]
Aspect Ratio: [ratio]
```
### Validation
```bash
python3 .claude/skills/dynamic-poster/scripts/validate_poster_brief.py .poster/{project_name}/brief.md
```
### File
```
./.poster/{project_name}/brief.md
```
---
## Phase 2: Creative Concept ⛔ REQUIRES USER APPROVAL
### Goal
Generate **3 creative concept options** for a single-scene surreal micro-story. Each option describes the scene, what absurd event happens, and the visual style. Do NOT proceed until user approves one.
### Concept Generation
Load `references/creative-dimensions.md` for the full creative reasoning framework.
**Step 1: Extract 3 creative seeds** from Phase 1 product analysis:
- **Form**: shape, silhouette, proportions → "what if this form appeared at wrong scale/angle/place?"
- **Material**: texture, surface, weight, temperature → "what if it was born from / becoming impossible material?"
- **Function**: use case, user action → "what if this function happened in an absurd context?"
**Step 2: Apply a different creative dimension** to each seed (5 dimensions available):
1. Physical Impossibility — defy a specific physical law
2. Context Collision — wrong place, everyone acts normal
3. Temporal Paradox — wrong time scale (archaeological, geological, futuristic)
4. Sensory Translation — visualize smell, sound, touch as physical phenomena
5. Material Metamorphosis — material transforming into/from impossible substance
**Step 3: Assign a different emotional tone** to each:
- Playful(玩味)— lighthearted, makes you smile
- Sublime(庄严)— awe-inspiring, gallery-worthy
- Provocative(冒犯)— challenges expectations
**Each option must differ on at least 2 of 3 axes**: seed × dimension × tone.
**Step 4: Design the conflict arc(内容反差)** — the video's narrative tension. Image = 场景反差 (product in wrong place). Video = 内容反差 (scene中发生荒诞的变化,强化产品信息)。三种常见模式:
- **威胁免疫型**: 外力攻击场景,场景纹丝不动(卡车撞沙发,沙发没事)
- **行为传染型**: 产品的某种特质传染给周围的人/物(路人被沙发吸引全部坐下)
- **荒诞演变型**: 场景内发生超现实的渐进变化(牛仔裤缝线长出花园,沙漠沧海桑田)
结构:**Setup**(静态场景)→ **Escalation**(荒诞事件发生并升级)→ **Payoff**(最终画面定格产品信息)→ **Brand Message**(一句话)
### Output Format
Write 3 options, save to `concept_options.md`:
```markdown
# Creative Concept Options
## Option A: [one-sentence impossible thing]
**Creative Seed**: [Form / Material / Function] — [which product feature]
**Creative Dimension**: [which dimension]
**Emotional Tone**: [Playful / Sublime / Provocative]
**Scene**: [2-3 sentences — the static scene setup(场景反差)]
**Conflict**: Setup: [静态场景] → Escalation: [荒诞事件发生并升级] → Payoff: [最终画面] → Brand Message: [一句话]
**Visual Style**: [from photography-styles.md — camera, lens, film stock, photographer, imperfections]
---
## Option B: [different impossible thing]
...
## Option C: [different impossible thing]
...
```
### User Approval Gate ⛔
Present the 3 options via `AskUserQuestion`:
```
AskUserQuestion(
questions=[{
question: "以下是 3 个创意方案,请选择最喜欢的一个(或提出修改意见):",
header: "Creative",
options: [
{ label: "方案 A", description: "[the impossible thing — 1 sentence]" },
{ label: "方案 B", description: "[the impossible thing — 1 sentence]" },
{ label: "方案 C", description: "[the impossible thing — 1 sentence]" }
],
multiSelect: false
}]
)
```
**If user selects "Other"**: incorporate their feedback, revise or create new options, re-present.
**After approval**: expand the selected option into a full prompt.
### Frame Prompt (post-approval)
For the **approved concept only**, write the full concept document:
```markdown
# Selected Concept
Creative Seed: [seed]
Creative Dimension: [dimension]
Emotional Tone: [tone]
The Impossible Thing: [one sentence]
Scene: [static scene(场景反差)]
Conflict: Setup → Escalation → Payoff → Brand Message
Visual Style: [from photography-styles.md]
## Conflict Arc
**Setup**: [2-3 sentences — the static scene with product in the wrong place]
**Escalation**: [2-3 sentences — the absurd event unfolds and intensifies]
**Payoff**: [2-3 sentences — the final striking image that delivers the brand message]
**Brand Message**: [one sentence]
## Visual Style
**Camera**: [specific camera + lens]
**Film Stock**: [color palette reference]
**Imperfections**: [film grain, light leaks, vignetting, etc.]
**Photographer Reference**: [if applicable]
```
### Prompt Construction Rules
Every prompt must include: 1) Surreal scene with specific impossible element 2) Color: `cool desaturated tones, steel gray, off-white, matte black, with [1-2 accent colors]` 3) Composition: `centered, full-frame, [low angle/forced perspective], [aspect ratio]` 4) Style anchor: `[specific camera + lens + film stock from Visual Style]` 5) Quality: `editorial photography, no watermark`
Append cinematic aesthetic suffix from `references/cinematic-aesthetic-prompt.md`.
### File
```
./.poster/{project_name}/
├── concept_options.md # 3 options for user review
└── concept.md # selected concept with full prompt
```
---
## Phase 3: Style Reference ⛔ REQUIRES USER APPROVAL
### Goal
生成 **3 张风格参考图**,锁定视觉风格方向。**先定风格,再写分镜**——风格决定了后续所有 Beat 的 Image Prompt 如何写。
### Generation
以 concept.md 中的 Scene 描述 + Visual Style 为基础,生成 3 张不同风格倾向的变体:
```
batch_image_generation(
count=3,
prompts=["[Scene description — variant A: cool minimalist, desaturated, clean negative space]",
"[Scene description — variant B: film grain heavy, warm undertones, analog texture]",
"[Scene description — variant C: high contrast dramatic, deep shadows, cinematic lighting]"],
image_paths=[[product_image], [product_image], [product_image]],
aspect_ratios=["[ratio]", "[ratio]", "[ratio]"],
resolution="2K"
)
```
3 张变体的差异在**色调/质感/光影**,不在构图或场景内容。
### User Selection Gate ⛔
```
AskUserQuestion(
questions=[{
question: "以下是 3 种视觉风格方向,请选择最喜欢的一种(或提出修改意见):",
header: "Style",
options: [
{ label: "风格 A", description: "冷调极简 — 低饱和、干净留白、钢灰色调" },
{ label: "风格 B", description: "胶片质感 — 颗粒感、暖底色、模拟相机texture" },
{ label: "风格 C", description: "高对比戏剧 — 深阴影、电影打光、视觉张力强" }
],
multiSelect: false
}]
)
```
**If user selects "Other"**: incorporate feedback, regenerate with adjusted style parameters, re-present.
**After selection**: save chosen style reference image for Phase 4 分镜和 Phase 5 生图。
### Files
```
./.poster/{project_name}/style/
└── style_ref.png
```
---
## Phase 4: Storyboard Script
### Goal
将用户选中的创意概念拆解为**视觉节拍(Beats)**,形成分镜脚本。Beat 数量由创意复杂度和视频时长决定,不硬编码。自动生成,不需要用户审批。
**前置依赖**Phase 3 选定的 style_ref.png 决定了整体视觉基调,所有 Beat 的 Image Prompt 必须与该风格一致。
### Beat Structure
根据 concept.md 中的冲突弧线,按 `references/video-motion-prompt-guide.md` 的视觉翻译规则,将冲突弧线拆解为若干视觉节拍。每个 Beat 代表一个关键视觉状态:
```markdown
# Storyboard — [Project Name]
Beat 数量: N(根据冲突弧线和视频时长决定)
## Beat 1: [节拍名称]
- **时间**: [start]s - [end]s
- **景别**: [全景 / 中景 / 近景 / 特写]
- **画面描述**: [该节拍的静态画面,2-3句,英文]
- **关键元素**: [核心视觉元素]
- **Image Prompt**: [完整的英文生图 prompt,含相机/镜头/胶片/景别]
## Beat 2: [节拍名称]
- **时间**: [start]s - [end]s
- **景别**: [全景 / 中景 / 近景 / 特写]
- **画面描述**: [该节拍的静态画面,2-3句,英文]
- **关键元素**: [核心视觉元素]
- **Visual Delta**: [与 Beat 1 的可见差异——什么出现了/消失了/改变了形态/改变了位置/改变了规模]
- **Image Prompt**: [完整的英文生图 prompt,含相机/镜头/胶片/景别]
## Beat N: [节拍名称]
- **Visual Delta**: [与前一个 Beat 的可见差异]
...
```
### Storyboard Rules
Load `references/storyboard-rules.md` for: 景别设计表、Visual Delta 规则(合格/不合格示例)、Beat 数量参考、人脸规避规则、品牌文字规则。
**核心规则速查**
- 相邻 Beat 必须切换景别(全景/中景/近景/特写)
- Visual Delta 必须回答"观众 1 秒内能看出什么不同"——不可见的变化(氛围、光线微调)不合格
- 第一个 Beat = 静态起始场景,最后一个 Beat = 定格收尾 + 品牌文字
- 禁止正面人脸(Seedance 安全):用背影/剪影/局部肢体/物体代替
- Prompt 必须包含 `no visible face, no facial features`
### Files
```
./.poster/{project_name}/storyboard.md
```
---
## Phase 5: Storyboard Frames
### Goal
根据分镜脚本 + 选中的风格参考图,为每个 Beat 生成一张分镜图。自动生成,不需要用户审批。
### Generation
根据 Phase 4 分镜脚本中的 Beat 数量 N,批量生成分镜图。**Payoff 帧(最后一帧)含品牌文字,需单独处理**。
**Beat 1 ~ Beat N-1**(不含文字):批量生成
```
batch_image_generation(
count=N-1,
prompts=["[Beat 1 Image Prompt]", "[Beat 2 Image Prompt]", ...],
image_paths=[[style_ref, product_image], ...],
aspect_ratios=["[ratio]", ...],
resolution="2K"
)
```
**Beat NPayoff 帧,含品牌名/slogan**:用擅长文字渲染的模型单独生成
```
qwen_image_generation(
prompt="[Beat N Image Prompt,含品牌名和 slogan 的文字描述]",
image_paths=[style_ref, product_image],
aspect_ratio="[ratio]"
)
```
如果 `qwen_image_generation` 文字渲染效果不佳,fallback 到 `image_generation_tool`
`style_ref` 作为风格参考传入,确保所有分镜图视觉风格统一。
### Contrast Gate ⚠️
`read_media` 批量检查所有分镜图,**重点验证 Beat 间差异度**:
```
read_media(
file_paths=["beat_1.png", "beat_2.png", ..., "beat_N.png"],
question="Compare these images in sequence. For each consecutive pair, describe: 1) What objects/elements are DIFFERENT between them? 2) What percentage of the frame has visually changed? 3) Would a viewer instantly notice the difference at a glance? Answer YES/NO for each pair."
)
```
**不合格标准**(任一触发重新生成):
- 相邻 Beat 的画面变化面积 < 30%
- 产品在画面中的位置/状态完全相同
- read_media 判断"viewer would NOT instantly notice the difference"
**修复方式**:重新生成不合格的 Beat,在 prompt 中更显式地描述 Visual Delta 对应的视觉变化。
### Files
```
./.poster/{project_name}/frames/
├── beat_1.png
├── beat_2.png
├── ...
└── beat_N.png
```
---
## Phase 6: Motion Video
### Goal
将分镜图 + 故事剧本交给 `seedance_multimodal_video`,一次生成完整的故事短片。分镜图提供视觉锚点,剧本 prompt 讲述完整故事。
### Primary: `seedance_multimodal_video`
```
seedance_multimodal_video(
prompt="[完整故事短片剧本,见下方 Story Prompt 编写规则]",
reference_image_paths=["beat_1.png", "beat_2.png", ..., "beat_N.png"],
first_frame_image_path="beat_1.png",
duration=[target duration],
ratio="[ratio]",
model_name="seedance2.0",
generate_audio=true
)
```
`first_frame_image_path` 锁定起始帧。`reference_image_paths` 提供所有分镜图作为故事的视觉锚点(最多 9 张)。
Record whether the video model produced audio → determines Phase 7.
### Story Prompt
Load `references/story-prompt-guide.md` for complete prompt template (Opening → Inciting event → Rising action → Climax → Resolution) and 8-item checklist.
**速查**prompt 是完整故事(150-250 词),用 `image N` 标记视觉锚点,只用视觉动词(grows/spreads/cracks),禁止叙事词(realizes/decides)。必须包含 `no visible human face` 和产品不变状态声明。
### Fallback Chain
`seedance_multimodal_video` with `seedance2.0` 失败时:
1. `seedance_multimodal_video` with `seedance2.0-fast`
2. `seedance_image_to_video` with `first_frame_image_path="beat_1.png"`(退回单首帧模式,prompt 用完整故事剧本)
3. **网格图 FallbackSeedance 审核拒绝时)**
- 将所有分镜图横向拼接成一张网格图,仍交给 Seedance 生成
- Pillow 拼接:
```python
from PIL import Image
imgs = [Image.open(f).convert("RGB") for f in beat_frames]
min_h = min(img.height for img in imgs)
resized = [img.resize((int(img.width * min_h / img.height), min_h)) for img in imgs]
grid = Image.new("RGB", (sum(img.width for img in resized), min_h))
x = 0
for img in resized: grid.paste(img, (x, 0)); x += img.width
grid.save("beats_grid.jpg", quality=92)
```
- 用 `seedance_multimodal_video` 传入网格图 + 故事剧本
4. `kling_video_generation` with `first_frame_image_path="beat_1.png"`, `mode="pro"`, `enable_sound=true`
5. 平台默认视频生成 with `first_frame_images=["beat_1.png"]`(无音频 → Phase 7 处理)
### Files
```
./.poster/{project_name}/video/
└── final_video.mp4
```
---
## Phase 7: Final Output (conditional)
**Skip entirely if** Phase 6 视频已有音频且时长正确(Seedance `generate_audio=true` 或 Kling `enable_sound=true`)。直接将 Phase 6 输出复制为 final.mp4。
**Execute if** 视频无音频、音频不连贯(逐 Beat 拼接)、或时长需要修正。
### Step 1: BGM (if no audio)
```
music_generation_with_chat(
prompt="[duration+2]s [auto-derived mood], instrumental only, no vocals, clean mix, cinematic",
duration=[video_duration + 2]
)
```
BGM mood: 运动/潮牌→urban lo-fi, 香水/美妆→ethereal ambient, 科技→retro synthwave, 食品→playful quirky, 配饰→jazz piano, 时尚→cool downtempo.
Embed: `embed_audio_track_to_video(video_path, audio_path, replace_existing=true)`
### Step 2: Trim + Fade (if duration mismatch)
```
ffmpeg(args=["-y", "-i", input, "-t", "{dur}", "-af", "afade=t=out:st={dur-1}:d=1", output])
```
### Files
```
./.poster/{project_name}/output/
└── final.mp4
```
---
## Completion
```
--- Dynamic Poster Complete ---
Brand: {brand_name}
Surreal Concept: {the_impossible_thing}
Duration: {duration}s | Aspect: {ratio}
Output: .poster/{project_name}/output/final.mp4
```
---
## Anti-Patterns
Load `references/anti-patterns.md` for full list (14 items, organized by 创意/分镜/视频三层).
**Top 3 致命错误**
1. **堆砌超现实元素** — 每个视频只能有 ONE 个不可能的事物
2. **正面人脸** — Seedance 直接拒绝,必须用背影/剪影/物体代替
3. **模糊的 motion prompt** — 必须极度详细(起点/方向/速度/形态),一句话概括 = 模型乱猜
## Error Handling
| Error | Recovery |
|-------|----------|
| Product image too low-res | Run `super_resolution` first |
| Logo has no transparency | Use `image_generation_tool` to remove background |
| Storyboard frame looks too "AI" | Re-generate with more imperfection keywords from `references/photography-styles.md`, or try different style variant in Phase 3 |
| Product not recognizable | Re-generate with stronger product reference, add product close-up keywords |
| Storyboard frames inconsistent | Re-generate individual beats with style_ref as first image_path to enforce style unity |
| Seedance multimodal fails | Fallback: seedance2.0-fast → seedance_image_to_video (beat_1 as first frame) → grid mosaic → Kling pro → 平台默认视频 API |
| Video audio quality poor | Generate BGM via `music_generation_with_chat` and replace audio track |
+8
View File
@@ -0,0 +1,8 @@
面向产品营销的动态海报 / 动态视觉创作工具。
将品牌素材(如 logo、产品图)转换为超现实风格的短视频海报,
采用“违背物理直觉的并置”创意方式,把产品放入不可能场景中并以写实手法呈现。
触发词包括:"dynamic poster"、"motion poster"、"animated poster"、"video poster"、
"product poster video"、"social media poster"、"event teaser"、
"动态海报"、"视频海报"、"动态视觉"、"活动预告海报"、"产品海报视频"、
"社媒物料"、"运营素材"、"品牌动态图"、"海报动效"。
不适用于:长篇宣传视频(应使用 promo-video)、MV(应使用 mv-creator)或静态海报。
@@ -0,0 +1,24 @@
# Anti-Patterns — 动态海报常见错误
## Creative 创意层
- **Don't pile up surreal elements**: ONE impossible thing per video. More = visual noise.
- **Don't lose the product**: The product must be clearly recognizable. Surreal context enhances, never obscures.
- **Don't use warm/saturated color palettes**: Stick to cool desaturated + accent pops. This is the identity.
- **Don't over-process**: Light film grain is good. Heavy filters, HDR glow, or painterly effects = AI look.
- **Don't use generic AI prompts**: Every prompt must name a specific camera, lens, and film stock.
## Storyboard 分镜层
- **Don't repeat the same shot type**: 相邻 Beat 必须切换景别。全景→全景 或 特写→特写 = 视觉单调。用景别切换制造剪辑节奏。
- **Don't put text in non-Payoff beats**: 只有最后一个 BeatPayoff)可以包含品牌名/slogan,中间 Beat 的 prompt 禁止文字。
- **Don't skip Visual Delta**: 相邻 Beat 之间没有清晰、可量化的视觉差异 = 视频模型不知道该变什么。每个 Visual Delta 必须回答"观众 1 秒内能看出什么不同"。
## Video 视频层
- **Don't make empty motion videos**: Video must have 内容反差 — a visible, progressive change that delivers the brand message. Not just "scene comes alive" or ambient camera movement.
- **Don't make the escalation instant**: The absurd event must build progressively so the audience watches it unfold — not a single flash cut.
- **Don't lose the product in the escalation**: No matter how dramatic the event, the product must remain the visual and narrative center.
- **Don't describe scenes in motion prompts**: Motion prompt 的 80% 必须是变化动作描述,不是静态场景描述。如果 prompt 读起来像 3 张图的说明文字而不是一段连续动作,视频就不会有叙事张力。
- **Don't show frontal faces**: Seedance 对正面人脸极度敏感,会直接拒绝。所有分镜图和 motion prompt 中禁止正面人脸——用背影、剪影、局部肢体、物体代替人物。
- **Don't write vague motion prompts**: Seedance 的 prompt 必须极度详细——每个 Visual Delta 展开为 ≥2 句动作描述,包含起点位置、扩展方向、速度节奏、物理形态。一句话概括 = 模型乱猜。
@@ -0,0 +1,81 @@
# Cinematic Aesthetic Prompt Suffix — 电影美学后缀
在所有生图 prompt 的末尾追加以下后缀,确保去 AI 感 + 统一风格基调。
---
## 通用后缀模板
```
[photography style] aesthetic, editorial photography, no text, no watermark, no logo
```
`[photography style]``references/photography-styles.md` 的参考风格列中选取,例如:
- `Juergen Teller casual editorial`
- `Tim Walker fantastical editorial`
- `Paolo Roversi diffused ethereal`
- `Martin Parr saturated documentary`
---
## 按 Emotional Tone 的推荐后缀
### Playful(玩味)
```
casual snapshot aesthetic, editorial photography, no text, no watermark, no logo
```
关键词:snapshot, casual, candid, everyday, raw
### Sublime(庄严)
```
diffused ethereal aesthetic, editorial photography, no text, no watermark, no logo
```
关键词:ethereal, serene, contemplative, luminous, refined
### Provocative(冒犯)
```
raw confrontational aesthetic, editorial photography, no text, no watermark, no logo
```
关键词:raw, gritty, confrontational, unapologetic, visceral
---
## 绝对禁止的词
以下词汇会触发 AI 模型的"完美均匀"倾向,是 AI 感的直接来源:
| 禁止 | 替代方案 |
|------|---------|
| 8K, 4K, ultra HD | 指定具体相机型号 |
| hyper-realistic, ultra-realistic | 指定具体胶片型号 |
| masterpiece, best quality | 指定具体摄影师风格 |
| highly detailed, intricate details | 指定具体镜头焦段 |
| octane render, unreal engine | 指定具体打光方式 |
| perfect lighting, perfect composition | 描述具体瑕疵(颗粒、暗角、漏光) |
| cinematic lighting | 指定光源类型(自然窗光、闪光灯直打、侧光) |
| professional photo | 指定相机+镜头组合 |
---
## 瑕疵注入
真实摄影的标志是**有选择的不完美**。在后缀中至少包含 1-2 个瑕疵关键词:
| 瑕疵类型 | Prompt 关键词 |
|---------|-------------|
| 胶片颗粒 | `film grain`, `grainy texture` |
| 暗角 | `natural vignetting`, `corner falloff` |
| 漏光 | `light leaks`, `lens flare` |
| 柔焦边缘 | `soft focus edges`, `bokeh falloff` |
| 轻微过曝 | `slight overexposure`, `highlight bloom` |
| 色彩偏移 | `color shifts`, `cross-processed tones` |
| 浅景深 | `shallow depth of field`, `selective focus` |
| 运动模糊 | `slight motion blur` |
**规则**:每张图选 1-2 个与该相机/胶片组合匹配的瑕疵,不要全部堆砌。
@@ -0,0 +1,130 @@
# Creative Dimensions — 创意维度框架
从产品的 **形态 / 材质 / 功能** 中提取创意种子(Creative Seed),然后施加以下 5 种维度之一,生成超现实概念。
---
## Step 1: 提取 Creative Seed
| Seed 类型 | 观察对象 | 引导问题 |
|-----------|---------|---------|
| **Form** | 形状、轮廓、比例、体积 | "如果它以错误的比例存在?" |
| **Material** | 表面纹理、重量、温度、透明度 | "如果它正在变成/来自不可能的材质?" |
| **Function** | 使用方式、用户动作、核心功能 | "如果这个功能在荒诞的语境下发生?" |
每个产品至少提取 3 个 seed(各类型各一),用于生成 3 个不同方案。
---
## Step 2: 施加创意维度
### 1. Physical Impossibility — 违背物理定律
产品以违反已知物理规则的方式存在。
| 子类型 | 示例 |
|--------|------|
| 尺度违规 | 运动鞋大如建筑,行人如蚂蚁 |
| 重力违规 | 沙发悬浮在峡谷之间 |
| 质量违规 | 一个人用手指托起一辆汽车 |
| 数量违规 | 1000 只相同的鞋子铺满整条街 |
**适配 Seed**: 优先 Form(形状/比例最容易做尺度变化)
### 2. Context Collision — 错位碰撞
产品出现在完全不属于它的场景中,但场景内所有人/物表现得像这完全正常。
| 子类型 | 示例 |
|--------|------|
| 场所错位 | 手表出现在考古发掘现场 |
| 角色错位 | 猫穿西装在会议室查看腕表 |
| 用途错位 | 运动鞋被当作花瓶插花 |
| 状态错位 | 高端包包出现在建筑工地当工具箱 |
**适配 Seed**: 优先 Function(功能在错误语境下最有张力)
### 3. Temporal Paradox — 时间错位
产品跨越了不属于它的时间维度——出现在遥远的过去、未来、或以地质/天文时间尺度存在。
| 子类型 | 示例 |
|--------|------|
| 考古时间 | 耳机被从古代遗址中挖掘出来 |
| 地质时间 | 口红色号出现在地层截面中 |
| 数码考古 | 产品从 Windows 98 弹窗中弹出 |
| 未来遗迹 | 产品被陈列在未来博物馆 |
**适配 Seed**: 优先 Material(材质的时间感——风化、氧化、数码化——最有戏)
### 4. Sensory Translation — 感官翻译
将产品的某种不可见属性(气味、声音、触感、味道)转化为可见的物理现象。
| 子类型 | 示例 |
|--------|------|
| 气味可视化 | 香水的气味变成金色粒子在城市中扩散 |
| 声音可视化 | 音箱的低音变成让水面震颤的涟漪 |
| 触感可视化 | 织物的柔软让接触到的金属弯曲 |
| 温度可视化 | 饮料的冰冷让周围空气结霜 |
**适配 Seed**: 优先 Function(功能效果的可视化最直观)
### 5. Material Metamorphosis — 材质蜕变
产品正在从一种材质转化为另一种不可能的材质,或者从不可能的材质中诞生。
| 子类型 | 示例 |
|--------|------|
| 自然→人工 | 手表从矿石中结晶生长出来 |
| 人工→自然 | 牛仔裤的缝线长出真实的植物 |
| 固态转化 | 冰川融化露出完整的香水瓶 |
| 解构/重组 | 产品碎裂后碎片重组为新形态 |
**适配 Seed**: 优先 Material(材质之间的转化最有视觉冲击力)
---
## Step 3: 选择 Emotional Tone
| Tone | 中文 | 调性 | 适合品类 |
|------|------|------|---------|
| **Playful** | 玩味 | 轻松有趣,令人会心一笑 | 快消、食品、运动、年轻品牌 |
| **Sublime** | 庄严 | 令人敬畏,画廊级别的美感 | 奢侈品、美妆、手表、高端家居 |
| **Provocative** | 冒犯 | 挑战预期,态度鲜明 | 潮牌、科技、实验性品牌 |
**3 个方案必须至少在 Seed × Dimension × Tone 三轴中有 2 个不同。**
---
## 冲突弧线设计
每个概念必须包含内容反差(视频中的叙事张力)。三种基本模式:
### 威胁免疫型
外力攻击场景中的产品/主体,但主体纹丝不动。**视觉核心**:环境剧变 + 产品绝对静止。
- 不描述"碰撞",描述环境的剧变和产品的静止形成反差
- 用风、灰尘、阴影暗示外力
### 荒诞演变型
从产品出发,一种变化逐步蔓延到整个画面。**视觉核心**:渐进生长 / 材质扩散。
- 从一个精确起点开始扩散
- 速度渐进加快
- 这是视频模型最擅长的类型
### 行为传染型
产品的某种特质传染给周围元素。**视觉核心**:重复动作 + 画面填充。
- 用物体代替人物(鞋子转向 vs 路人模仿)
- 重复同一个简单动作
- 波纹式扩散
---
## 检查清单
- [ ] 3 个方案用了 3 个不同的 Creative Seed
- [ ] 至少用了 2 种不同的 Creative Dimension
- [ ] 3 种 Emotional Tone 各出现至少一次?
- [ ] 每个方案只有 ONE 个超现实元素?
- [ ] 冲突弧线有 Setup → Escalation → Payoff 三段?
- [ ] 环境干净整洁(白色空间/城市/开阔天空),反差突出超现实元素?
@@ -0,0 +1,67 @@
# Photography Style Mapping — 摄影风格映射
根据 **情绪基调 × 产品品类** 选择摄影风格。每个组合指定:相机系统、镜头、色彩基调、摄影师/杂志参考、以及真实瑕疵特征。
**禁止使用**8K、4K、ultra HD、hyper-realistic、masterpiece 等 AI 标志性词汇。这些词触发 AI 模型的"完美均匀"倾向,正是 AI 感的来源。
---
## Playful(玩味)
适合:年轻品牌、食品、运动、快消、生活家居
| 品类 | 相机 + 镜头 | 色彩基调 | 参考风格 | 瑕疵特征 |
|------|------------|---------|---------|---------|
| 运动/潮牌 | Contax T3, Zeiss Sonnar 35mm f/2.8 | Cross-processed Velvia, 偏绿偏黄 | Juergen Teller casual editorial | 闪光灯直打, 轻微过曝, 业余快照感 |
| 食品/饮品 | Pentax 67, SMC 105mm f/2.4 | Kodak Ektar 100, 高饱和暖调 | Martin Parr saturated documentary | 强烈日光, 硬阴影, 色彩过饱和 |
| 家居/生活 | Olympus Mju II, 35mm f/2.8 | Fujifilm Superia 400, 日常暖调 | Wolfgang Tillmans intimate snapshots | 自然光窗光, 轻微运动模糊, 随意构图感 |
| 科技/电子 | Ricoh GR III, 28mm f/2.8 | Ilford HP5 pushed to 1600, 高对比黑白 | Daido Moriyama grainy street | 粗颗粒, 高对比, 暗角, 偶尔失焦 |
---
## Sublime(庄严)
适合:奢侈品、美妆、手表、建筑、高端家居
| 品类 | 相机 + 镜头 | 色彩基调 | 参考风格 | 瑕疵特征 |
|------|------------|---------|---------|---------|
| 奢侈品/手表 | Hasselblad 500C/M, Zeiss Planar 80mm f/2.8 | Kodak Portra 160, 低饱和柔和 | Paolo Roversi diffused ethereal | 极浅景深, 柔焦边缘, 自然暗角 |
| 香水/美妆 | Mamiya RZ67, 110mm f/2.8 | Fujifilm Pro 400H, 冷调柔和 | Tim Walker fantastical editorial | 轻微过曝高光, 柔和阴影过渡, 胶片颗粒 |
| 建筑/空间 | Linhof Technika, Schneider 150mm f/5.6 | Kodak Portra 400, 自然还原 | Andreas Gursky large format precision | 极致锐度中心 + 边缘自然衰减, 透视校正 |
| 高端家居 | Phase One IQ4, Schneider 80mm f/2.8 | Kodak Ektar 100, 精确色彩 | François Halard interior editorial | 自然窗光, 长曝光轻微运动, 建筑透视 |
---
## Provocative(冒犯)
适合:潮牌、科技、有态度的品牌、实验性产品
| 品类 | 相机 + 镜头 | 色彩基调 | 参考风格 | 瑕疵特征 |
|------|------------|---------|---------|---------|
| 潮牌/街头 | Yashica T4, Zeiss Tessar 35mm f/3.5 | Cinestill 800T, 钨丝灯偏色 | Terry Richardson flash-heavy raw | 直闪红眼, 皮肤高光过曝, 粗犷 |
| 科技/数码 | Canon AE-1, FD 50mm f/1.4 | Lomography Color 400, 漏光偏色 | Petra Collins dreamy haze | 漏光, 色彩偏移, 柔焦, 颗粒感 |
| 家居/生活方式 | Leica M6, Summicron 35mm f/2 | Kodak Tri-X 400, 经典黑白 | Helmut Newton dramatic contrast | 强侧光, 深黑阴影, 戏剧性反差 |
| 食品/实验 | Holga 120, plastic lens | Fujifilm Velvia 50 cross-processed | David LaChapelle hyper-surreal | 严重暗角, 焦点不可预测, 色彩扭曲 |
---
## 使用方式
Phase 2 确定 Emotional Tone 后,根据产品品类在上表中找到对应行,将 **相机 + 镜头 + 色彩基调 + 瑕疵特征** 写入 concept.md 的 Visual Style 字段,并嵌入 key frame prompt。
**Prompt 模板**
```
[scene description], shot on [相机], [镜头], [色彩基调] color palette,
[瑕疵特征], [参考风格] aesthetic, editorial photography,
no text, no watermark, no logo
```
**绝对禁止写入 prompt 的词**
- 8K, 4K, ultra HD, UHD
- hyper-realistic, ultra-realistic
- masterpiece, best quality
- highly detailed, intricate details
- octane render, unreal engine
- perfect lighting, perfect composition
这些词是 AI 生成图片的"指纹",会立即暴露 AI 感。用具体的相机/胶片/摄影师替代它们。
@@ -0,0 +1,39 @@
# Poster Brief & Concept Example - 完整示例
以下是一个护肤品品牌动态海报的完整简报和创意概念示例。
---
# Brand Visual Brief
Brand: AURA Skincare
Product Category: 护肤品 / 面部精华
Brand Colors: #2D5A3D (森林绿), #F5E6D3 (暖米白), #D4A574 (琥珀金)
Product Texture: glass bottle, glossy liquid, amber serum
Product Shape: elongated, slender dropper bottle
Logo Type: wordmark (衬线体)
Key Visual Elements: 精华液的琥珀色泽、玻璃瓶身的光泽、滴管的液滴
Copy Text: "自然之力,肌肤新生"
Duration: 8s
Aspect Ratio: 9:16
---
# Selected Concept
Creative Seed: Material — 玻璃瓶身与琥珀色液体的质感
Creative Dimension: Material Metamorphosis — 水晶与玻璃的材质转化
Emotional Tone: Sublime(庄严)
The Impossible Thing: 精华瓶从一棵巨大的琥珀色水晶树的树干中自然生长出来
Scene: 干净的白色画廊空间,一棵由琥珀色水晶构成的抽象树矗立中央,精华瓶从树干上"生长"出来
Conflict: Setup: 精华瓶半嵌在水晶树干中,画廊寂静 → Escalation: 树干开始剧烈碎裂,水晶碎片如暴风般向四周飞射 → Payoff: 所有碎片在接近瓶身时突然减速悬停,围绕精华瓶形成一圈完美的光环,瓶身毫发无损 → Brand Message: AURA — 自然之力,肌肤新生
Visual Style: Mamiya RZ67, 110mm f/2.8, Fujifilm Pro 400H, 冷调柔和, 胶片颗粒, Tim Walker fantastical editorial
## Key Frame Prompt
**Prompt**: A surreal scene in a clean white gallery space, an abstract tree made of translucent amber crystal growing from the polished white floor, an AURA skincare serum bottle emerging naturally from the crystal trunk as if it grew there like a fruit, golden amber serum droplets dripping from crystal branches, cool desaturated white gallery walls with warm amber crystal as the sole focal point, centered composition, full-frame, low angle, clean diffused gallery lighting from skylights, shot on Mamiya RZ67, 110mm f/2.8, Fujifilm Pro 400H cool tones, film grain, soft highlight bloom, Tim Walker fantastical editorial aesthetic, no text, no watermark, no logo
## Motion Prompt
**Conflict Narrative**: A serum bottle is half-embedded in an amber crystal tree trunk in a white gallery. The crystal trunk begins to violently fracture and shatter, shards exploding outward like a storm. As fragments approach the bottle, they suddenly decelerate and freeze mid-air, forming a perfect halo around the untouched bottle. The bottle remains pristine, a single golden droplet falls from the dropper tip. Single continuous shot, no cuts.
**Aesthetic**: Shot on Mamiya RZ67, 110mm f/2.8, Fujifilm Pro 400H cool tones, film grain, soft highlight bloom.
@@ -0,0 +1,45 @@
# Story Prompt Guide — 故事剧本 Prompt 编写规则
Seedance 的 prompt 是一个**完整的故事短片剧本**,不是分镜的拼接。模型需要理解「发生了什么事」才能生成连贯的视频。
---
## Prompt 结构
```
[Opening] image 1 is the opening shot: [完整的开场场景描述,产品在什么环境中,什么状态,光线如何,3-4句].
[Inciting event] [故事的触发点——什么开始变化,从画面的哪个位置开始,2-3句]. [变化的初始阶段——速度慢,范围小,具体描述物理形态].
[Rising action] [变化加速和扩展——从哪里蔓延到哪里,覆盖了什么,新元素出现,2-3句]. The scene progresses toward image 2. [变化到达中间状态的具体描述].
[Climax] [变化到达顶峰——最戏剧性的瞬间,画面被变化填满,2-3句]. The scene arrives at image N.
[Resolution] [最终定格——产品在变化后的世界中居中,品牌信息呈现,1-2句].
Throughout: [产品] remains [不变状态]. No visible human face. Shot on [camera], [lens], [film stock], [imperfections]. [camera movement].
```
---
## 关键原则
- 这是一个有**起承转合**的故事,不是几张图的说明文字
-`image 1`, `image 2`, ..., `image N` 标记故事的视觉锚点,让模型知道在故事的哪个节点对应哪张参考图
- 故事是连续的——句子之间用因果关系和时间推进连接,不是断裂的场景罗列
- 变化必须有**物理细节**:什么物体、从哪里开始、向什么方向、以什么速度、变成什么形态
- 禁止叙事词(realizes, decides, despite)、情感词(feels, thinks, surprised
- 只用**视觉动词**grows, spreads, cracks, crawls, floats, shatters, freezes, rotates, fills
---
## 检查清单
- [ ] 读起来像一个完整的故事(有开头、发展、高潮、结尾)?
- [ ]`image N` 标记了每个视觉锚点?
- [ ] 变化有物理细节(起点位置、方向、速度、形态)?
- [ ] 句子之间有因果/时间连接,不是断裂的场景列表?
- [ ] 产品的不变状态被显式声明?
- [ ] 包含 `no visible human face`
- [ ] 整段 prompt 在 150-250 词之间?
- [ ] 结尾明确描述了最终定格画面?
@@ -0,0 +1,78 @@
# Storyboard Rules — 分镜脚本规则
## 景别设计规则
**相邻 Beat 必须切换景别。** 如果连续两个 Beat 都是全景或都是特写,视频会显得单调。
景别类型及用法:
| 景别 | 英文 | 用途 | Image Prompt 关键词 |
|------|------|------|-------------------|
| 全景 | Wide shot | Setup 建立场景,展示产品与环境关系 | `wide shot, full environment visible, product in context` |
| 中景 | Medium shot | 展示产品主体 + 部分环境 | `medium shot, product fills 40-60% of frame` |
| 近景 | Medium close-up | 突出产品细节 + 少量环境 | `medium close-up, product fills 60-80% of frame` |
| 特写 | Close-up | 产品纹理/材质/细节 | `close-up, macro detail, shallow depth of field` |
**典型景别组合**3 Beat 为例):
- 全景 → 近景 → 特写(渐进聚焦)
- 特写 → 全景 → 中景(先抓眼球再展开)
- 中景 → 全景 → 特写(先展示再铺开再收焦)
---
## Visual Delta 规则
**Visual Delta 是整个工作流的关键。** 如果相邻 Beat 的图看起来差不多,视频就不会有叙事张力。
每个 Visual Delta 必须回答:**"如果把两张图并排放,观众 1 秒内能看出什么不同?"**
合格的 Visual Delta 示例:
- "地面从干净水泥变成 60% 被绿色植被覆盖"
- "产品周围新增 5-6 个同方向倾斜的物体"
- "背景从完整建筑变成碎片悬浮状态"
- "画面从单一产品变成 20+ 个同类产品填满货架"
不合格的 Visual Delta
- "氛围更紧张" ← 不可见
- "变化加剧" ← 太模糊
- "光线变暖" ← 差异太小,视频模型几乎不会表现
---
## Beat 数量参考
| 时长 | 建议 Beat 数 | 说明 |
|------|-------------|------|
| 5s | 2-3 | 起始 + 变化/定格 |
| 8-10s | 3-4 | 起始 + 渐变阶段 + 定格 |
| 12-15s | 4-5 | 起始 + 多阶段变化 + 定格 |
**第一个 Beat 必须是静态起始场景,最后一个 Beat 必须是定格收尾。** 中间 Beat 的数量和内容由冲突弧线自然决定。
---
## Image Prompt 景别关键词
景别必须写进 Image Prompt。示例:
- Wide: `wide shot, full environment visible, product in context`
- Close-up: `close-up, macro detail, shallow depth of field`
---
## 人脸规避规则(Seedance 安全)
Seedance 2.0 对正面人脸极度敏感,会直接拒绝生成。所有分镜图必须遵守:
- **禁止正面人脸**:不出现可辨识的五官(眼睛、鼻子、嘴巴)
- 需要人物时,使用:背影(`seen from behind`)、侧影剪影(`silhouette`)、局部肢体(`hands only`, `feet walking`)、远景小人(`tiny figure in the distance`
- 用物体代替人物传达故事:鞋子自己转向、杯子自己移动、衣服悬浮——比人物行为更容易控制
- 产品特写和环境全景天然安全,优先使用
- Prompt 中主动写入 `no visible face, no facial features, seen from behind` 等排除词
---
## 品牌文字规则
- 仅最后一个 BeatPayoff)的 Image Prompt 中包含品牌名/slogan
- 在 prompt 中描述文字的位置和样式,例如 `the text "BRAND NAME" in clean white sans-serif appears at the bottom center of the frame`
- 如有用户提供的 slogan,也在最后一帧中呈现
- 中间 Beat 的 prompt 中禁止包含任何文字
- Payoff 帧优先使用擅长文字渲染的模型生成(`qwen_image_generation``nano_banana_image_generation`
@@ -0,0 +1,128 @@
# Surreal Concept Examples - 超现实创意概念示例
按产品品类分类的超现实概念参考。每个示例展示完整的创意维度、场景反差(图片)和内容反差(视频冲突弧线)。
---
## 鞋类 / 运动鞋
### Concept: 巨型运动鞋矗立在城市广场
**Creative Seed**: Form — 鞋的体积与比例
**Creative Dimension**: Physical Impossibility — 违背尺度物理定律
**Emotional Tone**: Playful(玩味)
**Scene(场景反差)**: 一双巨大的红色运动鞋放在城市广场中央,行人如蚂蚁般从旁边走过,干净整洁的现代城市背景。
**Conflict(内容反差)**:
- Setup: 巨型运动鞋静静矗立在广场上,行人正常走动
- Escalation: 一辆大型吊车试图将运动鞋吊起移走,钢缆绷紧到极限
- Payoff: 钢缆断裂弹开,吊车被反作用力拖动滑行,运动鞋纹丝不动
- Brand Message: [品牌] — 不可撼动
**Visual Style**: Contax T3, Zeiss Sonnar 35mm f/2.8, cross-processed Velvia, 闪光灯直打, 轻微过曝
**Key Frame Prompt**:
```
A massive oversized red sneaker placed in the center of a clean minimalist city plaza, tiny people walking around it like ants, the sneaker towers at 3 stories tall, cool desaturated tones with steel gray buildings and deep navy sky, the red sneaker is the only high-saturation accent, low angle looking up at the giant shoe, shot on Contax T3, Zeiss Sonnar 35mm f/2.8, cross-processed Velvia color palette, slight overexposure, casual snapshot aesthetic, editorial photography, no text, no watermark, no logo
```
---
## 香水 / 美妆
### Concept: 香水瓶从冰川中升起
**Creative Seed**: Material — 玻璃的通透与冰的质感
**Creative Dimension**: Material Metamorphosis — 冰与玻璃的材质转化
**Emotional Tone**: Sublime(庄严)
**Scene(场景反差)**: 香水瓶从一块正在融化的冰川中浮出水面,碎冰漂浮在周围,干净的白色空间。
**Conflict(内容反差)**:
- Setup: 香水瓶半嵌在巨大的冰块中,周围是寂静的白色空间
- Escalation: 冰块开始剧烈碎裂,大块冰川崩塌坠落,水花四溅
- Payoff: 所有冰块碎裂殆尽化为水,香水瓶完美悬浮在空中,滴水未沾
- Brand Message: [品牌] — 经历一切,依然纯净
**Visual Style**: Mamiya RZ67, 110mm f/2.8, Fujifilm Pro 400H, 冷调柔和, 胶片颗粒
**Key Frame Prompt**:
```
A luxury perfume bottle emerging from a melting glacier block in a clean white studio space, ice cracking to reveal the golden glass bottle, cool desaturated blue-white ice tones contrasting with warm amber bottle, water droplets frozen mid-air, centered composition, shot on Mamiya RZ67, 110mm f/2.8, Fujifilm Pro 400H cool tones, film grain, soft highlight bloom, Tim Walker fantastical editorial aesthetic, no text, no watermark, no logo
```
---
## 科技产品 / 耳机
### Concept: 耳机从像素化弹窗中浮出
**Creative Seed**: Function — 无线连接、数字与现实的边界
**Creative Dimension**: Temporal Paradox — 复古数码与现代科技的时间错位
**Emotional Tone**: Provocative(冒犯)
**Scene(场景反差)**: 耳机从一个 Windows 98 风格的弹窗中半伸出来,悬浮在真实的办公桌上方。
**Conflict(内容反差)**:
- Setup: 耳机悬浮在复古弹窗前方,办公室安静整洁
- Escalation: 屏幕上突然弹出无数报错弹窗和蓝屏死机,系统崩溃,像素化碎片向耳机飞来
- Payoff: 所有数字碎片撞到耳机时被吸收消解,耳机完好无损,LED指示灯平静闪烁
- Brand Message: [品牌] — 噪音终结者
**Visual Style**: Canon AE-1, FD 50mm f/1.4, Lomography Color 400, 漏光偏色, 柔焦
**Key Frame Prompt**:
```
Wireless earbuds floating out of a Windows 98 style dialog box hovering above a minimalist office desk, retro pixelated UI contrasts with sleek modern earbuds, CRT monitor glow effect, cool desaturated office in steel gray and off-white, matte black earbuds with green LED accent, centered composition, shot on Canon AE-1, FD 50mm f/1.4, Lomography Color 400 palette, light leaks, color shifts, Petra Collins dreamy haze aesthetic, no text, no watermark, no logo
```
---
## 食品 / 烘焙
### Concept: 厨师团队制作汽车大小的可颂
**Creative Seed**: Form — 可颂的层叠结构与比例
**Creative Dimension**: Physical Impossibility — 违背尺度物理定律
**Emotional Tone**: Playful(玩味)
**Scene(场景反差)**: 一群穿着白色厨师服的厨师围着一个汽车大小的可颂面包工作,干净的工业厨房。
**Conflict(内容反差)**:
- Setup: 厨师们正在给巨型可颂刷蛋液,一切有序
- Escalation: 烤箱突然起火爆炸,火焰冲向巨型可颂,厨房警报大作
- Payoff: 火焰接触到可颂表面时立即被酥皮吸收,可颂表面变得更加金黄酥脆,厨师们面不改色继续工作
- Brand Message: [品牌] — 经得住烤验
**Visual Style**: Pentax 67, SMC 105mm f/2.4, Kodak Ektar 100, 高饱和暖调, 硬阴影
**Key Frame Prompt**:
```
A group of chefs in white uniforms working around a croissant the size of a car in a clean industrial kitchen, one chef on a ladder brushing egg wash, golden croissant fills most of the frame, cool desaturated steel kitchen, warm golden-brown croissant as focal point, low angle, shot on Pentax 67, SMC 105mm f/2.4, Kodak Ektar 100 saturated warm tones, hard sunlight shadows, Martin Parr documentary aesthetic, no text, no watermark, no logo
```
---
## 手表 / 配饰
### Concept: 猫绅士在会议室看手表
**Creative Seed**: Function — 查看时间的动作
**Creative Dimension**: Context Collision — 动物出现在人类职场环境
**Emotional Tone**: Sublime(庄严)
**Scene(场景反差)**: 一只猫穿着西装坐在会议室里,手腕上戴着手表,正在看时间。
**Conflict(内容反差)**:
- Setup: 猫绅士独自坐在会议桌前,优雅地查看腕表
- Escalation: 会议室落地窗外突然暴风骤雨,闪电击中窗玻璃,玻璃碎片飞溅
- Payoff: 碎片在猫绅士面前一米处悬停静止,猫不曾抬头,继续看表,玻璃碎片缓缓落地
- Brand Message: [品牌] — 掌控时间,无惧一切
**Visual Style**: Hasselblad 500C/M, Zeiss Planar 80mm f/2.8, Kodak Portra 160, 极浅景深, 自然暗角
**Key Frame Prompt**:
```
A cat wearing a tailored navy business suit sitting at a clean minimalist conference table, casually checking a luxury gold watch on its wrist, calm serious expression, cool desaturated corporate interior in steel gray and off-white, gold watch face as the only high-saturation accent, centered composition, shot on Hasselblad 500C/M, Zeiss Planar 80mm f/2.8, Kodak Portra 160 palette, shallow depth of field, natural vignetting, Paolo Roversi diffused ethereal aesthetic, no text, no watermark, no logo
```
@@ -0,0 +1,169 @@
# Video Motion Prompt Rewrite Guide — 视频动态提示词重写指南
你是一个视频提示词工程师。你的任务是把创意概念翻译成 AI 视频模型可以执行的逐帧视觉动作描述。
## 核心原则
**你写的不是故事,是一组视觉指令。** 视频模型没有叙事理解能力,它只能渲染可见的物理变化。每一句话都必须描述镜头里观众能看到的东西。
---
## 视频模型能力边界
### 能做好的(高成功率)
| 类型 | 示例 |
|------|------|
| 自然生长 | 植物从缝隙中长出、藤蔓蔓延、花朵绽放 |
| 物质扩散 | 液体流淌、烟雾弥漫、光线扩散、颜色渗透 |
| 粒子运动 | 碎片飞散、灰尘飘落、光斑漂浮、雪花飘落 |
| 环境变化 | 光影推移、天色变化、风吹动物体 |
| 材质转化 | 冰融化、石化、金属氧化、表面结霜 |
| 简单运动 | 物体缓慢旋转、漂浮、下沉、倾斜 |
| 相机运动 | 推拉摇移、环绕、升降 |
### 做不到的(必须避免)
| 类型 | 为什么 |
|------|--------|
| 因果推理 | "卡车撞到沙发但沙发没事" — 模型不懂"撞了但没坏"的因果 |
| 多角色交互 | "路人依次模仿同一个姿势" — 模型无法协调多个主体的行为 |
| 突然出现/消失 | "一辆卡车冲进画面" — 模型倾向于让物体一开始就在画面中 |
| 情感表达 | "男人露出惊讶的表情" — 模型控制不了面部微表情 |
| 文字变化 | "屏幕上弹出错误提示" — 模型不能生成可读文字 |
| 物理碰撞 | "物体A撞击物体B" — 碰撞的瞬间形变和反弹模型处理不了 |
| 时间跳跃 | "几秒后..." — 模型只做连续变化,不做跳切 |
---
## Prompt 语言规范
### 用视觉动词,不用叙事动词
| 不要写(叙事) | 要写(视觉) |
|---------------|-------------|
| The sofa survives the impact | The sofa remains perfectly still, not a single cushion shifts |
| People are attracted to the product | Pedestrians slow down, stop walking, turn heads toward the object |
| The jeans transform the environment | Green shoots push through the denim seams, vines crawl along the legs, spreading onto the concrete floor |
| Time passes | Shadows lengthen across the floor, light shifts from warm to cool |
| The scene becomes chaotic | Dust swirls upward, papers scatter, small objects slide across surfaces |
### 描述顺序
每个 prompt 按时间线组织,用分号或句号分隔阶段:
```
[静态起始状态,2-3句]. [第一个可见变化]. [变化加剧/扩散]. [最终定格画面]. [相机和风格后缀]
```
### 禁止出现的词
- 叙事词:realizes, decides, survives, despite, although, because, suddenly
- 抽象词:meaning, symbolizing, representing, metaphor
- 情感词:feels, thinks, wants, surprised, amazed
- 时间跳跃:later, after, then suddenly, moments pass
---
## 三种冲突类型的视觉翻译
### 1. 威胁免疫型 → 翻译为「外力作用 + 主体静止」
**核心视觉**:环境剧烈变化,产品/场景纹丝不动。
**翻译策略**:不要描述"撞击",而是描述环境的剧变和产品的绝对静止形成反差。
❌ 错误写法:
> A truck crashes into the sofa but the sofa is undamaged.
✅ 正确写法:
> A man sits on a velvet sofa on an empty concrete surface, drinking coffee, steam rising gently. Strong wind begins blowing from the left, dust and debris sweep across the ground. The wind intensifies — newspapers, plastic bags, leaves fly past violently. The man's hair does not move. The coffee steam rises perfectly vertical. A massive shadow sweeps across the ground from left to right. Dust clouds fill the background. When the dust clears, the sofa sits in the exact same position, coffee cup undisturbed, steam still rising straight up. Shot on Hasselblad 500C/M, Zeiss Planar 80mm f/2.8, Kodak Portra 160, shallow depth of field. Single continuous shot, static camera.
**关键技法**
- 用风、灰尘、阴影暗示外力,不直接展示碰撞
- 反复强调产品的静止细节(蒸汽垂直、头发不动、杯子没洒)
- 环境变化要渐进加剧,给模型渲染时间
### 2. 荒诞演变型 → 翻译为「渐进生长 / 材质扩散」
**核心视觉**:从产品出发,一种变化逐步蔓延到整个画面。
**翻译策略**:这是视频模型最擅长的类型。描述一个起点和扩散路径即可。
❌ 错误写法:
> The jeans transform the entire factory into a garden.
✅ 正确写法:
> A pair of denim jeans lies flat on a cracked concrete floor in an empty industrial space, natural light from high windows. A tiny green sprout pushes through the stitching at the knee. More shoots emerge along the seams — small leaves unfurl from the pockets. Thin vines crawl down the legs onto the concrete, spreading outward. The vines accelerate, cracks in the floor widen as roots push through. Green spreads across the floor toward the walls. Ivy begins climbing the nearest rusted steel beam. The lower half of the frame fills with dense foliage, wildflowers blooming in clusters. The jeans remain at the center, now draped in flowers and leaves like a garden centerpiece. Shot on Mamiya RZ67, 110mm f/2.8, Fujifilm Pro 400H cool tones, film grain. Single continuous shot, slow push-in.
**关键技法**
- 从一个精确的起点开始("at the knee", "from the pockets"
- 描述扩散路径(seams → legs → floor → walls → beams
- 速度渐进加快(tiny sprout → vines crawl → accelerate → fills
- 产品始终在画面中心
### 3. 行为传染型 → 翻译为「重复动作 + 画面填充」
**核心视觉**:一个动作/状态从产品传染到周围元素。
**翻译策略**:这是最难的类型。避免多角色复杂交互,改用**物体**代替**人物**,用简单重复代替复杂行为。
❌ 错误写法:
> Pedestrians one by one stop and lean against the wall in the same pose as the man.
✅ 正确写法(物体替代人物版):
> A single red sneaker sits on a clean white shelf in a minimalist shoe store. The camera holds static. The sneaker on the adjacent shelf slowly rotates to face the same direction. Then the next one. One by one, every shoe on every shelf rotates to point toward the red sneaker, like compass needles finding north. The rotation ripples outward row by row — nearby shelves first, then farther ones. The entire store's inventory now faces the red sneaker. The red sneaker sits unchanged at the center. Shot on Contax T3, Zeiss Sonnar 35mm, cross-processed Velvia, slight overexposure. Single continuous shot, static camera.
**关键技法**
- 用物体代替人物(鞋子转向 vs 路人模仿)
- 重复同一个简单动作(旋转),不是多种不同行为
- 波纹式扩散(nearby → farther),给模型清晰的空间顺序
- 产品是"传染源",保持不动
---
## 输入输出格式
### 输入
你会收到:
1. **首帧图描述** — 对实际生成的首帧图的客观描述(来自 read_media
2. **产品信息** — 品牌、品类、关键视觉特征
3. **创意概念** — 冲突类型、场景反差、内容反差的创意描述
4. **视觉风格** — 相机、镜头、胶片、瑕疵特征
5. **视频时长** — 目标秒数
### 输出
一段英文 motion prompt,格式:
```
[对首帧静态场景的精确描述,与实际生成的图一致,2-3句].
[第一个可见变化,精确到位置和动作].
[变化加剧/扩散,描述路径和速度].
[最终定格画面,产品居中,变化完成].
Shot on [camera], [lens], [film stock], [imperfections]. Single continuous shot, [camera movement or static].
```
### 输出检查清单
- [ ] 每一句都描述可见的物理变化?(无叙事词、无情感词、无抽象词)
- [ ] 有清晰的起点位置?("at the knee", "from the left edge"
- [ ] 变化是渐进的?(不是突然发生)
- [ ] 产品始终在画面中心或显著位置?
- [ ] 最终画面是一个可以截图的强构图?
- [ ] 没有要求模型做多角色交互或因果推理?
- [ ] 相机/镜头/胶片信息完整?
- [ ] 整段不超过 150 词?(太长模型会忽略后半段)
---
## 时长与密度对照
| 时长 | 变化密度 | 建议 |
|------|---------|------|
| 5s | 1 个变化,简单直接 | 单一生长/扩散/旋转 |
| 8-10s | 1 个变化 + 加速阶段 | 起始慢 → 中间加速 → 结尾定格 |
| 12-15s | 1 个变化 + 加速 + 扩散到环境 | 产品起始 → 扩散到周围 → 填满画面 |
**铁律**:不管多长的视频,只描述**一个**核心变化。多个变化 = 模型混乱。
@@ -0,0 +1,125 @@
#!/usr/bin/env python3
"""
Dynamic poster brief validator.
Validates the format and content of a poster brief file.
Usage:
python3 validate_poster_brief.py <brief_path>
"""
import argparse
import re
import sys
from pathlib import Path
def validate_brief(brief_path: str) -> tuple[bool, list[str]]:
"""Validate a dynamic poster brief file. Returns (passed, errors)."""
errors = []
warnings = []
path = Path(brief_path)
if not path.exists():
return False, [f"File not found: {brief_path}"]
content = path.read_text(encoding="utf-8")
# --- Required fields ---
required_fields = {
"Brand": r"Brand\s*[:]\s*\S+",
"Product Category": r"Product Category\s*[:]\s*\S+",
"Brand Colors": r"Brand Colors\s*[:]\s*\S+",
"Product Texture": r"Product Texture\s*[:]\s*\S+",
"Key Visual Elements": r"Key Visual Elements\s*[:]\s*\S+",
}
for field, pattern in required_fields.items():
if not re.search(pattern, content):
errors.append(f"Missing or empty required field: {field}")
# --- Brand Colors validation ---
color_match = re.search(r"Brand Colors\s*[:]\s*(.+)", content)
if color_match:
color_line = color_match.group(1)
hex_colors = re.findall(r"#[0-9A-Fa-f]{6}", color_line)
if not hex_colors:
errors.append(
"Brand Colors must include at least one hex color value (e.g., #2D5A3D)"
)
# --- Duration validation ---
duration_match = re.search(r"Duration\s*[:]\s*(\d+)", content)
if duration_match:
duration = int(duration_match.group(1))
if duration < 3 or duration > 15:
errors.append(f"Duration {duration}s out of range (3-15s)")
else:
warnings.append("No Duration field found")
# --- Aspect Ratio validation ---
ratio_match = re.search(r"Aspect Ratio\s*[:]\s*(.+)", content)
if ratio_match:
ratio = ratio_match.group(1).strip()
valid_ratios = {"9:16", "16:9", "4:5", "1:1"}
if ratio not in valid_ratios:
warnings.append(
f"Aspect Ratio '{ratio}' not standard. Expected: {', '.join(sorted(valid_ratios))}"
)
# --- Logo fields (optional but validate if present) ---
logo_match = re.search(r"Logo Type\s*[:]\s*(.+)", content)
if logo_match:
logo_type = logo_match.group(1).strip().lower()
valid_logo_types = {"wordmark", "icon", "combo", "none"}
if not any(lt in logo_type for lt in valid_logo_types):
warnings.append(
f"Logo Type '{logo_match.group(1).strip()}' not recognized. "
f"Expected: {', '.join(sorted(valid_logo_types))}"
)
# --- Creative Concept validation (if present in same file) ---
has_concept = "# Creative Concept" in content or "# Selected Concept" in content
if has_concept:
if not re.search(r"Creative Dimension\s*[:]\s*\S+", content):
errors.append("Creative Concept found but missing 'Creative Dimension'")
if not re.search(r"The Impossible Thing\s*[:]\s*\S+", content):
errors.append("Creative Concept found but missing 'The Impossible Thing'")
if not re.search(r"Conflict", content):
warnings.append("Creative Concept missing conflict arc (Setup → Escalation → Payoff)")
passed = len(errors) == 0
return passed, errors + [f"WARNING: {w}" for w in warnings]
def main():
parser = argparse.ArgumentParser(description="Validate dynamic poster brief format")
parser.add_argument("brief_path", help="Path to the brief.md file")
args = parser.parse_args()
passed, messages = validate_brief(args.brief_path)
errors = [m for m in messages if not m.startswith("WARNING:")]
warnings = [m for m in messages if m.startswith("WARNING:")]
if passed:
print("PASSED: Brief validation successful")
print(f" File: {args.brief_path}")
if warnings:
print(f" Warnings: {len(warnings)}")
for w in warnings:
print(f" - {w}")
sys.exit(0)
else:
print(f"FAILED: Brief validation found {len(errors)} error(s)")
print(f" File: {args.brief_path}")
for i, err in enumerate(errors, 1):
print(f" {i}. {err}")
if warnings:
print(f" Warnings:")
for w in warnings:
print(f" - {w}")
sys.exit(1)
if __name__ == "__main__":
main()