附录 C:资产与连续性 Schema 字典

工具附录

附录 C:资产与连续性 Schema 字典#

本章目录
C.1 六条底层规则C.2 基础实体与身份契约C.3 人物镜头状态C.4 服装、妆发与伤势C.5 地点、机位区与轴线C.6 道具与所有权事件C.7 时间、天气与灯光C.8 动作契约与跨镜头接力C.9 多人物布局与特征归属C.10 声线与音乐状态C.11 屏幕文字与事实绑定C.12 资产注册表与权利C.13 状态事件与依赖图C.14 连续性 Lint 规则C.15 完整 Shot State PacketC.16 失败模式、版本迁移与 SOPC.17 交付检查表与练习

本附录把“人物要一致”“场景不要跳”“道具位置要对”改写为机器可读、团队可审、跨工具可传递的数据契约。Schema 不是为了把创作变成填表,而是为了让创作决定在生成、筛选、补拍和剪辑链路中不丢失。

C.1 六条底层规则#

  1. 稳定 ID 优先于名称。 char_lin_xia 不因角色改名而变化。
  2. 事实、意图、观察分层。 “愤怒”是意图,“右手握拳”是观察,“刚被罢免”是事实。
  3. 未知不等于否定。 unknownnot_visiblenot_applicable 必须与 false 分开。
  4. 状态有时间边界。 必须说明由哪个事件生效、何时失效。
  5. 历史不可覆盖。 修改产生新版本,并保留 supersedes、作者和原因。
  6. 镜头只消费最小状态。 不把整季资料塞给模型,只编译当前镜头需要的身份、动作、空间和风格约束。

公共元数据:

