Files
MediaCrawler/mac-agent-os-main/PLANS/reference/DCS_说明书_v2.0_原文.md
T
butubb 2112c1a870
Deploy VitePress site to Pages / build (push) Canceled after 0s
Deploy VitePress site to Pages / Deploy (push) Canceled after 0s
feat(monitor): 抖音 Web 接口客户端 —— 绕开爬虫子进程,直接发 HTTP
移植自 mac-agent-os 的 mediacrawler_adapter:不起子进程、不开页面,用浏览器里那份
登录态直接调抖音 Web 接口。产物键名照抄 store/douyin,所以 ingest 那条链路一个字不用改。

**目前能用的(真环境实测,非推断)**:

    profile/other : 200, 7075 字节  —— 博主主页指标(粉丝/获赞/作品数/昵称)
    aweme/detail  : 200, 45425 字节 —— 单条作品详情(含点赞/评论/收藏/分享)

**目前不能用的:作品列表 `aweme/post`。** 两个互相独立的原因:
  1. 这个接口被抖音单独升级成了真校验:不带 x-tt-argus 回 403「Uifid Not Found」,
     带上 dummy 值回 200 + **空 body**。也就是说「头在不在」骗得过,「真校验」过不了。
     同一套头打 profile/other 和 aweme/detail 都是通的 —— 抖音是挑着接口加保护的,
     挑中的恰好是「批量拉作品列表」这个最敏感的动作。
  2. 改走页面截获也不行:CDP 浏览器打开博主主页会落到「验证码中间页」(当天大量探测的
     代价,过几小时要重测)。

  所以现在的边界是:**已知作品的指标刷新能做,自动发现新作品做不了**。

**排查中控住变量后得到的两条事实**(都写进注释了):
  · `Accept` / `Accept-Language` / `Referer` 才是主页接口能返回真数据的原因 —— 只有
    UA+client hints+Cookie 时是 200 但仅 121 字节的空壳,补上这三个头变 7074 字节。
    (我先前猜的 sec-ch-ua 不是关键。)
  · 因此 UA 与 client hints 必须**成套地取自同一个浏览器**,所以 BrowserIdentity 一次
    从 CDP 取齐 cookie + UA + hints,而不是各自写死。

「200 + 空 body 必须当场报错」也是刻意写死的:放过去它会在下游变成「这个博主没作品」,
把一次失败伪装成一条正常结果 —— 爬虫那条路正是这么栽的,还被翻译成「账号被封」。

测试 +11:cookie 解析、请求头成套性(含 uifid 缺失/回退)、产物键名与 store 对齐、
以及 _get 的三条失败路径(空 body / 403 带网关原话 / 正常返回)。
2026-10-10 17:12:25 +08:00

32 KiB
Raw Blame History

导演创作系统(Director Creative System, DCS)· 项目开发说明书 v2.0

