feat(monitor): 抖音 Web 接口客户端 —— 绕开爬虫子进程,直接发 HTTP
Deploy VitePress site to Pages / build (push) Canceled after 0s
Deploy VitePress site to Pages / Deploy (push) Canceled after 0s

移植自 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 带网关原话 / 正常返回)。
This commit is contained in:
2026-10-10 17:12:25 +08:00
parent 21ff01b894
commit 2112c1a870
1601 changed files with 367425 additions and 0 deletions
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,115 @@
# CosyVoice 官方音色目录(音色库「从官方挑选」用)
# =====================================================================
# 来源:https://help.aliyun.com/zh/model-studio/cosyvoice-voice-list
# 抓取:2026-10-02 · 模型:cosyvoice-v3.5-plus(配置 aliyun.cosyvoice_model)
# 用法:音色库页面点「+ 从官方挑选」→ 选一个 → 自动建音色资产(填 provider_voice_id)
#
# 注意:每个模型仅支持一组特定音色,不可跨模型混用;文本语言须在该音色支持范围内。
# =====================================================================
provider: aliyun-cosyvoice
model: cosyvoice-v3-flash
source: https://help.aliyun.com/zh/model-studio/cosyvoice-voice-list
# ⚠️ 音色必须与模型匹配(实测 2026-10-02):
# cosyvoice-v3-flash 支持 88 个音色(含全部 _v3 后缀)← 用这个
# cosyvoice-v3-plus 仅支持 longanyang / longanhuan
# 不匹配会报 InvalidParameter(418)
# 角色分配建议(供 UI 提示)
pools:
male_lead: [longanyang, longanlang_v3, longyichen_v3, longze_v3]
male_mature: [longtian_v3, longsanshu_v3, longhao_v3, longanzhi_v3]
female_lead: [longxiaochun_v3, longhua_v3, longxing_v3, longanwen_v3]
female_charm: [longqiang_v3, longyue_v3, longanyan_v3]
extra_male: [longze_v3, longzhe_v3, longanlang_v3]
extra_female: [longxing_v3, longmiao_v3, longanqin_v3]
narrator: [longxiu_v3, longshuo_v3, longyue_v3]
groups:
- id: male
name: 男声
voices:
- {name: 龙安洋, voice_id: longanyang, trait: 阳光大男孩, age: "20~30", tags: [年轻男主]}
- {name: 龙安朗, voice_id: longanlang_v3, trait: 清爽利落男, age: "20~25"}
- {name: 龙逸尘, voice_id: longyichen_v3, trait: 洒脱活力男, age: "20~30"}
- {name: 龙泽, voice_id: longze_v3, trait: 温暖元气男, age: "25~30"}
- {name: 龙哲, voice_id: longzhe_v3, trait: 呆板大暖男, age: "25~30"}
- {name: 龙安昀, voice_id: longanyun_v3, trait: 居家暖男, age: "30~35"}
- {name: 龙天, voice_id: longtian_v3, trait: 磁性理智男, age: "30~35", tags: [成熟男主]}
- {name: 龙浩, voice_id: longhao_v3, trait: 多情忧郁男, age: "30~35"}
- {name: 龙寒, voice_id: longhan_v3, trait: 温暖痴情男, age: "30~35"}
- {name: 龙安智, voice_id: longanzhi_v3, trait: 睿智轻熟男, age: "25~35"}
- {name: 龙三叔, voice_id: longsanshu_v3, trait: 沉稳质感男, age: "25~45", tags: [中年]}
- {name: 龙硕, voice_id: longshuo_v3, trait: 博才干练男, age: "25~30"}
- {name: 龙修, voice_id: longxiu_v3, trait: 博才说书男, age: "25~35", tags: [旁白]}
- {name: 龙机器, voice_id: longjiqi_v3, trait: 呆萌机器人, age: "20~30", tags: [特殊]}
- {name: 龙猴哥, voice_id: longhouge_v3, trait: 经典猴哥, age: "20~25", tags: [特殊]}
- id: female
name: 女声
voices:
- {name: 龙小淳, voice_id: longxiaochun_v3, trait: 知性积极女, age: "25~30", tags: [女主角, 通用]}
- {name: 龙小夏, voice_id: longxiaoxia_v3, trait: 沉稳权威女, age: "25~30"}
- {name: 龙华, voice_id: longhua_v3, trait: 元气甜美女, age: "20~25", tags: [年轻女主]}
- {name: 龙星, voice_id: longxing_v3, trait: 温婉邻家女, age: "20~25"}
- {name: 龙安亲, voice_id: longanqin_v3, trait: 亲和活泼女, age: "20~25"}
- {name: 龙菲菲, voice_id: longfeifei_v3, trait: 甜美娇气女, age: "20~25"}
- {name: 龙安欢, voice_id: longanhuan_v3, trait: 欢脱元气女, age: "20~30"}
- {name: 龙安灵, voice_id: longanling_v3, trait: 思维灵动女, age: "20~30"}
- {name: 龙婉, voice_id: longwan_v3, trait: 细腻柔声女, age: "20~30"}
- {name: 龙婉君, voice_id: longwanjun_v3, trait: 细腻柔声女, age: "20~30"}
- {name: 龙安柔, voice_id: longanrou_v3, trait: 温柔闺蜜女, age: "20~35"}
- {name: 龙应沐, voice_id: longyingmu_v3, trait: 优雅知性女, age: "25~30"}
- {name: 龙应聆, voice_id: longyingling_v3, trait: 温和共情女, age: "25~30"}
- {name: 龙应桃, voice_id: longyingtao_v3, trait: 温柔淡定女, age: "25~30"}
- {name: 龙应静, voice_id: longyingjing_v3, trait: 低调冷静女, age: "25~35"}
- {name: 龙安温, voice_id: longanwen_v3, trait: 优雅知性女, age: "25~35"}
- {name: 龙安雅, voice_id: longanya_v3, trait: 高雅气质女, age: "25~35"}
- {name: 龙安莉, voice_id: longanli_v3, trait: 利落从容女, age: "25~35"}
- {name: 龙妙, voice_id: longmiao_v3, trait: 抑扬顿挫女, age: "25~30"}
- {name: 龙颜, voice_id: longyan_v3, trait: 温暖春风女, age: "30~35"}
- {name: 龙悦, voice_id: longyue_v3, trait: 温暖磁性女, age: "30~35", tags: [旁白]}
- {name: 龙嫱, voice_id: longqiang_v3, trait: 浪漫风情女, age: "30~35", tags: [御姐, 魅惑]}
- {name: 龙媛, voice_id: longyuan_v3, trait: 温暖治愈女, age: "35~40"}
- {name: 龙安燃, voice_id: longanran_v3, trait: 活泼质感女, age: "30~40"}
- {name: 龙安宣, voice_id: longanxuan_v3, trait: 经典直播女, age: "30~40"}
- {name: 龙安台, voice_id: longantai_v3, trait: 嗲甜台湾女, age: "20~25"}
- {name: 龙应笑, voice_id: longyingxiao_v3, trait: 清甜推销女, age: "20~25"}
- id: child
name: 童声
voices:
- {name: 龙呼呼, voice_id: longhuhu_v3, trait: 天真烂漫女童, age: "6~10"}
- {name: 龙泡泡, voice_id: longpaopao_v3, trait: 飞天泡泡音, age: "6~15"}
- {name: 龙杰力豆, voice_id: longjielidou_v3, trait: 阳光顽皮男, age: "10"}
- {name: 龙仙, voice_id: longxian_v3, trait: 豪放可爱女, age: "12"}
- {name: 龙铃, voice_id: longling_v3, trait: 稚气呆板女, age: "10"}
- {name: 龙闪闪, voice_id: longshanshan_v3, trait: 戏剧化童声, age: "6~15"}
- {name: 龙牛牛, voice_id: longniuniu_v3, trait: 阳光男童声, age: "6~15"}
- id: dialect
name: 方言
voices:
- {name: 龙嘉欣, voice_id: longjiaxin_v3, trait: 优雅粤语女, age: "30~35", lang: 粤语}
- {name: 龙嘉怡, voice_id: longjiayi_v3, trait: 知性粤语女, age: "25~30", lang: 粤语}
- {name: 龙安粤, voice_id: longanyue_v3, trait: 欢脱粤语男, age: "25~35", lang: 粤语}
- {name: 龙老铁, voice_id: longlaotie_v3, trait: 东北直率男, age: "25~30", lang: 东北话}
- {name: 龙陕哥, voice_id: longshange_v3, trait: 原味陕北男, age: "25~35", lang: 陕西话}
- {name: 龙安闽, voice_id: longanmin_v3, trait: 清纯萝莉女, age: "18~25", lang: 闽南话}
- id: foreign
name: 外语(出海)
voices:
- {name: loongriko, voice_id: loongriko_v3, trait: 二次元霓虹女, age: "18~25", lang: 日语}
- {name: loongtomoka, voice_id: loongtomoka_v3, trait: 日语女, age: "30~35", lang: 日语}
- {name: loongtomoya, voice_id: loongtomoya_v3, trait: 日语男, age: "30~35", lang: 日语}
- {name: Jihun, voice_id: loongjihun_v3, trait: 韩语男, age: "25~30", lang: 韩语}
- {name: loongkyong, voice_id: loongkyong_v3, trait: 韩语女, age: "25~30", lang: 韩语}
- {name: loongabby, voice_id: loongabby_v3, trait: 美式英文女, age: "30~35", lang: 英语}
- {name: loongandy, voice_id: loongandy_v3, trait: 美式英文男, age: "30~35", lang: 英语}
- {name: loongindah, voice_id: loongindah_v3, trait: 印尼女, age: "22~27", lang: 印尼语}
# 火山引擎备用音色(voice_type 格式,供 reference)
volcano_default:
- {name: 火山-通用女声, voice_type: BV001_V2, trait: 通用女声}
- {name: 火山-通用男声, voice_type: BV002_streaming, trait: 通用男声}
@@ -0,0 +1,199 @@
# 创意矩阵配置(GapEngine)— 负面/正向/道具场景 + 生成参数
# =====================================================================
# 来源:GapEngine 设计(2026-10-02 讨论)原文内容,整理为可编辑配置。
#
# 用法:创意工坊的 ②负面矩阵 / ③正向矩阵 / ④道具场景 三个标签页读写本文件;
# ⑤生成&筛选 依据 negative 硬过滤、positive 加权、generation 控制条数。
# 维护:可直接编辑;也可以把不同模式另存为 presets 下的一套(如"肛肠科反差模式")。
# =====================================================================
version: '1.0'
updated: '2026-10-02'
# ── 生成参数 ──────────────────────────────────────────────
generation:
candidates_per_round: 30 # 每轮候选条数(默认 30,AI 按规则推荐一轮)
max_params_per_layer: 2 # 每层最多选中的参数数(原文约束;0 = 不限制)
min_params_total: 2 # 少于该数量无法计算缺口(原文 app.py 校验)
# ── 负面矩阵(勾选排除)────────────────────────────────────
# hard = 🔴 平台硬违禁:默认锁死,不参与创意(locked: true 表示不可放开)
# soft = 🟡 观众反感:默认全部排除,允许放开某一项来制造反差(relaxed: true 表示已放开)
negative:
hard:
- id: politics
name: 政治敏感
detail: 国家象征标志不规范使用、歪曲解读政策、不当关联政治事件营销
locked: true
- id: porn
name: 色情低俗
detail: 淫秽色情内容、性暗示、擦边球文案
locked: true
- id: violence
name: 暴力恐怖
detail: 血腥暴力、恐怖主义、教唆犯罪
locked: true
- id: gambling_drug
name: 赌博毒品
detail: 赌博、毒品、违禁药物
locked: true
- id: superstition
name: 迷信荒诞
detail: 封建迷信、荒诞不经的内容
locked: true
- id: false_claim
name: 虚假宣传
detail: 弄虚作假、夸大功效、绝对化用语("最""第一""国家级"等)
locked: true
- id: medical_violation
name: 医疗违规
detail: 医疗功效词、未标注"演绎"的诊疗场景、以医生身份带货
locked: true
soft:
- id: anxiety
name: 贩卖焦虑
detail: 容貌焦虑、年龄焦虑、职场内卷焦虑
relaxed: false
hint: 泰国广告的反差恰恰建立在"先制造焦虑,再反转消解"上——放开此项可做此类反差
- id: division
name: 制造对立
detail: 地域对立、性别对立、身份对立
relaxed: false
hint: 放开此项可做"对立→和解"的反转
- id: emotional_coercion
name: 情绪勒索
detail: '"不转不是中国人" "你忍心看着…" 等强制情感绑架'
relaxed: false
hint: 放开可做"反套路"嘲讽
- id: misery
name: 过度卖惨
detail: 医疗卖惨、贫穷卖惨、残障卖惨
relaxed: false
hint: 医疗题材放开此项,可做"惨到好笑"的反差
- id: petty_bourgeois
name: 小资情结
detail: 刻意精致、脱离现实的生活展示
relaxed: false
hint: 放开可做"精致破产"的反差
- id: caustic
name: 尖酸刻薄
detail: 以嘲讽弱者为乐、居高临下的幽默
relaxed: false
hint: 放开可做"刻薄者反被刻薄"的反转
- id: cunning_honest
name: 老实人精明
detail: 表面老实实则算计的叙事模式
relaxed: false
hint: 放开可做"精明者失算"的反转
- id: preachy
name: 油腻说教
detail: 居高临下的人生道理、爹味说教
relaxed: false
hint: 放开可做"说教者出丑"的反转
- id: exaggeration
name: 极端夸张
detail: 脱离物理常识的夸张表现
relaxed: false
hint: 泰国广告核心手法之一——放开此项才能做极限夸张,但需控制尺度
# ── 正向矩阵(勾选引入,命中时给缺口分加成)─────────────────
positive:
- id: warm_twist
name: 温情反转
detail: 先制造误解或冲突,结尾转向温暖
bonus: 10
- id: self_mockery
name: 幽默自嘲
detail: 角色嘲笑自己的处境,而非嘲笑他人
bonus: 8
- id: ordinary_hero
name: 平凡英雄
detail: 普通人做出不平凡的小事
bonus: 8
- id: anti_cliche
name: 反套路认知
detail: 颠覆观众对某类人的刻板印象
bonus: 12
- id: warm_stranger
name: 温暖陌生人
detail: 陌生人之间的善意互动
bonus: 8
- id: reconciliation
name: 和解与释然
detail: 冲突最终走向理解而非对抗
bonus: 10
# ── 道具变量库(勾选可用;AI 推荐 + 手动增选)────────────────
props:
- id: childlike
name: 童趣道具
examples: [卡通玩偶, 棒棒糖, 气球]
contrast: 严肃场景 × 童趣道具 = 荒诞温情
- id: tech
name: 科技道具
examples: [手机, 智能手表, 耳机]
contrast: 日常场景 × 科技介入 = 现代荒诞
- id: wealth
name: 财富符号
examples: [股票软件, 豪车钥匙, 名表]
contrast: 平凡角色 × 财富符号 = 身份反差
- id: medical
name: 医疗道具
examples: [病历本, 输液架, 病号服]
contrast: 常规道具 × 非常规使用 = 叙事转折
- id: daily
name: 日常小物
examples: [咖啡杯, 雨伞, 钥匙]
contrast: 日常物件 × 特殊时刻 = 情感锚点
- id: symbol
name: 象征物(隐喻用)
examples: [地震, 潮水, 风暴, 种子, 齿轮, 流水线, 监控, 牢笼, 笼中鸟, 茧, 飞蛾, 镜子, 雨伞, 闹钟, 门]
contrast: 抽象主题 × 具体物象 = 观众自己完成的那次替代
# ── 场景变量库 ─────────────────────────────────────────────
scenes:
- id: space
name: 空间反差
examples: [病房vs豪宅, 诊室vs演唱会]
contrast: 空间错位制造荒诞
- id: time
name: 时间反差
examples: [白天vs深夜, 术前vs术后]
contrast: 时间跳跃制造悬念
- id: weather
name: 天气反差
examples: [晴天vs暴雨, 室内vs室外]
contrast: 环境变化推动情绪转折
- id: social
name: 社交反差
examples: [独处vs人群, 熟人vs陌生人]
contrast: 社交密度变化制造戏剧张力
# ── 预设矩阵配置(多套可切换)──────────────────────────────
# 使用某套 preset 时,soft 项的 relaxed / positive 勾选 / props / scenes 按此覆盖。
presets:
- id: conservative
name: 保守模式(默认)
soft_relaxed: []
positive: [warm_twist, self_mockery]
props: []
scenes: []
- id: contrast
name: 反差模式
soft_relaxed: [exaggeration, anxiety]
positive: [warm_twist, anti_cliche]
props: [childlike, medical]
scenes: [space, time]
# ── 与六层参数的联动规则(供生成器参考)────────────────────
linkage:
- when: {layer: narrative, param: conflict_type, value: 认知反转}
recommend: {props: [childlike], note: 用童趣道具作为反转触发器}
- when: {layer: visual, param: shot_size, value: 特写}
recommend: {props: [daily], note: 用道具特写作为转场锚点}
- when: {layer: rhetoric, param: expression_mode, value: 暗喻}
recommend: {props: [symbol], note: 从象征物里挑一个作喻体,被比喻的事始终不出现}
- when: {layer: rhetoric, param: vehicle_source, value: 自然现象}
recommend: {props: [symbol], note: 自然类喻体:地震 / 潮水 / 风暴 / 干旱}
- when: {layer: rhetoric, param: mapping, value: 整体寓言}
recommend: {props: [symbol], note: 全片围绕一个喻体展开,不得中途切回写实}
@@ -0,0 +1,372 @@
# 可行性规则库 — 技术优选层的规则源(v1.0 / 2026-10-02)
# =====================================================================
# 用途:
# 导演产出分镜后,capability_matcher 用本规则库做「技术需求 → 能力匹配 → 缺口报告」。
# 规则分三级:blocking(必须解决)/ warning(风险提示)/ info(建议)。
#
# 维护:
# 能力建设完成后改对应 capability_needs[].status(missing → ready),
# 技术方案检测到版本变化会自动标记「可升级」,无需改分镜。
# =====================================================================
version: '1.1'
updated: '2026-10-02'
# ── 引擎时长档位对照(规则 duration_over_single_limit 的判定依据)──────
# 本项目默认引擎=可灵;接入其他引擎时按此表调整上限
engine_duration_limits:
kling: {single_max: 10, slots: [5, 10], note: 可灵 kling-v3 档位 5s/10s}
wan: {single_max: 10, slots: [5, 10], note: 通义万相}
seedance_2_5: {single_max: 30, slots: [4, 30], note: '官方:单条 4–30s,无 1080p;超长模式 30–180s;延长累计 ≤60s'}
seedance_2_0: {single_max: 15, slots: [4, 15], note: '官方:单条 4–15s,可 1080p/4K(15s 时)'}
# ── 能力需求映射(缺口清单的来源)──────────────────────────────
# status: missing(能力目录中无对应实现)/ planned(已登记未实现)/ ready(可用)
capability_needs:
frame_chain:
name: 首尾帧衔接
capability_id: frame_chain
status: partial
note: 长镜头接续 / 无缝延续 / 跨生成单元拼接。
可行路径:可灵/万相首尾帧(kf2v) 或 分段生成+取尾帧作下一段参考。当前能力目录无此项。
expression_consistency:
name: 表情微管理
capability_id: null
status: missing
note: 跨镜表情延续(眼神/嘴部/眉宇一致)。当前仅有 expression_detail 字段靠提示词描述,
无独立能力;精细控制需接 ComfyUI 或专用表情迁移模型。
vfx_apply:
name: 视频特效
capability_id: vfx_apply
status: planned
note: 可灵 camera_control 已部分可用(环绕/子弹时间/慢动作/焦点锁定);更多特效待接入。
character_3d:
name: 3D 角色
capability_id: character_3d
status: planned
note: 混元3D,未接入。
comfyui_workflow:
name: ComfyUI 工作流
capability_id: comfyui_workflow
status: planned
note: RunningHub / ComfyDeploy,未接入。
lipsync:
name: 对口型
capability_id: lipsync
status: partial
note: 代码就绪(fal.ai Kling Lipsync),缺 fal.api_key;火山 OmniHuman 可用。
person_swap:
name: 人物置换
capability_id: person_swap
status: partial
note: 百炼 wan2.2-animate-mix 已校准(std/pro),待真实样片验证。
character_card_seven_dim:
name: 七维角色卡 + 三格出图
capability_id: character_lock
status: partial
note: '现有角色锁定(固定描述块+seed+参考图)已具备雏形;Seedance 方法论要求更严:
七维公式[年龄/种族+肤色质感+面部细节(≥3-4点)+眼神+发型+服装+体型/气质]、
三格出图(一张图三格=同一次噪声=同一个人;格2去头让全图唯一脸源=格1大特写)、
皮肤强制后缀"保留真实的微细毛孔与肌肤纹理"。待纳入角色生成器。'
voice_lock:
name: 声线锁
capability_id: voice_lock
status: ready
note: 'TTS 已可按角色固定音色;方法论要求更严:声线锁逐字复用、连近义词都不换、
外观变体(湿身/带伤/换装)不换锁;群演不逐人建档(人群是一个资产,超15人塌缩)。'
long_video_extend:
name: 超长/视频延长
capability_id: frame_chain
status: missing
note: 底片 ≤30s,单次延长 4–30s,累计 ≤60s(Seedance 2.5 特例通道)。依赖首尾帧衔接能力。
# ── 规则清单 ────────────────────────────────────────────────────
rules:
# ═══ 时长 / 接续 ═══
- id: duration_over_single_limit
name: 单镜时长超生成上限
level: blocking
nature: yellow
trigger: {type: shot_duration_over, value: 10}
problem: 单次视频生成上限 10 秒(可灵/万相档位 5s/10s)
action: 切成两条并在接缝声明接续(chain_from_prev),或压缩到 10 秒内
need: frame_chain
- id: duration_over_5s_complex
name: 超 5 秒且动作幅度大
level: warning
nature: yellow
trigger: {type: duration_and_motion, duration_over: 5, motion_in: [medium, large]}
problem: 长时长 + 大幅动作,角色变形/闪烁风险高
action: 优先 5 秒档;必要时拆分动作节拍,或改用 10 秒档并接受重试损耗
need: null
- id: text_exceeds_duration
name: 台词超出时长容量
level: warning
nature: yellow
trigger: {type: text_fit, chars_per_sec: 4.5}
problem: 台词字数按语速估算需要更长时间,会被截断或语速过快
action: 加长该镜时长(≤10s)或切分台词到下一镜
need: null
# ═══ 一致性需求(缺口驱动)═══
- id: need_frame_chain
name: 要求承接上一镜尾帧(长镜接续)
level: blocking
nature: yellow
trigger: {type: tech_flag, field: chain_from_prev, value: true}
problem: 当前无「首尾帧衔接」能力,无法保证无缝接续
action: 建设该能力(首尾帧 kf2v / 分段+尾帧参考),或改成硬切分镜
need: frame_chain
- id: need_expression_consistency
name: 要求跨镜表情一致
level: blocking
nature: yellow
trigger: {type: tech_continuity, field: expression, values: [must, prefer]}
problem: 无「表情微管理」能力,跨镜表情延续不可控
action: 建设表情一致性能力(ComfyUI/表情迁移),或降级为"不要求"
need: expression_consistency
- id: need_character_consistency
name: 要求跨镜角色一致
level: info
nature: yellow
trigger: {type: tech_continuity, field: character, values: [must, prefer]}
problem: ""
action: 使用「角色锁定」能力(固定描述块 + seed + 参考图绑定)
need: null # 已有能力,满足
- id: need_location_consistency
name: 要求跨镜场景一致
level: info
nature: yellow
trigger: {type: tech_continuity, field: location, values: [must, prefer]}
problem: ""
action: 使用场地资产 + 首帧参考(部分依赖 frame_chain 才能完全无缝)
need: null
# ═══ 特效 / 运镜 / 特殊需求 ═══
- id: need_vfx
name: 需要视频特效
level: warning
nature: yellow
trigger: {type: shot_or_need, shot_type: vfx, need_keywords: [特效, 子弹时间, 环绕, 慢动作, 焦点锁定, 变速]}
problem: vfx_apply 能力为 planned,仅可灵 camera_control 部分可用
action: 用可灵运镜参数承载(环绕/子弹时间/慢动作/焦点锁定),其余待能力建设
need: vfx_apply
- id: camera_complex
name: 复杂运镜调度
level: warning
nature: yellow
trigger: {type: tech_flag, field: camera_difficulty, value: complex}
problem: 复杂调度(环绕/跟拍/多段运镜合一)单次生成成功率低
action: 拆成多个简单运镜的条,或接受重试损耗
need: null
- id: need_hand_closeup
name: 手部特写/精细手部动作
level: warning
nature: yellow
trigger: {type: need_keywords, keywords: [手部特写, 手部动作, 拿取细节, 手指]}
problem: 手部是最易变形区域,特写下更明显
action: 降低手部占比或改为中近景;必要时接受局部重绘
need: null
- id: need_on_screen_text
name: 画面内文字/LOGO
level: warning
nature: yellow
trigger: {type: need_keywords, keywords: [画面文字, 字幕特效, LOGO, 招牌, 书籍文字]}
problem: 视频模型对画面内文字渲染不稳定(易乱码)
action: 文字改为后期叠加(字幕能力),画面内避免依赖文字
need: null
- id: need_multi_person
name: 多人同框互动
level: warning
nature: yellow
trigger: {type: need_keywords, keywords: [多人, 双人互动, 对话双方, 群像]}
problem: 多人一致性/交互稳定性差
action: 减少同框人数或用正反打(单人对镜)替代同框
need: null
# ═══ 合规红线 ═══
- id: real_person_authorization
name: 真人肖像未授权
level: blocking
nature: red
trigger: {type: manual_check}
problem: 使用真人肖像(含真人参考图/人物置换)必须有书面授权
action: 在授权登记中登记后放行;未授权不得生成
need: null
- id: platform_restricted
name: 平台禁限内容
level: blocking
nature: red
trigger: {type: manual_check}
problem: 暴力/色情/政治敏感等平台禁限内容会被拒绝或封号
action: 停下报告用户,不自行改写规避
need: null
# ══════════════════════════════════════════════════════════════
# v1.1 追加 — 来自 Seedance 方法论卡片(hongxian / moxinglei / leiqu)
#
# nature 三色分性质(对应 Seedance 审核体系):
# red = 绝对红线(法律/平台硬禁)→ 命中即 blocking,不许生成
# yellow = 平台误杀规避(工程约束,不是法律红线)→ 只标「建议改 + 通过率风险」,不判 FAIL
# blue = 投放侧合规(内容能生成,卡的是上线手续)→ 只标「前置事项 + 责任方=user」
# ══════════════════════════════════════════════════════════════
# ── 模型雷 · B 动态预演 ──
- id: mine_identity_drift_seam
name: 条缝/镜缝身份漂移(变脸)
level: warning
nature: yellow
trigger: {type: need_keywords, keywords: [换装, 湿身, 淋雨, 受伤, 带伤, 血迹, 变装]}
problem: 外观状态变化处若未声明接缝状态,跨条/跨镜会变脸漂移
action: 在接缝声明**结束状态五字段**(位置 / 朝向 / 持物 / 动作动势 / 情绪),下一条按此承接
need: null
- id: mine_conflicting_actions
name: 一镜叠加互斥动作
level: warning
nature: yellow
trigger: {type: need_keywords, keywords: [一边, 同时又, 同时进行, 并同时]}
problem: 一条内并行多个互斥动作 → 模型取平均,动作糊成一片
action: 拆成两条(条一个目的),或只保留承重动作
need: null
- id: mine_abstract_emotion
name: 情绪单词化(漫画化/死面)
level: warning
nature: yellow
trigger: {type: need_keywords, keywords: [悲伤, 愤怒, 开心, 绝望, 恐惧, 震惊, 兴奋]}
problem: 只写情绪形容词 → 模型输出夸张漫画化表情或死面
action: 改写成**可见行为 + 微表情**(眼神/嘴部/眉宇 + 具体动作)
need: null
- id: mine_crowd_collapse
name: 群像人数超稳定区(塌缩)
level: warning
nature: yellow
trigger: {type: need_keywords, keywords: [人群, 群像, 人群涌动, 众多, 上百, 几十人, 十多人]}
problem: 主体稳定区 1–5 人;群像写实数或超 15 人会塌缩/相似脸
action: 人群作**一个资产**不逐人建档;只写身体质量与局部,不写人数
need: null
- id: mine_precise_lipsync
name: 精确口型与长台词
level: warning
nature: yellow
trigger: {type: need_keywords, keywords: [口型, 对口型, 说话特写, 长篇独白]}
problem: 口型三前提:短句 / 正脸 / 中景;单句超 20 词未拆则口型必崩
action: 拆短句,改正脸中景,或后期对口型(lipsync 能力)
need: lipsync
- id: mine_open_motion
name: 开放运动无终点
level: warning
nature: yellow
trigger: {type: need_keywords, keywords: [走去, 跑向远方, 走出画面, 渐行渐远, 无限延伸]}
problem: 开放式运动缺终点锚 → 模型卡死或抽搐
action: 给运动一个**可见终点/落点**,或明确写出结束状态
need: null
# ── 可行性雷 · 11 卡要点 ──
- id: feas_precise_quantity
name: 精确数量承重
level: warning
nature: yellow
trigger: {type: need_keywords, keywords: [三只手, 五个人, 恰好, 正好, 数量精确, 一共, 整齐排列]}
problem: 精确数量是模型弱项,数量承重易错
action: 降低数量承重(改"几个"),或降档/标注放行
need: null
- id: feas_sustained_contact
name: 持续精确接触点
level: warning
nature: yellow
trigger: {type: need_keywords, keywords: [抵住, 贴着, 接触点, 手指按, 刀抵, 针尖, 精确触碰]}
problem: 持续精确接触(刀抵喉/针尖等)易穿模错位
action: 用**解剖位正向描述 + 对比双写**("刀锋贴在颈侧皮肤上"),或降档为不接触
need: null
- id: feas_special_physics
name: 特殊物理(硬机械/液体火烟粒子)
level: warning
nature: yellow
trigger: {type: need_keywords, keywords: [爆炸, 火焰, 烟雾, 水流, 液体, 机械结构, 齿轮, 碎片]}
problem: 特殊物理模拟不稳定(硬机械穿模、流体/粒子失控)
action: 缩短其出现时长、减少精细交互,或改用后期特效叠加(vfx)
need: vfx_apply
- id: feas_large_group_scale
name: 大规模群体场面(卡01)
level: warning
nature: yellow
trigger: {type: need_keywords, keywords: [大军, 战场, 广场人群, 集会, 阅兵, 无数人]}
problem: 稳定区 1–5 主体;大规模群体必然塌缩
action: 用**局部特写 + 数量暗示**(旗帜/脚步/背影)替代全景实数
need: null
# ── 红线 · 三色体系 ──
- id: red_copyright_ip
name: 版权 IP(🔴 绝对红线)
level: blocking
nature: red
trigger: {type: need_keywords, keywords: [动漫角色, 影视角色, 游戏角色, 明星, IP形象, 知名卡通, 品牌logo, 商标]}
problem: 使用受版权保护的 IP/角色/品牌形象 → 侵权(判例:投喂《斗破苍穹》角色形象被判赔 5 万)
action: 停止;改为原创形象或取得授权
need: null
- id: red_false_info
name: 虚假信息 / 伪证类(🔴 绝对红线)
level: blocking
nature: red
trigger: {type: need_keywords, keywords: [去水印, 去角标, 去AI标识, 消除标识, 伪街拍, 伪监控, 伪新闻, 伪造现场]}
problem: 伪造真实性/去除 AI 标识属虚假信息红线
action: 停止;不得用于伪造真实场景或消除 AI 标识
need: null
- id: red_real_person
name: 真人肖像(🔴 绝对红线)
level: blocking
nature: red
trigger: {type: manual_check}
problem: 使用真人肖像(含真人参考图 / 人物置换 / 明星脸)须书面授权
action: 在授权登记中登记后放行;未授权不得生成(责任方=user)
need: null
- id: yellow_platform_false_kill
name: 平台误杀规避(🟡 工程约束)
level: warning
nature: yellow
trigger: {type: manual_check}
problem: 密集血腥特写 / 敏感历史题材 / 动漫风低拦截阈值 等易被平台误杀
action: 标注「建议改 + 通过率风险」;**不判 FAIL、不置 blocking**(除非同时踩某条 🔴)
need: null
- id: blue_delivery_compliance
name: 投放侧合规(🔵 前置手续)
level: info
nature: blue
trigger: {type: manual_check}
problem: 内容可生成,卡的是上线手续(网络剧片发行许可/备案/分级)
action: 标注「投放前置事项 + 责任方=user」;**不判 FAIL、不置 blocking**
need: null
- id: green_protect
name: 绿档保护(不许以「可实现性」砍)
level: info
nature: yellow
trigger: {type: need_keywords, keywords: [长场, 长镜头调度, 夜戏, 逆光, 剪影, 情绪重头戏, 正反打]}
problem: 这些是本方法论的**绿档**内容,不得以技术可实现性为由删除
action: 优先保内容;技术手段不足时按「改写 → 降档 → 标注放行 → 待决」处理,而不是砍内容
need: null
# ── 处置四类说明(供前端提示) ──
# 处置顺序:改写(首选)→ 降档(保画面类型压复杂度)→ 标注放行 → 待决(用户拍板)
# 原则:能改写就不降档,能降档就不删。
@@ -0,0 +1,126 @@
# 图像生成模型注册表 —— 关键帧工作台「引擎」下拉的数据源
#
# 用途:让用户知道「换这个模型能得到什么」,并据此过滤可用的生成方式。
#
# supports 取值(= 生成方式 / 底层能力):
# multi 多图融合(角色图 + 场景图 → 一张)
# single 图生图(单参考图)
# text2img 文生图(无参考图)
# edit 改造已有图(指令编辑 / 结构保持重绘)
#
# key_field 指定用哪个凭证(对应 agent-local/tools/ave/config/local.yaml 的节)
#
# ⚠️ 价格与限制来自官方文档,可能随平台调整;标注「待验证」的未实测。
version: 1
updated: "2026-10-04"
models:
# ─────────── 百炼 / 千问AI平台(同一 key,已实测可用)───────────
- id: wan2.7-image-pro
name: 万相 2.7 Image Pro
vendor: 百炼(千问AI平台)
price: "¥0.2/张"
verified: true
note: 旗舰图像模型。最多 9 张输入图,顺序模式一次可出 12 张;多图融合(角色+场景)效果最好。
supports: [multi, single, text2img]
limits:
max_input_images: 9
size_range: "宽高 512–2048;总像素 1280²–1440²"
n_max: 4
key_field: aliyun
- id: qwen-image-3.0-pro
name: 千问图像 3.0 Pro
vendor: 百炼(千问AI平台)
price: "¥0.2/张"
verified: false
note: 强在文字渲染与复杂版面(10 像素小字、12 国语言),也支持文生图;画面文字多时选它。
supports: [multi, single, text2img]
limits:
max_input_images: 3
size_range: "宽高各 512–2048;不指定时模型自动推荐"
n_max: 6
key_field: aliyun
- id: qwen-image-edit-max
name: 千问图像编辑 Max
vendor: 百炼(千问AI平台)
price: "¥0.2/张"
verified: false
note: 编辑专用。增强工业设计、几何推理与【人物一致性】——改图时人物不易走形,比 plus 更稳。
supports: [edit, single, multi]
limits:
max_input_images: 3
size_range: "宽高各 512–2048"
n_max: 6
key_field: aliyun
- id: qwen-image-edit-plus
name: 千问图像编辑 Plus
vendor: 百炼(千问AI平台)
price: "¥0.2/张"
verified: true
note: 默认编辑引擎。结构保持重绘,支持多图输出与自定义分辨率。
supports: [edit, single, multi]
limits:
max_input_images: 3
size_range: "宽高各 512–2048;默认约 1024×1024(贴近原图比例)"
n_max: 6
key_field: aliyun
- id: qwen-image-edit
name: 千问图像编辑(基础)
vendor: 百炼(千问AI平台)
price: "¥0.2/张"
verified: false
note: 最轻量。单图编辑 + 多图融合;但只能用默认分辨率,且一次只出 1 张。
supports: [edit, single, multi]
limits:
max_input_images: 3
size_range: "仅默认分辨率(不可指定)"
n_max: 1
key_field: aliyun
# ─────────── 可灵(需 kling key;本期先登记,调用接线待做)───────────
- id: kling-v3
name: 可灵 Image 3.0
vendor: 可灵(Kling)
price: "¥0.2/张"
verified: true
note: 本机角色定妆照已在用。人物质感好;与短剧镜头语言同一个生态,风格更容易延续。
supports: [single, text2img]
limits:
max_input_images: 1
size_range: "由接口 aspect_ratio 控制(9:16 / 16:9 / 1:1 等)"
n_max: 4
key_field: kling
status: 待接线
- id: kling-multi-image2image
name: 可灵 多图参考生图
vendor: 可灵(Kling)
price: "¥0.4/张"
verified: false
note: 官方多图参考。主体图 1–4 张 + 场景图 + 风格图【分开传、互不污染】——融合逻辑比通用模型更干净。
supports: [multi, single]
limits:
max_input_images: 4
size_range: "由接口控制"
n_max: 4
key_field: kling
status: 待接线
# ─────────── 即梦 / 火山方舟(需先在火山控制台开通模型)───────────
- id: seedream-3.0
name: 即梦 Seedream 3.0
vendor: 即梦(火山方舟)
price: "按火山计费"
verified: false
note: 中文语义与海报感强;需先在火山控制台开通该模型,否则报权限错误。
supports: [single, text2img]
limits:
max_input_images: 1
size_range: "以火山接口为准"
n_max: 4
key_field: volcano
status: 待开通
@@ -0,0 +1,786 @@
# 六层参数库(GapEngine)— 创意缺口计算的基础资产
# =====================================================================
# 来源:GapEngine 设计(2026-10-02 讨论)原文全量导入,零删改。
# 用途:创意工坊中挑参数 → 计算"缺口分"(选中值 intensity 的方差)→ 生成画面联想卡。
#
# 字段:
# intensity 预期强度 0~1 —— 观众看到该选择时的"不寻常程度"
# (低=符合预期/常规,高=出乎预期/有张力)
# cue 画面联想描述 —— 拼成"画面联想卡"的一段话,用于触发导演脑补
#
# 维护:可直接编辑本文件(数值/描述/新增值均可),下次生成立刻生效。
# =====================================================================
layers:
- id: narrative
name: 叙事层
params:
- id: info_release
name: 信息释放节奏
values:
- value: 结果前置
intensity: 0.9
cue: "画面直接从结局开始,观众第一眼看到的是结果,不是原因"
- value: 线性递进
intensity: 0.2
cue: "画面按时间顺序推进,从开始到结束,不跳跃"
- value: 倒叙悬念
intensity: 0.7
cue: "画面从中间或结尾切入,再回到起点,制造'为什么'的追问"
- value: 碎片拼图
intensity: 0.85
cue: "画面跳跃在不同时间点之间,观众需要自己拼出完整故事"
- id: conflict_type
name: 冲突类型
values:
- value: 人与环境
intensity: 0.5
cue: "角色在和外部环境对抗,比如病房、走廊、时间"
- value: 人与人
intensity: 0.6
cue: "角色在和另一个人对峙或互动,有对话张力"
- value: 人与自我
intensity: 0.7
cue: "角色在和自己较劲,内心矛盾通过微表情和停顿外化"
- value: 认知反转
intensity: 0.9
cue: "观众以为的真相被推翻,画面信息前后矛盾"
- id: reversal_density
name: 反转密度
values:
- value: 零次
intensity: 0.1
cue: "全片没有反转,情绪平稳推进"
- value: 一次结尾
intensity: 0.6
cue: "结尾处有一个反转,前面积累的情绪在最后释放"
- value: 两次递进
intensity: 0.8
cue: "中间一次小反转,结尾一次大反转,情绪两次起伏"
- value: 高频反转
intensity: 1.0
cue: "每隔几秒就有一次认知颠覆,观众来不及建立预期就被打破"
- id: perspective
name: 视角
values:
- value: 第一人称自述
intensity: 0.3
cue: "镜头就是角色的眼睛,观众通过角色视角看世界"
- value: 第三人称旁观
intensity: 0.2
cue: "镜头在角色外部观察,像纪录片摄制组跟拍"
- value: 上帝视角
intensity: 0.5
cue: "镜头可以出现在任何位置,不受物理限制"
- value: 不可靠叙述者
intensity: 0.9
cue: "画面呈现的内容和角色说的不一致,观众需要自己判断真相"
- id: emotional_end
name: 情感终点
values:
- value: 释然
intensity: 0.3
cue: "结尾情绪是放下、轻松、呼出一口气"
- value: 共鸣
intensity: 0.4
cue: "结尾让观众觉得'我也是这样',产生认同感"
- value: 爽感
intensity: 0.7
cue: "结尾是压抑后的爆发,观众获得替代性满足"
- value: 困惑
intensity: 0.8
cue: "结尾不给答案,观众带着疑问离开"
- value: 温馨
intensity: 0.2
cue: "结尾是柔和、温暖、让人微笑的情绪"
- id: info_gap
name: 信息缺口
values:
- value: 无缺口
intensity: 0.1
cue: "所有信息都在画面里,观众不需要猜"
- value: 小缺口
intensity: 0.4
cue: "有一个小疑问,观众想知道答案但不会焦虑"
- value: 大缺口
intensity: 0.8
cue: "核心信息被隐藏,观众必须看下去才能理解"
- value: 多重缺口
intensity: 1.0
cue: "多个悬念叠加,每个镜头都在制造新的未知"
# ── 第七层:表达层(本项目扩展 2026-10-03,原对话六层之外新增)──
# 用途:用"不直接说"的方式表达主题——隐喻 / 象征 / 反讽 / 留白。
# 说明:直述是默认(低强度);一旦用了隐喻类手法,缺口分自然升高。
- id: rhetoric
name: 表达层
params:
- id: expression_mode
name: 表达方式
values:
- value: 直述
intensity: 0.1
cue: "画面直接把要说的事讲出来,不绕弯,观众一眼懂"
- value: 明喻
intensity: 0.5
cue: "画面明确把两件事摆在一起(像…一样),观众当下就能看出这个类比"
- value: 暗喻
intensity: 0.85
cue: "画面只呈现喻体本身(如地震、潮水),被比喻的事始终不出现,观众自己完成那次替代"
- value: 象征
intensity: 0.9
cue: "一个物象在片中被反复带出(笼中鸟、镜子),逐渐脱离实物含义,成为某种处境的固定符号"
- value: 反讽
intensity: 0.7
cue: "画面呈现的和话里说的相反,观众听得出那层言外之意"
- value: 留白
intensity: 0.8
cue: "最关键的信息始终没给,画面停在动作之前或之后,让观众被迫自己补完"
- id: vehicle_source
name: 喻体来源
values:
- value: 自然现象
intensity: 0.85
cue: "地震、潮水、风暴、干旱——用自然的剧烈或枯竭,对应人的处境与情绪"
- value: 机械人造
intensity: 0.8
cue: "齿轮、流水线、监控、牢笼——用工业与规训的秩序,对应被安排的处境"
- value: 动物
intensity: 0.7
cue: "笼中鸟、困兽、茧、飞蛾——用它们的姿态与命运,对应人的状态"
- value: 身体感官
intensity: 0.75
cue: "呼吸、脉搏、疼痛、麻木——用生理反应外化内在的情绪强度"
- value: 日常物件
intensity: 0.6
cue: "镜子、雨伞、闹钟、行李、门——用日常物件的非常规使用承载含义"
- id: mapping
name: 映射关系
values:
- value: 整体寓言
intensity: 0.95
cue: "整条片子从头到尾就是同一个比喻,没有一个镜头是写实的"
- value: 一物多义
intensity: 0.85
cue: "同一个喻体在不同观众那里读出不同所指,不做唯一解释"
- value: 一对一
intensity: 0.4
cue: "喻体与所指严格对应,A 就是 B,观众能准确还原"
- value: 局部点缀
intensity: 0.3
cue: "只在某几个镜头里出现一个带含义的物象,其余部分写实推进"
- id: reveal_timing
name: 揭示时机
values:
- value: 全程不点破
intensity: 0.9
cue: "从头到尾不解释这层含义,相信观众能自己悟到"
- value: 中途暗示
intensity: 0.6
cue: "中段给一个信号让观众意识到'这里还有另一层意思',之后照旧不点破"
- value: 结尾点破
intensity: 0.5
cue: "结尾用一个回扣的镜头,让前面所有暗喻一次性被观众读懂"
- id: visual
name: 视觉造型层
params:
- id: shot_size
name: 景别
values:
- value: 大远景
intensity: 0.3
cue: "人物在画面中很小,环境占主导"
- value: 全景
intensity: 0.2
cue: "人物全身可见,和环境关系清晰"
- value: 中景
intensity: 0.2
cue: "人物腰部以上,日常对话的常规景别"
- value: 近景
intensity: 0.5
cue: "人物胸部以上,表情开始变得重要"
- value: 特写
intensity: 0.7
cue: "面部占据画面大部分,每一个微表情都被放大"
- value: 大特写
intensity: 0.9
cue: "只有眼睛、嘴唇或某个局部,极其强烈的聚焦"
- id: angle
name: 角度
values:
- value: 平视
intensity: 0.1
cue: "摄影机和眼睛齐平,最中性的视角"
- value: 俯拍
intensity: 0.7
cue: "摄影机从高处向下看,人物显得渺小或被压迫"
- value: 仰拍
intensity: 0.7
cue: "摄影机从低处向上看,人物显得高大或有威胁感"
- value: 荷兰角
intensity: 0.9
cue: "画面倾斜,地平线不水平,制造不安和失衡"
- value: 鸟瞰
intensity: 0.8
cue: "垂直向下看,像地图视角,人物变成几何图形"
- value: 虫视
intensity: 0.9
cue: "从地面向上看,极低角度,世界变得陌生"
- id: depth
name: 景深
values:
- value: 深景深
intensity: 0.2
cue: "前景背景全部清晰,观众可以自由选择看哪里"
- value: 浅景深
intensity: 0.6
cue: "只有主体清晰,背景虚化,强制观众聚焦"
- value: 微距极浅
intensity: 0.9
cue: "只有几毫米的清晰范围,像透过放大镜看世界"
- id: focal_length
name: 焦距感
values:
- value: 广角畸变
intensity: 0.7
cue: "边缘拉伸,空间被夸大,有轻微的鱼眼效果"
- value: 标准
intensity: 0.1
cue: "接近人眼自然视角,无明显畸变"
- value: 长焦压缩
intensity: 0.6
cue: "前后景被压扁,空间变得扁平,有偷窥感"
- value: 鱼眼
intensity: 1.0
cue: "极端球形畸变,世界完全变形"
- id: composition
name: 构图
values:
- value: 居中对称
intensity: 0.3
cue: "主体在正中间,左右对称,稳定但可能呆板"
- value: 三分法
intensity: 0.1
cue: "主体在三分之一交点,常规舒适构图"
- value: 对角线
intensity: 0.6
cue: "主体沿对角线排列,画面有动感和方向感"
- value: 框架式
intensity: 0.7
cue: "主体被门框、窗框等包围,有被困或窥视感"
- value: 不平衡
intensity: 0.8
cue: "主体严重偏一侧,画面失衡,制造紧张"
- id: aspect_ratio
name: 画面比例
values:
- value: "16:9"
intensity: 0.1
cue: "标准横屏,常规视频比例"
- value: "9:16"
intensity: 0.3
cue: "竖屏,手机原生比例,有亲密感"
- value: "4:3"
intensity: 0.5
cue: "复古电视比例,有年代感"
- value: "1:1"
intensity: 0.6
cue: "正方形,社交媒体感,中性但非常规"
- value: "2.35:1"
intensity: 0.7
cue: "宽银幕,电影感强烈,有史诗感"
- id: motion
name: 运动层
params:
- id: camera_move
name: 相机运动
values:
- value: 固定
intensity: 0.1
cue: "摄影机完全不动,画面像一张会呼吸的照片"
- value: 推
intensity: 0.5
cue: "摄影机缓慢靠近主体,注意力逐渐收紧"
- value: 拉
intensity: 0.5
cue: "摄影机缓慢远离主体,揭示更多环境"
- value: 摇
intensity: 0.4
cue: "摄影机在原地左右转动,像转头看"
- value: 移
intensity: 0.5
cue: "摄影机平行移动,画面像画卷展开"
- value: 跟
intensity: 0.6
cue: "摄影机跟随主体移动,观众有同行感"
- value: 升降
intensity: 0.7
cue: "摄影机垂直上下移动,视角高度变化"
- value: 环绕
intensity: 0.8
cue: "摄影机绕着主体转圈,主体成为中心"
- value: 手持晃动
intensity: 0.8
cue: "画面持续轻微抖动,像有人举着手机在拍"
- id: motion_speed
name: 运动速度
values:
- value: 静止
intensity: 0.1
cue: "没有任何运动,时间像被冻结"
- value: 缓慢
intensity: 0.3
cue: "运动极慢,几乎察觉不到,但画面在呼吸"
- value: 正常
intensity: 0.2
cue: "自然速度,和日常体验一致"
- value: 快速
intensity: 0.7
cue: "运动很快,有紧迫感或慌乱感"
- value: 变速
intensity: 0.9
cue: "速度在镜头内变化,比如从快到慢,制造时间异常感"
- id: motion_direction
name: 运动方向
values:
- value: 水平
intensity: 0.2
cue: "左右移动,常规方向"
- value: 垂直
intensity: 0.4
cue: "上下移动,有升起或坠落感"
- value: 斜向
intensity: 0.5
cue: "对角线移动,有动感和不稳定感"
- value: 旋转
intensity: 0.8
cue: "画面旋转,世界倾斜,制造眩晕"
- value: 无方向
intensity: 0.7
cue: "手持随机晃动,没有明确方向,有真实感但不安"
- id: stability
name: 镜头稳定性
values:
- value: 三脚架
intensity: 0.1
cue: "完全稳定,像专业摄影机架在支架上"
- value: 稳定器
intensity: 0.2
cue: "平滑移动,没有抖动,有专业感"
- value: 手持轻微
intensity: 0.5
cue: "有轻微呼吸感抖动,像真人手持拍摄"
- value: 手持剧烈
intensity: 0.8
cue: "明显晃动,像在走路或跑步中拍摄"
- value: 呼吸感模拟
intensity: 0.4
cue: "画面有规律的轻微起伏,像摄影师的呼吸"
- id: focus_behavior
name: 焦点行为
values:
- value: 全程清晰
intensity: 0.1
cue: "所有内容都在焦点内,观众自由观看"
- value: 缓慢拉焦
intensity: 0.5
cue: "焦点从一个对象缓慢转移到另一个,引导注意力"
- value: 快速变焦
intensity: 0.7
cue: "焦点快速切换,有紧张感或强调感"
- value: 焦点呼吸
intensity: 0.6
cue: "焦点轻微前后移动,像眼睛在调整,有生命感"
- id: frame_rate_feel
name: 帧率感
values:
- value: 24fps电影感
intensity: 0.4
cue: "有轻微的运动模糊,电影质感"
- value: 30fps手机感
intensity: 0.2
cue: "日常视频感,和手机拍摄一致"
- value: 60fps流畅
intensity: 0.5
cue: "极其流畅,有运动相机或游戏感"
- value: 升格慢动作
intensity: 0.8
cue: "时间被拉长,动作变慢,有强调和仪式感"
- value: 抽帧卡顿
intensity: 0.9
cue: "画面不流畅,像定格动画或故障,有风格化感"
- id: lighting
name: 光影与色彩层
params:
- id: light_direction
name: 光线方向
values:
- value: 正面光
intensity: 0.1
cue: "光线从摄影机方向照来,面部无阴影,平淡"
- value: 侧面光
intensity: 0.5
cue: "光线从一侧照来,面部一半亮一半暗,有立体感"
- value: 逆光
intensity: 0.7
cue: "光线从背后照来,主体变成剪影,有神秘感"
- value: 顶光
intensity: 0.7
cue: "光线从头顶照下,眼窝和下巴有阴影,有压迫感"
- value: 底光
intensity: 0.9
cue: "光线从下方照来,面部阴影反转,有恐怖或诡异感"
- value: 混合光
intensity: 0.6
cue: "多个方向的光源,色温和强度不同,有复杂感"
- id: light_quality
name: 光线质感
values:
- value: 柔光
intensity: 0.2
cue: "光线柔和,阴影边缘模糊,有温和感"
- value: 硬光
intensity: 0.7
cue: "光线强烈,阴影边缘锐利,有戏剧性"
- value: 混合
intensity: 0.5
cue: "柔光和硬光混合,有层次感"
- value: 无方向环境光
intensity: 0.3
cue: "光线来自四面八方,没有明确方向,像阴天"
- id: color_temperature
name: 色温
values:
- value: 暖
intensity: 0.3
cue: "画面偏黄橙色,有温暖、怀旧或温馨感"
- value: 中性
intensity: 0.1
cue: "画面色温正常,无明显偏色"
- value: 冷
intensity: 0.6
cue: "画面偏蓝青色,有冷静、疏离或科技感"
- value: 混合色温
intensity: 0.8
cue: "画面中同时存在暖光和冷光,有冲突感"
- id: saturation
name: 饱和度
values:
- value: 低饱和
intensity: 0.6
cue: "颜色灰暗,像褪色照片,有纪实或抑郁感"
- value: 正常
intensity: 0.1
cue: "颜色自然,和日常视觉一致"
- value: 高饱和
intensity: 0.7
cue: "颜色鲜艳,有广告或梦幻感"
- value: 局部高饱和
intensity: 0.8
cue: "大部分画面灰暗,只有某个颜色突出,有强调感"
- id: contrast
name: 对比度
values:
- value: 低对比
intensity: 0.4
cue: "画面平淡,明暗差异小,有朦胧感"
- value: 正常
intensity: 0.1
cue: "明暗关系自然"
- value: 高对比
intensity: 0.7
cue: "明暗差异强烈,有硬朗或戏剧感"
- value: 剪影
intensity: 0.9
cue: "主体全黑,只有轮廓,背景明亮"
- id: color_scheme
name: 色彩方案
values:
- value: 单色
intensity: 0.4
cue: "画面只有一个色系,有统一感和风格化"
- value: 互补色
intensity: 0.6
cue: "使用色轮上相对的两种颜色,有视觉张力"
- value: 邻近色
intensity: 0.2
cue: "使用色轮上相邻的颜色,和谐舒适"
- value: 冲突色
intensity: 0.9
cue: "使用红绿、橙蓝等强烈冲突的颜色,有不安或荒诞感"
- id: performance
name: 表演层
params:
- id: facial_expression
name: 面部表情
values:
- value: 中性
intensity: 0.1
cue: "面部肌肉完全放松,没有情绪波动"
- value: 微表情
intensity: 0.5
cue: "极其细微的表情变化,只有眼角或嘴角的轻微移动"
- value: 克制的情绪
intensity: 0.6
cue: "有情绪但被压制,面部有紧张感但不释放"
- value: 夸张表情
intensity: 0.9
cue: "表情幅度极大,像喜剧或默片表演"
- value: 面具式表情
intensity: 0.8
cue: "面部像戴了面具,表情固定不变,有诡异感"
- id: eye_behavior
name: 眼神
values:
- value: 直视镜头
intensity: 0.5
cue: "角色看着镜头,像在和观众对视"
- value: 看向画外
intensity: 0.3
cue: "角色看向画面外,有叙事空间感"
- value: 眼神游离
intensity: 0.7
cue: "眼神不确定地移动,有不安或心虚感"
- value: 眼神锁定
intensity: 0.6
cue: "眼神死死盯住某个对象,有强烈意图"
- value: 闭眼
intensity: 0.8
cue: "眼睛闭上,有内省、逃避或享受感"
- id: body_movement
name: 肢体动作
values:
- value: 静止
intensity: 0.1
cue: "身体完全不动,只有呼吸"
- value: 微动作
intensity: 0.4
cue: "手指、呼吸等细微动作,有生命感"
- value: 日常动作
intensity: 0.2
cue: "走路、坐下、拿东西等自然动作"
- value: 刻意动作
intensity: 0.6
cue: "动作有明确意图,比如刻意整理衣服、刻意转身"
- value: 夸张肢体
intensity: 0.9
cue: "动作幅度极大,有表演性或喜剧感"
- id: posture
name: 姿态
values:
- value: 放松
intensity: 0.2
cue: "肩膀下沉,身体自然,无紧张感"
- value: 紧张
intensity: 0.7
cue: "肩膀耸起,身体僵硬,有防御感"
- value: 开放
intensity: 0.3
cue: "身体面向对方,手臂不交叉,有接纳感"
- value: 防御
intensity: 0.6
cue: "手臂交叉或身体后缩,有拒绝感"
- value: 不对称
intensity: 0.5
cue: "身体歪斜或重心偏移,有随意或不安感"
- id: spatial_distance
name: 空间距离
values:
- value: 亲密
intensity: 0.8
cue: "距离小于45厘米,有亲密或侵入感"
- value: 社交
intensity: 0.3
cue: "距离1-3米,日常交流距离"
- value: 公共
intensity: 0.5
cue: "距离大于3米,有距离感或正式感"
- value: 极远
intensity: 0.7
cue: "距离极远,人物很小,有孤独感"
- id: performance_style
name: 表演风格
values:
- value: 自然主义
intensity: 0.2
cue: "表演像真实生活,没有痕迹"
- value: 风格化
intensity: 0.6
cue: "表演有明确风格,比如夸张、冷峻、诗意"
- value: 布莱希特间离
intensity: 0.9
cue: "表演刻意让观众意识到'这是表演',打破沉浸"
- value: 默片式
intensity: 0.8
cue: "表演夸张,依赖肢体和表情,像无声电影"
- value: 超现实
intensity: 1.0
cue: "表演逻辑不符合现实,有梦境或荒诞感"
- id: sound
name: 声音层
params:
- id: speech_rate
name: 人声语速
values:
- value: 极慢
intensity: 0.7
cue: "每个字之间都有明显停顿,有沉重或犹豫感"
- value: 慢
intensity: 0.4
cue: "语速缓慢,有平静或疲惫感"
- value: 正常
intensity: 0.1
cue: "日常语速"
- value: 快
intensity: 0.6
cue: "语速较快,有兴奋或焦虑感"
- value: 极快
intensity: 0.9
cue: "语速极快,像在赶时间或情绪失控"
- id: speech_volume
name: 人声音量
values:
- value: 耳语
intensity: 0.8
cue: "极低音量,像在耳边说话,有亲密或秘密感"
- value: 轻声
intensity: 0.5
cue: "低音量,有温柔或虚弱感"
- value: 正常
intensity: 0.1
cue: "日常音量"
- value: 大声
intensity: 0.6
cue: "音量提高,有强调或愤怒感"
- value: 喊叫
intensity: 0.9
cue: "极大声,有失控或爆发感"
- id: speech_emotion
name: 人声情绪
values:
- value: 平静
intensity: 0.1
cue: "声音没有情绪波动,像在陈述事实"
- value: 克制
intensity: 0.5
cue: "有情绪但被压制,声音有轻微颤抖或停顿"
- value: 波动
intensity: 0.6
cue: "情绪有起伏,声音时高时低"
- value: 爆发
intensity: 0.9
cue: "情绪完全释放,声音有冲击力"
- value: 冷漠
intensity: 0.7
cue: "声音没有任何温度,有疏离或机械感"
- id: bgm_presence
name: BGM存在感
values:
- value: 无BGM
intensity: 0.6
cue: "没有任何背景音乐,只有环境音或沉默"
- value: 极低环境音
intensity: 0.4
cue: "只有极低的环境音铺底,几乎察觉不到"
- value: 低音量垫底
intensity: 0.2
cue: "有BGM但音量很低,不抢人声"
- value: 正常配乐
intensity: 0.3
cue: "BGM和人声平衡,有情绪引导作用"
- value: 主导性配乐
intensity: 0.8
cue: "BGM是主角,人声被音乐包裹,有MV感"
- id: bgm_emotion_match
name: BGM情绪匹配
values:
- value: 匹配画面情绪
intensity: 0.1
cue: "音乐和画面情绪一致,观众感受被强化"
- value: 不匹配
intensity: 0.8
cue: "音乐和画面情绪相反,比如悲伤画面配欢快音乐,制造反差"
- value: 完全无关
intensity: 1.0
cue: "音乐和画面毫无关系,有荒诞或间离感"
- id: sfx_density
name: 音效密度
values:
- value: 无音效
intensity: 0.5
cue: "没有任何额外音效,只有原始声音"
- value: 关键音效
intensity: 0.4
cue: "只在关键动作或转折处有音效强调"
- value: 环境音铺底
intensity: 0.3
cue: "有持续的环境音,比如风声、走廊声,有空间感"
- value: 密集音效
intensity: 0.8
cue: "大量音效叠加,每个动作都有声音,有设计感"
- id: silence_usage
name: 沉默使用
values:
- value: 无沉默
intensity: 0.2
cue: "全片有持续的声音,没有安静时刻"
- value: 短暂停顿
intensity: 0.5
cue: "在关键处有短暂停顿,有强调作用"
- value: 长沉默
intensity: 0.8
cue: "有大段沉默,只有画面在动,有压迫或内省感"
- value: 全片沉默
intensity: 1.0
cue: "没有任何人声和音乐,只有环境音或完全安静"
- id: sound_space
name: 声音空间感
values:
- value: 干声
intensity: 0.3
cue: "声音没有混响,像在录音棚,有亲近感"
- value: 小空间
intensity: 0.2
cue: "声音有轻微混响,像在小房间"
- value: 大空间
intensity: 0.5
cue: "声音有明显混响,像在礼堂或空旷处"
- value: 异常空间
intensity: 0.9
cue: "声音有水下、金属、隧道等异常混响,有超现实感"
@@ -0,0 +1,88 @@
# 短剧角色参考图套装 — 预设角色包(6 套)
# =====================================================================
# 用途:角色生成器「📸 生成套装(5 视角)」时可直接选用,免去每次重填
# 来源:用户提供的短剧角色卡规范(2026-10-04)
#
# 每套 = 人物基础描述 + 背景 + 光线 + 各视角神态(可选覆盖)
# 套装流程:① 主定妆(正面半身·文生图)→ ② 其余 4 视角以其为参考图(图生图)
# 通用负面词见 character_generator/portrait_set.py 的 PORTRAIT_NEGATIVE_ZH
# =====================================================================
presets:
- id: patient_girl
name: 破碎感病号女主
age: 24
desc: "24 岁年轻中国女生,黑茶色中长发,面色苍白,淡花掉的妆容,浅蓝条纹病号服,皮肤偏白,五官清秀"
bg: "浅灰纯色背景"
light: "柔和冷调棚柔光"
expressions:
front_half: "眉头微敛,强忍疼痛的神态"
side_45: "眉头微敛,隐忍神情"
profile: "安静垂眸"
face_closeup: "眼尾泛红,强忍痛苦眼神"
shoulder_look: "神情脆弱"
- id: gentle_heroine
name: 小白花温柔女主
age: 22
desc: "22 岁年轻中国女生,鹅蛋脸,黑长直中分长发,淡伪素颜裸妆,米白色宽松针织衫,气质温顺"
bg: "浅灰色纯色背景"
light: "棚拍柔光"
expressions:
front_half: "眼神温顺略带怯懦"
side_45: "眼神柔和"
profile: "安静温婉"
face_closeup: "眼神温顺"
shoulder_look: "眼神柔和"
- id: cold_ceo
name: 高冷女总裁
age: 27
desc: "27 岁年轻中国女性,利落高马尾,冷调淡妆,哑光红棕唇,黑色修身西装套装,眼神冷静锐利"
bg: "深灰纯色背景"
light: "单侧柔和轮廓光"
expressions:
front_half: "眼神冷静锐利"
side_45: "神情冷静"
profile: "气质干练"
face_closeup: "眼神锐利冷静"
shoulder_look: "气场强大"
- id: scheming_villainess
name: 白切黑心机女配
age: 25
desc: "25 岁年轻中国女性,低盘黑长发,精致伪素颜,豆沙唇色,米杏色收腰连衣裙,珍珠耳坠"
bg: "浅灰纯色背景"
light: "柔和影棚光"
expressions:
front_half: "浅淡微笑,眼底藏算计"
side_45: "浅笑"
profile: "神情平静"
face_closeup: "浅微笑,眼神暗藏心机"
shoulder_look: "淡淡笑容"
- id: sweet_heiress
name: 甜妹富家千金
age: 21
desc: "21 岁年轻中国女生,蓬松黑色大波浪卷发,元气淡妆,水光蜜桃唇,浅粉色小香风短外套,碎钻耳钉"
bg: "纯白色背景"
light: "明亮柔和棚光"
expressions:
front_half: "笑容清甜"
side_45: "浅浅微笑"
profile: "神情甜美"
face_closeup: "笑容甜美"
shoulder_look: "灵动微笑"
- id: cool_rebel
name: 酷飒拽姐
age: 23
desc: "23 岁年轻中国女生,黑色高马尾带碎刘海,轻欧美小烟熏妆,暗红色唇,黑色短款皮衣,银色圆环耳饰"
bg: "纯黑背景"
light: "硬侧轮廓光"
expressions:
front_half: "眼神桀骜"
side_45: "眼神冷飒"
profile: "神情冷淡"
face_closeup: "眼神桀骜"
shoulder_look: "冷感眼神"
@@ -0,0 +1,49 @@
# 场景预设(短剧常用场景的成套提示词)
# =====================================================================
# 用途:在「🏠 场景生成器」里一键载入,或直接生成 5 机位套装。
#
# 结构:
# presets.<id>.name 显示名
# presets.<id>.slots 各机位槽位的提示词(槽位名 = 场景资产的槽位)
# wide=主图(T2I) · 其余以主图作参考图生成(I2I)
# presets.<id>.negative 负面提示词(统一规避翻车)
#
# ⚠️ 注意:提示词里的「8K / 高清 / 电影级」等词会被系统自动剔除
# (研究结论:这些词让模型往"无瑕"理解 → 过度磨皮 → 塑料感)
# 所以预设里保留原样,生成时由 realism_boost 过滤。
# =====================================================================
presets:
hospital_ward_proctology:
name: 肛肠科单人病房(短剧标准病房)
note: 来源:用户 2026-10-04 提供的提示词合集(5 机位)
slots:
wide: |
完整单人肛肠病房全景,墙面浅淡蓝白色,医用白色病床,床头有呼叫铃、吸氧装置,
床边可折叠陪护椅,墙角医用垃圾桶,小型床头柜放一次性水杯,墙面贴健康宣教海报
(文字模糊不清晰),浅灰色防滑地板,窗户带百叶帘,柔和阳光从窗户照进来,
空房间,没有病人,没有伤口,电影广角镜头,平视角度,写实摄影,短剧场景参考图,
柔和冷白色医疗灯光,高清细节,8K,景深,氛围安静
front: |
肛肠病房病床中景机位,平视角度,白色医用病床,床头靠着枕头,床头柜在病床右侧,
上面放纸巾盒与保温杯,旁边折叠陪护椅,墙面浅蓝色,窗户半拉百叶帘,柔和自然光,
空病房,干净整洁,现代医院装修,浅灰色防滑地面,镜头聚焦病床区域,写实摄影,
短剧场景参考图,柔和医疗顶灯,8K 高清,浅景深,安静医疗氛围,无人物,无隐私画面
detail: |
肛肠病房床头近景,略微侧拍角度,病床床头面板,红色呼叫按钮,电源插座,
床头小置物台,床头柜一角,柔和侧光,浅蓝白色墙面,干净医疗环境,局部场景,
写实摄影,短剧分镜参考,细节清晰,浅景深,虚化背景,空病房,没有病人,
不展示任何私密医疗操作
back: |
站在肛肠病房门外向内拍摄,病房门半开,门框视野,向内看到单人病房全貌,
白色病床,床头柜,百叶窗,走廊柔和顶灯,室内自然光,浅蓝墙面,现代医院,
写实摄影,短剧开场镜头,广角,轻微暗角,氛围感,空房间,干净整洁,8K 高清,无人物
side: |
斜侧 45° 机位拍摄肛肠单人病房,病床在画面左侧,陪护椅放在病床侧边,床头柜居中,
百叶窗在画面后方,阳光透过百叶形成光影条纹,浅蓝白色墙面,防滑地板,安静病房,
写实摄影,短剧对话场景参考,柔和室内灯光,景深,空病房,干净简约
negative: |
畸形,丑陋,伤口,人体隐私部位,裸露,血腥,恐怖,夸张,卡通,手绘,动漫,
文字清晰可读,水印,模糊,低分辨率,多人,病人躺在床上,医疗器械特写,
不雅画面,医疗操作,伤口敷料特写
@@ -0,0 +1,74 @@
# 视频生成模型注册表 —— 「关键帧 → 视频」工作台「引擎」下拉的数据源
#
# supports 取值:
# i2v 图生视频(首帧 = 关键帧)
# kf2v 首尾帧生视频(首帧 + 尾帧)
# r2v 多图参考生视频
# t2v 文生视频
#
# key_field 对应 agent-local/tools/ave/config/local.yaml 的节
#
# ⚠️ 价格来自公开资料/实测记录,可能随平台调整;标注「待验证」的未实测。
version: 1
updated: "2026-10-04"
models:
# ─────────── 可灵(已通路,kling_video.py 现用)───────────
- id: kling-v3
name: 可灵 3.0(质量优先)
vendor: 可灵(Kling)
price: "¥0.6/秒(720P)· ¥0.8/秒(1080P)"
verified: true
note: 当前出片在用。人物质感与运动流畅度最好;支持尾帧衔接(image_tail)与运镜控制。
supports: [i2v, kf2v, t2v]
limits:
duration_options: [5, 10]
tail_frame: true
camera_control: true
key_field: kling
channel: kling # 走 kling_video.py
- id: kling-v2-5-turbo
name: 可灵 2.5 Turbo(省钱优选)
vendor: 可灵(Kling)
price: "¥0.3/秒(720P)· ¥0.5/秒(1080P)"
verified: false
note: 价格是 3.0 的一半,质量略降。适合大量测试镜头。
supports: [i2v, t2v]
limits:
duration_options: [5, 10]
tail_frame: false
camera_control: false
key_field: kling
channel: kling
# ─────────── 百炼(新通道,本期接入)───────────
- id: wan2.2-kf2v-flash
name: 万相 2.2 首尾帧 Flash(最省)
vendor: 百炼(千问AI平台)
price: "¥0.1/秒(480P)"
verified: false
note: 首尾帧专用,价格最低(可灵的 1/6)。必须同时给首帧+尾帧,模型在两帧之间插值 —— 跨镜衔接就靠它。
requires: tail_frame # 前端据此提示「必须选尾帧」
supports: [kf2v, i2v]
limits:
duration_options: [5]
tail_frame: true
camera_control: false
key_field: aliyun
channel: dashscope
- id: wan2.6-r2v-flash
name: 万相 2.6 参考生视频 Flash
vendor: 百炼(千问AI平台)
price: "¥0.3/秒(720P)"
verified: false
note: 多图参考生视频(角色图 + 场景图 + 首帧可同时给)。适合既要保角色又要保环境的镜头。
supports: [r2v, i2v]
limits:
duration_options: [5, 10]
tail_frame: false
max_reference_images: 5
key_field: aliyun
channel: dashscope
status: 待接线