schema_meta:
  schema: continuity.character_state
  schema_version: 1.2.0
  record_id: state_char_lin_xia_e001_s014_pre_v3
  entity_id: char_lin_xia
  project_id: prj_backlight_acquisition
  valid_from: evt_e001_s013_exit
  valid_until: evt_e001_s015_costume_change
  status: approved
  supersedes: state_char_lin_xia_e001_s014_pre_v2
  created_by: continuity_agent
  approved_by: human_continuity_lead
  source_refs: [script://ep_001/scene_014, frame://ep_001/shot_013c/last]

C.2 基础实体与身份契约#

人物、地点、道具、服装、声音和图形资产继承同一基础实体:

entity:
  id: char_lin_xia
  type: character
  canonical_name: 林夏
  aliases: [林总, 夏夏]
  lifecycle: active
  canonical_version: 7
  owner_role: character_supervisor
  rights_profile_id: rights_cast_synthetic_001
  provenance_ids: [prov_char_design_004, prov_voice_011]

身份契约只记录跨集稳定的辨识锚点,不记录本场临时污渍或情绪:

identity_contract:
  character_id: char_lin_xia
  identity_version: 3
  narrative_age: 29
  silhouette: {height_band: 168_172cm, build: slender_athletic}
  face_anchors:
    face_shape: narrow_oval
    brow: straight_soft_arch
    eyes: almond_dark_brown
    nose: straight_narrow_bridge
    distinctive_marks: [tiny_mole_below_left_eye]
  hair_default: {color: natural_black, length: below_shoulder, parting: left_30_percent}
  immutable_features: [eye_color, mole_position, face_proportion]
  controlled_variants:
    hair: [down_straight, low_ponytail]
    eyewear: [none, thin_black_frame]
  forbidden_drift: [mole_switches_side, age_shift_over_3_years]
  reference_assets:
    hero_front: asset_char_lin_front_v03
    three_quarter: asset_char_lin_3q_v03
    profile: asset_char_lin_profile_v02
    expression_sheet: asset_char_lin_expr_v04

身份锚点以 5 至 9 个为宜。每个锚点必须能被画面检查,“气质强大”不是锚点。反例是用 美女总裁最终版2.png 充当角色身份;正确做法是文件属于资产版本,角色 ID 永远稳定。

C.3 人物镜头状态#

character_state:
  character_id: char_lin_xia
  at: ep_001/sc_014/shot_014a/in
  wardrobe_state_id: wr_lin_boardroom_v2_state_06
  hair_state: low_ponytail_intact
  makeup_state: office_clean_cool
  body_state:
    posture: upright_guarded
    left_hand: holding_contract_folder
    right_hand: free
    injury_ids: []
  emotional_intent: {dominant: controlled_anger, intensity_0_5: 3, concealment: high}
  knowledge_state:
    knows: [fact_bid_price_leaked]
    does_not_know: [fact_chairman_is_source]
  relationship_state: {toward_char_gu_zhou: distrust_rising}

knowledge_state 很关键。角色不能对尚未得知的事实提前反应。连续性不只检查衣服,也检查认知时间线。

C.4 服装、妆发与伤势#

服装写成基础层加覆盖层,不为每种污渍组合复制整套造型:

wardrobe_state:
  base_look_id: look_lin_boardroom_charcoal_v2
  layers:
    inner: ivory_silk_shirt
    outer: charcoal_single_breasted_suit
    lower: charcoal_straight_trousers
  accessories: {left_wrist: silver_watch, ears: small_pearl_studs}
  overlays:
    - {id: overlay_rain_damp_01, region: shoulders_and_hair_ends, intensity: light}
    - {id: overlay_coffee_stain_02, region: right_cuff_outer, mask: asset_stain_mask_02}
  continuity_locks: [watch_on_left_wrist, stain_never_mirrored]

physical_condition:
  injuries:
    - injury_id: inj_lin_palm_cut_01
      body_side: right
      region: palm
      visual_state: fresh_bandage_clean
      pain_behavior: avoids_forceful_grip
      introduced_by: evt_e002_glass_cut
      healed_after: ep_004/sc_006
  fatigue: {level_0_5: 4, visible_signs: [slower_blink, slight_under_eye_shadow]}

提示词不应只写“手受伤”,而要编译为:“右手掌有干净的新绷带;拿物时避免用力;绷带不可出现在左手”。这同时给出视觉锚点、行为影响和负向限制。

C.5 地点、机位区与轴线#

location_contract:
  location_id: loc_yuancheng_boardroom
  canonical_layout_asset: asset_boardroom_plan_v05
  fixed_landmarks:
    north: floor_to_ceiling_windows
    east: double_door
    west: display_wall
    center: twelve_seat_table
  material_palette: [dark_walnut, brushed_steel, clear_glass]
  camera_zones:
    zone_a_window_side: {allowed: true}
    zone_b_door_side: {allowed: true}
    zone_c_screen_side: {allowed: conditional, reason: reflection_risk}
  screen_direction:
    axis_id: axis_lin_gu_table
    char_lin_xia_screen_side: left
    char_gu_zhou_screen_side: right
    crossing_allowed_only_with: [visible_reaxis_move, neutral_insert]

地点一致性还包括门窗方位、人物进出方向、屏幕方向、可用机位和反射风险。先产出简化平面图,镜头包只引用当前机位区。

C.6 道具与所有权事件#

prop_state:
  prop_id: prop_red_contract_folder_01
  canonical_asset_id: asset_contract_folder_red_v03
  owner: company_yuancheng
  holder: char_lin_xia
  location: loc_yuancheng_boardroom/table_south_edge
  orientation: spine_toward_char_lin_xia
  open_state: closed
  contents: {document_id: doc_acquisition_offer_v08, page_visible: null}
  last_event: evt_e001_s013_lin_places_folder

所有权、持有者和空间位置是三件事。公司拥有文件夹,林夏拿着它,它也可能被放在桌边。转移必须写成事件:

continuity_event:
  id: evt_e001_s014_gu_takes_folder
  type: prop.transfer
  subject_id: prop_red_contract_folder_01
  from: {holder: char_lin_xia, location: lin_left_hand}
  to: {holder: char_gu_zhou, location: gu_right_hand}
  caused_by_shot: sh_e001_s014c
  effective_at: shot_end

C.7 时间、天气与灯光#

environment_state:
  story_time: 2026-10-18T18:12:00+08:00
  time_band: blue_hour
  elapsed_since_previous_scene_minutes: 7
  weather: heavy_rain
  exterior_wetness_0_100: 92
  key_light_motivation: window_cool_sky
  fill_motivation: ceiling_practical
  color_temperature: {exterior_k: 7200, interior_k: 4100}
  continuity_locks: [rain_visible_on_north_windows, no_direct_sunlight]

C.8 动作契约与跨镜头接力#

动作要拆出起点、峰值和终点:

action_contract:
  id: act_e001_s014_folder_handoff
  actor: char_lin_xia
  receiver: char_gu_zhou
  object: prop_red_contract_folder_01
  start_state:
    lin_left_hand: holds_folder_lower_edge
    gu_right_hand: resting_on_table
  peak_state:
    folder_center: crosses_axis_midpoint
    eye_contact: maintained
  end_state:
    lin_left_hand: released
    gu_right_hand: holds_folder_spine
  screen_direction: left_to_right
  cut_points:
    safe: [before_extension, at_dual_grip, after_receiver_secures]
    unsafe: [during_single_frame_release]

A 镜头的 end_state 必须等于 B 镜头的 start_state。不相等时阻止精生成,不要指望剪辑师事后遮掩。

C.9 多人物布局与特征归属#

cast_layout:
  shot_id: sh_e001_s014_wide
  slots:
    - {slot: foreground_left, character_id: char_lin_xia, identity_ref: identity_lin_v3}
    - {slot: midground_right, character_id: char_gu_zhou, identity_ref: identity_gu_v4}
  feature_ownership:
    mole_below_left_eye: char_lin_xia
    silver_collar_pin: char_gu_zhou
  forbidden_swaps: [face_identity, wardrobe_color, signature_accessory]

多人镜头最常见的错误是特征串位。显式声明特征归属,并给每个人固定画面槽位,能降低串脸、串衣和身高漂移。

C.10 声线与音乐状态#

voice_contract:
  character_id: char_lin_xia
  voice_asset_id: voice_lin_mandarin_v05
  register: mid_low
  pace_syllables_per_second: 4.2
  texture: clean_firm_slight_breath
  emotional_limits: {no_shouting_until: ep_006, crying_voice_allowed: false}
  pronunciation_lexicon_id: lexicon_project_v08
  loudness_target_lufs: -18

music_state:
  cue_id: cue_e001_pressure_bed
  composition_id: music_pressure_theme_v03
  stem_state: {pulse: -8db, low_strings: -12db, percussion: muted, melody: absent}
  key: D_minor
  tempo_bpm: 92
  bar_position_at_shot_in: 17.1
  transition_out: hold_tension_no_cadence

音乐连续性保存的不只是曲名,还包括版本、分轨、调性、速度和小节位置。扩镜时应从同一音乐状态继续,不是重生成一首“差不多紧张”的音乐。

C.11 屏幕文字与事实绑定#

graphic_asset:
  id: gfx_offer_price_mobile_01
  type: diegetic_phone_screen
  text_source: fact_offer_price_v3
  rendered_text: "收购报价:4.80亿元"
  locale: zh-CN
  verification:
    exact_match_required: true
    ocr_threshold: 0.98
    compare_against: fact_registry://offer_price/current

合同金额、日期和聊天记录必须绑定事实注册表。生成器可决定字体质感,不能自行改写数字。

C.12 资产注册表与权利#

asset_record:
  asset_id: asset_char_lin_front_v03
  entity_id: char_lin_xia
  asset_type: identity_reference
  version: 3
  uri: asset://characters/lin_xia/front/v03.png
  checksum_sha256: "..."
  generator: {provider: openai, model: gpt-image, run_id: run_img_0192}
  input_provenance: [prov_prompt_102, prov_sketch_owned_07]
  rights_status: cleared_commercial
  review_status: approved
  supersedes: asset_char_lin_front_v02

生命周期建议:draft → candidate → approved → locked → retired。来源、肖像权或参数缺失的资产进入 quarantined,不得被 Episode Pack 编译器选中。

C.13 状态事件与依赖图#

event:
  event_id: evt_01JCONT7YQ9
  event_type: continuity.state_changed
  event_version: 1
  aggregate_id: prop_red_contract_folder_01
  aggregate_version_before: 11
  aggregate_version_after: 12
  idempotency_key: sh_e001_s014c:folder_transfer:v1
  causation_id: task_render_sh_e001_s014c_v4
  correlation_id: trace_ep001_build_008
  payload: {holder: {from: char_lin_xia, to: char_gu_zhou}}

依赖图至少支持:depends_onderived_fromconstrainsappears_insupersedesapproved_by。角色主参考升级时,依赖图应能回答哪些待发布镜头必须重做,哪些锁定镜头只需登记例外。

C.14 连续性 Lint 规则#

规则 ID 检查 严重度 自动动作
CONT-001 前镜终态与后镜初态不一致 blocker 阻止精生成
CONT-002 左右伤势镜像 blocker 隔离候选
CONT-003 角色使用尚未知晓事实 blocker 返回剧本修订
CONT-004 道具同时被两人持有 blocker 状态冲突
CONT-005 未交代穿越轴线 major 插入中性镜头或重做
CONT-006 妆发完整度无原因回升 major 检查时间跳跃
CONT-007 环境时间与窗外光线冲突 major 重做灯光条件
CONT-008 屏幕文字与事实表不一致 blocker 禁止发布
CONT-009 音乐小节入点断裂 minor 重算编辑点
CONT-010 引用已隔离资产 blocker 替换依赖

Lint 发现确定性冲突,不判断表演是否动人。可计算规则与审美评审必须分开。

C.15 完整 Shot State Packet#

shot_state_packet:
  shot_id: sh_e001_s014c
  duration_target_s: 2.8
  frame: {aspect_ratio: "9:16", size: medium_two_shot}
  camera: {location_zone: zone_a_window_side, lens_equivalent_mm: 50, movement: slow_push_5_percent}
  cast_layout_ref: layout_e001_s014c_v2
  character_states: [state_char_lin_xia_e001_s014_pre_v3, state_char_gu_zhou_e001_s014_pre_v2]
  location_state: loc_yuancheng_boardroom_bluehour_v4
  prop_states: [prop_folder_state_11]
  action_contract: act_e001_s014_folder_handoff
  dialogue_line_ids: [line_e001_014_07]
  voice_contracts: [voice_lin_v05, voice_gu_v03]
  music_state_in: cue_pressure_v03_bar17_beat1
  music_state_out: cue_pressure_v03_bar18_beat2
  required_visible: [lin_left_eye_mole, red_folder_dual_grip_at_peak, rain_on_north_window]
  forbidden: [mirrored_composition, smiling, readable_random_documents]
  acceptance:
    identity_score_min: 0.91
    action_state_match: exact
    dialogue_sync_max_offset_ms: 80
    continuity_lint: pass

编译器把状态包翻译成各供应商的提示词和控制参数。供应商格式可以变,语义源头不能变。

C.16 失败模式、版本迁移与 SOP#

常见失败包括:所有信息塞进 notes;直接覆盖状态而没有事件;只写“紧张”而没有可观察行为;把某次提示词当唯一事实源;强迫所有字段必填导致团队编造未知信息。

Schema 版本遵循:Patch 只修文档,Minor 新增兼容字段,Major 改变语义并提供迁移器。迁移至少测试旧 Pack 可读、旧事件可重放、已发布镜头可追溯。生产切换采用双写、读新、停旧三步。

落地顺序:建立稳定 ID;制作主角身份契约和基准图;选择高风险场逐镜写初终态;将伤势污渍改为覆盖层;建立 Action Contract;启用事件日志;先实现十条 Lint;最后用补镜和回滚验证血缘链。

C.17 交付检查表与练习#

  • 核心实体有稳定 ID,名称只是显示字段。
  • 身份契约区分稳定锚点与临时状态。
  • 伤势、污渍、道具转移都有生效事件。
  • 跨镜头动作的终态等于下一镜初态。
  • 角色知识状态与剧情事实时间线一致。
  • 音乐保存版本、分轨、速度与小节位置。
  • 屏幕文字绑定事实注册表并经 OCR 校验。
  • 资产有来源、权利、校验和与审批状态。
  • Schema 变更有迁移策略,发布包可完整追溯。

练习:选择一场包含两人、一个关键道具和一次情绪反转的 30 秒戏,写身份、地点、道具和五个镜头状态;故意制造伤势镜像、越轴和道具瞬移;运行 Lint;修改中间镜头并输出影响分析。

应交付:entity_registry.yamlidentity_contracts.yamlshot_states.yamlcontinuity_events.jsonllint_report.json 和一页人工连续性报告。