来源:用户原始设计文档 ~/Documents/导演创作系统(Director.docx(829 行,2026-10-01 09:48 更新) 入库原因:作为视频工厂的设计基准(PLANS/VIDEO_FACTORY_MASTER.md 附录 C 即对照本文档) 入库时间:2026-10-01 | 原文由 textutil 从 docx 提取(仅格式变换,内容未改)


导演创作系统(Director Creative System, DCS)

项目开发说明书 v2.0

一、项目定位

DCS是一套面向广告导演/制片人的AI视频生产系统。导演用自然语言描述故事,系统自动完成分镜拆解、资产调度、视频生成、特效叠加和后期合成,输出接近真人实拍质感的20-30秒短片。

核心设计原则:

  1. 解耦:导演系统、编排系统、能力API、合成后期互相独立,可单独替换。
  2. 标准化:所有模块通过统一分镜Schema交互,换模块不改流程。
  3. 导演优先:3D角色、特效运镜、产品资产均可由导演在控制台按需调用,不盲目抽卡。
  4. 真实感优先:分镜遵循伪纪录片/手机随手拍美学,后期强制走去AI化处理链。
  5. 低成本起步:本地零GPU,所有算力走远端API。

二、系统架构

┌───────────────────────────────────────────────────────────────────────┐
│ 层0:导演控制台(Appsmith,本地Docker,端口80)                        │
│                                                                       │
│  ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐  │
│  │分镜编辑  │ │资产库    │ │3D角色    │ │特效库    │ │任务状态  │  │
│  │          │ │          │ │生产      │ │          │ │          │  │
│  └──────────┘ └──────────┘ └──────────┘ └──────────┘ └──────────┘  │
│  ┌──────────┐ ┌──────────┐ ┌──────────┐                             │
│  │成片预览  │ │参数模板  │ │系统设置  │                             │
│  └──────────┘ └──────────┘ └──────────┘                             │
└─────────────────────────────┬─────────────────────────────────────────┘
                              ↓
┌───────────────────────────────────────────────────────────────────────┐
│ 层1:导演层(可替换)                                                  │
│                                                                       │
│  导演系统(当前选型:AI Storyboard Director v5.2)                     │
│  职责:自然语言故事 → 统一分镜Schema (JSON)                           │
│                                                                       │
│  ┌─────────────────────────────────────────────────────────┐         │
│  │ 统一分镜Schema(标准接口)                               │         │
│  │ 所有模块的“普通话”                                      │         │
│  └─────────────────────────────────────────────────────────┘         │
└─────────────────────────────┬─────────────────────────────────────────┘
                              ↓
┌───────────────────────────────────────────────────────────────────────┐
│ 层2:编排层(n8n,本地Docker,端口5678)                              │
│                                                                       │
│  读取分镜Schema → 按type分发 → 调用各API → 收集输出 → 交给合成层     │
│                                                                       │
│  ┌────────┐ ┌────────┐ ┌────────┐ ┌────────┐ ┌────────┐ ┌────────┐ │
│  │TTS节点 │ │口播节点│ │动作节点│ │背景节点│ │特效节点│ │3D节点  │ │
│  └────────┘ └────────┘ └────────┘ └────────┘ └────────┘ └────────┘ │
└─────────────────────────────┬─────────────────────────────────────────┘
                              ↓
┌───────────────────────────────────────────────────────────────────────┐
│ 层3:能力层(全部远端API,可替换)                                     │
│                                                                       │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────────┐│
│ │Fish Audio│ │D-ID/     │ │可灵/     │ │通义万相  │ │RunningHub    ││
│ │TTS       │ │HeyGen    │ │Wan-Anim  │ │背景/空镜 │ │(ComfyUI)     ││
│ └──────────┘ └──────────┘ └──────────┘ └──────────┘ └──────────────┘│
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐                  │
│ │混元3D    │ │万兴天幕  │ │海螺AI    │ │其他特效  │                  │
│ │角色生成  │ │子弹时间  │ │运镜      │ │          │                  │
│ └──────────┘ └──────────┘ └──────────┘ └──────────┘                  │
└─────────────────────────────┬─────────────────────────────────────────┘
                              ↓
┌───────────────────────────────────────────────────────────────────────┐
│ 层4:合成层(FFmpeg,本地)                                            │
│                                                                       │
│  去AI化处理链:轻微模糊 → 胶片颗粒 → 调色 → 帧混合 → 拼接            │
│  输出:成片mp4                                                        │
└───────────────────────────────────────────────────────────────────────┘

三、分层职责与模块规范

3.1 层0:导演控制台

部署:Appsmith,本地Docker,端口80。跨平台(macOS/Linux),迁移时导出数据库+环境变量即可。

页面清单:

页面 功能 数据源 分镜编辑 输入故事大纲 → 调用导演系统 → 展示分镜表 → 逐条修改 FastAPI /api/director/generate 资产库 角色/场景/道具/产品/BGM/音效管理 FastAPI /api/assets/* 3D角色生产 上传概念图 → 生成多视图+骨骼绑定 → 存入资产库 混元3D API 特效库 浏览可用特效,查看参数说明,预览示例 FastAPI /api/vfx/list 任务状态 查看n8n任务队列,每条分镜状态 FastAPI /api/task/* 成片预览 按项目分组播放成片 本地文件系统 参数模板 管理各内容类型的模板(广告/日记/短剧) config/templates/ 系统设置 API Key管理、提供商切换、去AI化参数 config/providers.yaml

控制台可设置参数:

A. 导演系统配置

· 当前导演系统:下拉选择 · 导演系统API地址 · 默认输出Schema版本

B. 能力提供商配置

模块 可选提供商 切换方式 TTS Fish Audio / ElevenLabs / Qwen3-TTS 下拉 + Key 口播视频 D-ID / HeyGen / 本地LongCat 下拉 + Key 动作视频 可灵 / Wan-Animate-2 / Runway 下拉 + Key 背景/空镜 通义万相 / Sora 2 / 可灵 下拉 + Key ComfyUI RunningHub / ComfyDeploy / 自建 下拉 + API地址 3D角色 混元3D / Autodesk Flow Studio 下拉 + Key 特效-子弹时间 万兴天幕 / 海螺AI / 可灵 下拉 + Key 特效-运镜 可灵 / 海螺AI 下拉 + Key

C. 去AI化参数(全局默认,可被分镜覆盖)

· 模糊 sigma:默认 0.4 · 胶片颗粒强度:默认 12 · 饱和度偏移:默认 -0.12 · 色温偏移:默认 +0.03 · 帧混合帧数:默认 2

3.2 层1:导演层

职责:接收自然语言故事,输出统一分镜Schema。

可替换性:任何导演系统,只要输出符合统一分镜Schema的JSON,即可接入。若输出格式不同,需写薄适配器转换。

导演系统输入:

{
  "story": "我住院第三天,躺在病床上录了一段……",
  "content_type": "personal_vlog",
  "template_id": "vlog_hospital_001",
  "global_anchors": {
    "character_id": "char_001",
    "location_id": "loc_hospital_302",
    "shooting_style": "documentary_realism"
  }
}

当前推荐:AI Storyboard Director v5.2(支持“假设标记”,可强制保留不完美细节)。备选:clip-storyboard-director(4D持久化缓冲区,跨场景一致性最强)。

3.3 层2:编排层(n8n)

部署:本地 Docker,端口 5678。

工作流设计:

[Webhook触发]
  → [读取分镜Schema JSON]
  → [循环每条shot]
      → [Switch节点:按type分发]
          ├─ type == "talking_head" → [HTTP Request: 口播API]
          ├─ type == "action" → [HTTP Request: 动作API]
          ├─ type == "background" → [HTTP Request: 背景API]
          ├─ type == "comfyui" → [HTTP Request: RunningHub API]
          ├─ type == "vfx" → [HTTP Request: 特效API]
          └─ type == "3d_character" → [HTTP Request: 混元3D API]
      → [等待任务完成(轮询)]
      → [下载输出片段到本地临时目录]
  → [FFmpeg节点:去AI化处理链]
  → [FFmpeg节点:拼接所有片段]
  → [输出成片mp4到指定目录]
  → [回调控制台更新任务状态]

3.4 层3:能力层

统一接口约定:所有能力API返回格式统一为:

{
  "status": "success",
  "video_url": "https://.../output.mp4",
  "duration": 8.0,
  "format": "mp4",
  "error": null
}

各模块调用方式:

模块 API 调用方式 关键参数 TTS Fish Audio POST /v1/tts text, voice_id, emotion_tags 口播 D-ID POST /talks source_url, script.audio_url, config.sentiment 动作 可灵 POST /v1/videos image_url, prompt, camera_control 背景 通义万相 POST /api/v1/video prompt, size, seconds ComfyUI RunningHub POST /api/v1/workflow workflow_id, node_overrides 3D角色 混元3D SubmitHunyuanTo3DProJob Prompt/ImageUrl, ViewImage 子弹时间 万兴天幕 POST /api/v1/vfx image_url, effect_type 运镜 可灵 camera_control参数 pan/tilt/roll/zoom ∈ [-10,10] 运镜 海螺AI 嵌套指令 环绕+降速+焦点锁定

四、统一分镜 Schema(标准接口)

src/schemas.py:

from pydantic import BaseModel, Field
from typing import List, Optional, Literal

class GlobalAnchors(BaseModel):
    character_id: str
    character_3d_id: Optional[str] = None
    location_id: str
    product_id: Optional[str] = None
    wardrobe: str
    lighting_state: str
    camera_lens: str
    shooting_style: str = "documentary_realism"
    consistency_seed: int = 42

class ShotContract(BaseModel):
    shot_size: str
    angle: str
    camera_move: str
    lens_feel: str
    depth_of_field: str
    frame_rate_feel: str

class VFXConfig(BaseModel):
    vfx_id: Optional[str] = None
    vfx_type: Optional[Literal["bullet_time", "orbit", "slow_motion",
                                "focus_lock", "custom"]] = None
    provider: Optional[str] = None
    params: Optional[dict] = None

class ExpressionDetail(BaseModel):
    eyes: Optional[str] = None
    mouth: Optional[str] = None
    brow: Optional[str] = None

class SFX(BaseModel):
    id: str
    at_second: float
    volume: float = 0.4

class AudioConfig(BaseModel):
    voice_volume: float = 1.0
    bgm_id: Optional[str] = None
    bgm_volume: float = 0.15
    bgm_fade_in: float = 1.0
    bgm_fade_out: float = 1.0
    sfx: List[SFX] = []
    audio_cue: Optional[str] = None
    denoise: bool = False

class Subtitle(BaseModel):
    enabled: bool = True
    text: str
    style: str = "手机系统默认"
    position: str = "bottom_center"

class Transition(BaseModel):
    type: Literal["cut", "dissolve", "fade", "wipe"] = "cut"
    duration: float = 0

class Speed(BaseModel):
    factor: float = 1.0
    ramp: Optional[str] = None

class ColorConfig(BaseModel):
    lut: Optional[str] = None
    saturation_offset: float = -0.12
    temperature_shift: float = 0.03

class PostProcess(BaseModel):
    grain_intensity: int = 12
    blur_sigma: float = 0.4
    frame_interpolation: bool = False

class OutputConfig(BaseModel):
    resolution: str = "1080x1920"
    fps: int = 30
    bitrate: str = "8M"

class Shot(BaseModel):
    shot_id: str
    scene_id: str
    duration: float
    type: Literal["talking_head", "action", "background",
                  "comfyui", "vfx", "3d_character"]
    character_id: str
    character_3d_id: Optional[str] = None
    location_id: str
    product_id: Optional[str] = None
    product_focus: bool = False
    product_placement: Optional[str] = None
    props: List[str] = []
    continuity_mode: Literal[
        "fresh_location",
        "previous_frame_continuation",
        "location_reappearance"
    ]
    shot_contract: ShotContract
    vfx: Optional[VFXConfig] = None
    visual_description: str
    text: Optional[str] = None
    sentiment: Optional[str] = None
    expression_detail: Optional[ExpressionDetail] = None
    action: Optional[str] = None
    audio: Optional[AudioConfig] = None
    subtitle: Optional[Subtitle] = None
    transition_in: Transition = Transition()
    transition_out: Transition = Transition()
    speed: Speed = Speed()
    color: ColorConfig = ColorConfig()
    post_process: PostProcess = PostProcess()
    output: OutputConfig = OutputConfig()

class Storyboard(BaseModel):
    project_id: str
    schema_version: str = "2.0"
    global_anchors: GlobalAnchors
    shots: List[Shot]

特效参数示例(vfx字段):

{
  "vfx": {
    "vfx_id": "vfx_bullet_time_01",
    "vfx_type": "bullet_time",
    "provider": "wondershare_tianmu",
    "params": {
      "source_image": "keyframe_01.png",
      "duration": 3.0,
      "freeze_radius": 0.5
    }
  }
}

可灵环绕运镜参数(写入shot_contract.camera_move或vfx.params):

可灵的camera_control支持六种运镜参数,取值范围均为[-10, 10]:horizontal(水平平移)、vertical(垂直平移)、pan(水平摇镜,绕y轴旋转)、tilt(垂直摇镜,绕x轴)、roll(旋转运镜,绕z轴)、zoom(变焦)。同时支持预定义运镜类型:simple、down_back(下移拉远)、forward_up(推进上移)、right_turn_forward(右旋推进)、left_turn_forward(左旋推进)。导演可在控制台选择预定义类型或手动指定六参数组合。

五、资产库规范

目录结构:

assets/
├── characters/
│   └── char_001/
│       ├── reference.png
│       ├── reference_side.png
│       ├── reference_full.png
│       ├── lora.safetensors
│       ├── voice_sample.mp3
│       └── meta.json
├── characters_3d/
│   └── char_001_3d/
│       ├── model.glb
│       ├── model.fbx
│       ├── texture/
│       ├── rig_info.json
│       └── meta.json
├── locations/
│   └── loc_hospital_302/
│       ├── reference.png
│       ├── reference_video.mp4
│       └── meta.json
├── real_locations/
│   └── loc_cafe_01/
│       ├── reference_wide.jpg
│       ├── reference_detail.jpg
│       ├── reference_light.jpg
│       ├── reference_video.mp4
│       └── meta.json
├── products/
│   └── prod_skin_cream/
│       ├── reference_front.png
│       ├── reference_angle.png
│       ├── reference_detail.png
│       ├── reference_in_hand.png
│       └── meta.json
├── props/
├── bgm/
├── sfx/
└── vfx_presets/
    ├── bullet_time.yaml
    ├── orbit.yaml
    └── slow_motion.yaml

角色3D元数据(meta.json) :

{
  "id": "char_001_3d",
  "name": "患者A-3D",
  "source_tool": "hunyuan_3d",
  "model_formats": ["glb", "fbx"],
  "rigged": true,
  "rig_type": "humanoid",
  "reference_2d_id": "char_001",
  "consistency_seed": 42,
  "created_at": "2026-10-01"
}

产品元数据:

{
  "id": "prod_skin_cream",
  "name": "XX精华面霜",
  "category": "护肤品",
  "must_keep": ["瓶身标签文字", "瓶盖金色边框", "整体配色"],
  "reference_images": {
    "front": "reference_front.png",
    "angle": "reference_angle.png",
    "detail": "reference_detail.png",
    "in_hand": "reference_in_hand.png"
  },
  "consistency_seed": 88
}

调用方式:分镜Schema中通过 character_id、character_3d_id、location_id、product_id、props、bgm_id、sfx.id、vfx.vfx_id 引用。n8n根据ID从资产库读取文件路径,注入API请求。

六、3D角色生产模块

功能:导演上传角色概念图,系统自动生成多视图+骨骼绑定3D模型,存入资产库,后续分镜通过 character_3d_id 引用。

调用流程:

导演上传正面概念图
    ↓ 控制台 → FastAPI → 混元3D API
混元3D SubmitHunyuanTo3DProJob
    ↓ 传入 Prompt/ImageUrl + ViewImage(多视角图片)
返回 JobId → 轮询 DescribeProfileTo3DJob
    ↓ Status == DONE
获得 File3D(OBJ/GLB格式,含Url和PreviewImageUrl)
    ↓ 下载到 assets/characters_3d/
自动绑定骨骼(混元3D内置AutoRigging)
    ↓ 存入资产库
后续分镜通过 character_3d_id 引用

混元3D API关键参数:

· 输入:Prompt(文本)或 ImageUrl(图片URL,有效期24小时)或 ViewImage(多视角图片,支持back/left/right) · 输出:File3D 数组,包含 Type(文件格式)、Url(文件URL)、PreviewImageUrl(预览图) · 任务查询:DescribeProfileTo3DJob 返回 Status(WAIT/RUN/FAIL/DONE)和 ResultFile3Ds · 支持接口:SubmitHunyuanTo3DProJob(专业版)、SubmitHunyuanTo3DRapidJob(极速版)、SubmitAutoRiggingJob(自动骨骼绑定)

七、特效运镜库

7.1 子弹时间

提供商 调用方式 关键参数 万兴天幕 POST /api/v1/vfx image_url, effect_type="bullet_time", duration 可灵 camera_control参数组合 pan ∈ [-10,10], roll ∈ [-10,10], zoom 海螺AI T2V-01-Director模型 内置Bullet Time模板,自动应用时间凝滞+环绕视角 ComfyUI RunningHub工作流 VFX-Bullet Time Effect工作流,两阶段渲染

万兴天幕的“子弹时间”特效支持单张静态图片一键生成影视级动态视频,无需复杂拍摄,且已开放API接口支持MCP协议。海螺AI的T2V-01-Director模型预置了标准化运镜模组,调用内置Bullet Time模板即可触发基础子弹时间逻辑,系统自动应用时间凝滞+环绕视角参数。

7.2 环绕运镜

可灵支持精细的环绕运镜控制。预定义类型中,right_turn_forward 实现“先右旋转后前进”,left_turn_forward 实现“先左旋并前进”。手动模式下可通过 pan 参数实现水平面上的旋转,pan 负值表示绕y轴向左旋转,正值表示向右旋转,取值范围[-10, 10]。

7.3 慢动作/升格

可灵的 frame_rate_feel 参数控制帧率感觉。海螺AI支持嵌套运镜指令,将“环绕+降速+焦点锁定”三重动作按时间顺序嵌套至提示词中。

7.4 特效库的导演操作方式

导演在控制台分镜编辑页面中,每条镜头可展开“特效”面板:

  1. 从下拉菜单选择特效类型(子弹时间/环绕/慢动作/焦点锁定/自定义)
  2. 选择提供商(万兴天幕/可灵/海螺AI/ComfyUI)
  3. 填写参数表单(根据特效类型动态显示)
  4. 点击“预览”可调用测试API生成样片
  5. 确认后,参数写入分镜Schema的 vfx 字段

八、去AI化处理链

de_ai.py:

class DeAIProcessor:
    def process(self, input_path: str, output_path: str,
                params: PostProcess, color: ColorConfig):
        """
        按顺序执行:
        1. gblur sigma={blur_sigma}               # 消除AI边缘锐利感
        2. noise alls={grain_intensity}:allf=t+u   # 添加真实传感器噪点
        3. eq saturation={1+saturation_offset}     # 饱和度降低
        4. curves=all='0/0 0.5/0.55 1/1'           # S曲线拉反差
        5. colortemperature=temperature=5300        # 色温偏移
        """

FFmpeg命令模板:

ffmpeg -i input.mp4 \
  -vf "gblur=sigma=0.4,noise=alls=12:allf=t+u,\
       eq=saturation=0.88,curves=all='0/0 0.5/0.55 1/1',\
       colortemperature=temperature=5300" \
  -c:v libx264 -preset medium -crf 18 \
  output.mp4

拼接:所有处理后的片段用 concat 滤镜拼接,输出最终mp4。

九、FastAPI入口

端点列表:

方法 路径 功能 POST /api/director/generate 输入故事,返回分镜Schema POST /api/task/submit 提交分镜,返回task_id GET /api/task/{task_id} 查询任务状态 POST /api/task/{task_id}/retry 重试某镜头 GET /api/assets/characters 列出所有角色 POST /api/assets/characters 上传角色 GET /api/assets/characters_3d 列出3D角色 POST /api/assets/characters_3d/generate 调用混元3D生成角色 GET /api/assets/products 列出产品资产 POST /api/assets/products 上传产品 GET /api/vfx/list 列出可用特效 POST /api/vfx/preview 生成特效样片 GET /api/output/{project_id} 列出成片 GET /api/config/providers 获取当前提供商配置 PUT /api/config/providers 切换提供商

十、部署说明

10.1 本地环境

组件 部署方式 端口 备注 n8n Docker 5678 挂载 ~/dcs/n8n Appsmith Docker 80 挂载 ~/dcs/appsmith FastAPI Docker 8000 挂载 assets/output/temp/config FFmpeg 本地安装 — brew install ffmpeg / apt install ffmpeg 资产库 本地文件夹 — ~/dcs/assets 导演系统 本地脚本或远端API — 包装为FastAPI端点

10.2 Docker Compose

version: '3.8'
services:
  n8n:
    image: n8nio/n8n
    ports:
      - "5678:5678"
    volumes:
      - ./n8n:/home/node/.n8n
    environment:
      - N8N_BASIC_AUTH_ACTIVE=true
      - N8N_BASIC_AUTH_USER=admin
      - N8N_BASIC_AUTH_PASSWORD=admin

  appsmith:
    image: appsmith/appsmith-ce
    ports:
      - "80:80"
    volumes:
      - ./appsmith:/appsmith-stacks

  api:
    build: .
    ports:
      - "8000:8000"
    volumes:
      - ./assets:/app/assets
      - ./output:/app/output
      - ./temp:/app/temp
      - ./config:/app/config
    env_file:
      - .env
    depends_on:
      - n8n

10.3 远程访问

Tailscale:本地机器和其他设备安装Tailscale,登录同一账号。访问 http://:80(Appsmith)和 http://:5678(n8n)。

十一、环境变量清单

# ========== 导演系统 ==========
DIRECTOR_TYPE=storyboard_director_v52

# ========== TTS ==========
TTS_PROVIDER=fish_audio
FISH_AUDIO_API_KEY=
FISH_AUDIO_VOICE_ID=
ELEVENLABS_API_KEY=

# ========== 口播视频 ==========
TALKING_HEAD_PROVIDER=d_id
D_ID_API_KEY=
D_ID_AVATAR_ID=
HEYGEN_API_KEY=

# ========== 动作视频 ==========
ACTION_PROVIDER=kling
KLING_API_KEY=
KLING_API_SECRET=
WAN_ANIMATE_API_KEY=

# ========== 背景视频 ==========
BACKGROUND_PROVIDER=tongyi_wanxiang
TONGYI_API_KEY=
SORA_API_KEY=

# ========== ComfyUI ==========
COMFYUI_PROVIDER=runninghub
RUNNINGHUB_API_KEY=
RUNNINGHUB_WORKFLOW_ID=

# ========== 3D角色 ==========
CHARACTER_3D_PROVIDER=hunyuan_3d
HUNYUAN_3D_SECRET_ID=
HUNYUAN_3D_SECRET_KEY=
HUNYUAN_3D_REGION=ap-guangzhou

# ========== 特效 ==========
VFX_BULLET_TIME_PROVIDER=wondershare_tianmu
WONDERSHARE_TIANMU_API_KEY=
VFX_CAMERA_PROVIDER=kling
# 可灵camera_control参数在分镜Schema中动态传入

# ========== 本地路径 ==========
ASSETS_DIR=./assets
OUTPUT_DIR=./output
TEMP_DIR=./temp

# ========== 去AI化默认参数 ==========
DEAI_BLUR_SIGMA=0.4
DEAI_GRAIN_INTENSITY=12
DEAI_SATURATION_OFFSET=-0.12
DEAI_TEMPERATURE_SHIFT=0.03
DEAI_FRAME_BLEND=2

# ========== 服务端口 ==========
API_PORT=8000
N8N_PORT=5678
APPSMITH_PORT=80

十二、项目目录结构

dcs/
├── README.md
├── docker-compose.yml
├── .env.example
├── requirements.txt
├── start.sh
├── stop.sh
│
├── config/
│   ├── providers.yaml
│   ├── templates/
│   │   ├── vlog_hospital.yaml
│   │   ├── product_ad.yaml
│   │   └── daily_diary.yaml
│   └── post_process.yaml
│
├── assets/
│   ├── characters/
│   ├── characters_3d/
│   ├── locations/
│   ├── real_locations/
│   ├── products/
│   ├── props/
│   ├── bgm/
│   ├── sfx/
│   └── vfx_presets/
│
├── src/
│   ├── main.py
│   ├── schemas.py
│   │
│   ├── director/
│   │   ├── base.py
│   │   ├── storyboard_director.py
│   │   └── adapter.py
│   │
│   ├── orchestrator/
│   │   ├── dispatcher.py
│   │   └── task_manager.py
│   │
│   ├── providers/
│   │   ├── base.py
│   │   ├── tts/
│   │   │   ├── fish_audio.py
│   │   │   └── elevenlabs.py
│   │   ├── talking_head/
│   │   │   ├── d_id.py
│   │   │   └── heygen.py
│   │   ├── action/
│   │   │   ├── kling.py
│   │   │   └── wan_animate.py
│   │   ├── background/
│   │   │   ├── tongyi_wanxiang.py
│   │   │   └── sora.py
│   │   ├── comfyui/
│   │   │   └── runninghub.py
│   │   ├── character_3d/
│   │   │   ├── hunyuan_3d.py
│   │   │   └── flow_studio.py
│   │   └── vfx/
│   │       ├── wondershare_tianmu.py
│   │       ├── hailuo.py
│   │       └── kling_vfx.py
│   │
│   ├── compositor/
│   │   ├── de_ai.py
│   │   ├── concat.py
│   │   └── ffmpeg_utils.py
│   │
│   ├── assets_manager/
│   │   ├── loader.py
│   │   └── validator.py
│   │
│   └── utils/
│       ├── logger.py
│       ├── retry.py
│       └── file_utils.py
│
├── n8n/
│   └── workflow.json
│
├── appsmith/
│   └── application.json
│
├── output/
├── temp/
│
└── tests/
    ├── test_schemas.py
    ├── test_director.py
    ├── test_providers.py
    ├── test_compositor.py
    └── fixtures/
        └── sample_storyboard.json

十三、开发路线图

阶段 目标 交付物 阶段1:手动验证 用现有API跑通一条20秒测试片 分镜JSON、测试视频、去AI化参数 阶段2:本地环境 部署n8n + Appsmith + FFmpeg 可访问的控制台 阶段3:导演系统接入 导演系统输出统一Schema 分镜编辑页面可用 阶段4:n8n工作流 串联TTS+口播+背景+FFmpeg 自动生成第一条成片 阶段5:3D角色+特效 接入混元3D + 万兴天幕/可灵运镜 3D角色和特效可用 阶段6:ComfyUI接入 RunningHub API调用 精细控制镜头 阶段7:批量生产 循环分镜表,批量输出 批量任务队列 阶段8:优化迭代 调参、换API、迁移服务器 稳定生产系统

十四、AI编程工具执行清单

请按以下顺序生成项目代码:

1. 创建项目根目录结构(mkdir -p dcs/src/...)
2. requirements.txt(fastapi, uvicorn, pydantic, requests, pyyaml, ffmpeg-python)
3. .env.example(按第十一节)
4. src/schemas.py(按第四节)
5. src/director/base.py + storyboard_director.py + adapter.py
6. src/providers/base.py
7. src/providers/tts/fish_audio.py
8. src/providers/talking_head/d_id.py
9. src/providers/action/kling.py(含camera_control参数支持)
10. src/providers/background/tongyi_wanxiang.py
11. src/providers/comfyui/runninghub.py
12. src/providers/character_3d/hunyuan_3d.py
13. src/providers/vfx/wondershare_tianmu.py
14. src/providers/vfx/hailuo.py
15. src/providers/vfx/kling_vfx.py
16. src/compositor/de_ai.py + concat.py + ffmpeg_utils.py
17. src/assets_manager/loader.py + validator.py
18. src/orchestrator/dispatcher.py + task_manager.py
19. src/main.py
20. src/utils/logger.py + retry.py
21. docker-compose.yml
22. start.sh
23. config/providers.yaml + templates/vlog_hospital.yaml
24. tests/test_schemas.py + fixtures/sample_storyboard.json
25. n8n/workflow.json
26. appsmith/application.json(可先留框架)

生成后运行 pytest 确保测试通过。
所有API Key从环境变量读取,不硬编码。
所有异步API调用使用统一的 poll_until_complete 轮询逻辑。
所有Provider继承 BaseProvider,实现 generate(shot, assets) -> dict 方法。

十五、需团队手动完成的事项

事项 操作 注册API Fish Audio、D-ID、可灵、通义万相、RunningHub、混元3D、万兴天幕 填写.env 把Key填入.env文件 导入n8n工作流 n8n界面 → Import from File 导入Appsmith应用 Appsmith界面 → Import Application 准备角色参考图 放入assets/characters/char_001/ 准备产品参考图 放入assets/products/ 在RunningHub搭建工作流 导入社区工作流或手动搭建,发布为API工作流 跑第一条测试 在控制台输入故事,点击生成

十六、导演操作流程(日常使用)

1. 打开浏览器 → http://localhost
2. 在分镜编辑页输入故事大纲
3. 选择内容类型(产品广告/个人日记/场景短剧)
4. 选择角色(2D参考图 或 3D绑定模型)
5. 选择场景/场地/产品
6. 点击“生成分镜” → 导演系统返回分镜表
7. 逐条检查/修改 → 可添加特效(子弹时间/环绕运镜等)
8. 点击“提交任务”
9. n8n自动调用各API生成片段
10. FFmpeg自动去AI化+拼接
11. 刷新页面 → 预览成片
12. 不满意 → 修改对应镜头参数 → 重试单条