交接文件
只在用户要求保存工程时写:方向选定、完整 Look 建好之后,存成主题目录的 deliverables/requirements-handoff.yaml。拍摄与八宫格的 shot_board.py 从这里读视觉锁定,入口的 validate_project.py 按它校验。
格式
键名和枚举值保持英文,脚本按它们解析;自由文本的值(服装描述、关系描述、地点名)用中文写。每个人一条,人数多少条目就多少,不得省略。
schema_version: 3
project:
interaction_mode: user_directed # user_directed 自主 | card_draw 抽卡
story_card_name: null # 故事卡名
creative_history: []
spacetime_passport: [] # 时空护照:已选、已抽的时空、卡名、方向类型
direction_type_history: [] # 连续抽卡轮换类型用
remix_history: []
confirmation_authority: user # user | ai_recommendation
draw_card:
spacetime_type: null # real_contemporary | real_historical | future_landmark | source_work | original_fictional(仅用户明确要原创世界时)
spacetime_card: null
internal_direction_candidates: []
selected_direction: null
selection_reason: null
shoot_type: null
purpose: null
participant_count: 1 # 必须等于 participants 的条数
gender_composition: null
relationship_preset: null
relationship_description: null # 人物关系描述,情侣和多人必填
participant_structure_confirmed: false
styling_policy:
professional_nodes_required: true # 为 true 时脚本要求每个人都有 hairstyle_design 和 makeup_design
generated_at_direction_stage: true
downstream_inherit_only: true
share_card_policy:
required_before_render: true # 为 true 时出宫格前必须先编好分享文案
compile_before_image_tool: true
identity_reference_policy:
identity_lock_version: 2
per_panel_identity_reset_required: true
panel_to_panel_face_inheritance_forbidden: true
face_readability_gate: true
canonical_source: original_user_upload # 脚本要求必须是这个值
hair_semantics: face_only_ignore_original_hair_unless_user_locks_it
derived_images_never_auto_promote: true # 脚本要求必须为 true
explicit_user_promotion_required: true # 脚本要求必须为 true
derived_reference_roles: [composition, pose, style, scene]
participants:
- id: P01
label: null # 称呼:新娘、父亲、主唱……
gender: null
role: null
relationship_role: null
original_identity_references: [] # 不可变的默认身份源:用户最初上传的真人照片
identity_references: [] # 兼容字段,镜像 active_identity_references
identity_map:
- participant_id: P01
canonical_original_references: []
active_identity_references: []
identity_references: [] # 兼容字段,镜像 active_identity_references
active_reference_source: original_user_upload # original_user_upload | explicit_user_promoted_derived
explicit_promotion: false
promoted_from: null
selected_direction_styling:
direction_id: null
participant_styling:
- participant_id: P01
hairstyle_design: null
makeup_design: null
styling_status: pending # pending 待定 | locked 已锁 | invalidated_by_remix 被改变量判失效
look_count: 1
theme: null
worldview: null
location_context: []
relationship_mood: []
visual_direction: []
media_references: []
hard_avoids: []
location_policy: # schema 3 时脚本要求下面每一项都是 true
specific_location_required: true
progressive_specificity: true
discovery_anchor_only: true
look_uses_shootable_zones_not_micro_points: true
shot_micro_location_required: true
indoor_must_be_geographically_anchored: true
outdoor_must_name_specific_place: true
named_work_must_name_in_world_location: true
period_context_required_when_material: true
no_invented_real_addresses: true
generic_location_only_is_invalid: true
unspecified_modern_location_uses_random_world_famous_fallback: true
random_fallback_must_be_theme_compatible: true
random_fallback_reroll_changes_place: true
looks:
- id: LOOK-01
status: presented # 选定后改成 confirmed
concept: null
role_in_set: null
participant_looks: # 名单里每个人恰好一条
- participant_id: P01
label: null
role_in_look: null
full_description: null # 完整服装描述
outfit:
category: null
subcategory: null
context: null
visual_role_in_group: null
silhouette: null
upper_inner_layers: []
outer_layer: null
lower_or_full_body_garment: null
length_proportion: null
neckline_collar_lapel: null
sleeve: null
waistline_fit: null
primary_material: null
secondary_materials: []
color: null
finish_texture: null
structural_details: []
decorative_details: []
movement_characteristics: null
shoes: null
jewelry_watch: []
headwear_hair_accessory: []
other_accessories: []
grooming_makeup_hair: null
hairstyle_design: null # 从方向卡继承的正式发型
makeup_design: null # 从方向卡继承的正式妆容
prop_ownership: []
practicality_season_notes: []
scene_role_compatibility: null
hard_avoids: []
group_relationship:
visual_hierarchy: null
palette_relationship: null
material_relationship: null
silhouette_relationship: null
formality_relationship: null
contrast_harmony: null
shared_motifs: []
intentional_differences: []
subgroup_logic: []
visual_lock:
participant_outfits: # 下游不可改;名单里每个人恰好一条
- participant_id: P01
label: null
outfit: null # 完整、不可替换的服装描述
hairstyle_design: null
makeup_design: null
group_relationship: null
work_era_setting: null
scene_mood: null
hard_avoids: []
location_lock: [] # schema 3 必填:和 scenes 同结构的地点卡
quality_floor: full_detail_no_compression
scenes: # schema 3 至少一张结构化地点卡
- id: SCENE-01
name: null
location_mode: null # real_world | historical_real_world | future_landmark | source_work | original_fictional
indoor_outdoor: null # indoor | outdoor | mixed
country: null
city: null # 现实地点必填
district_or_area: null
street_or_route: null
named_place: null
exact_space_node: null # Shot 之前可以不填,不提前锁微点位
verification_status: null # user_supplied | verified_current | known_public_place_needs_current_verification | conceptual_private_interior
selection_origin: null # user_supplied | random_world_famous_fallback | source_work | historical_setting | future_landmark | original_fictional(仅用户明确要求)
source_work: null
in_world_location: null
era_or_period: null # 历史和未来地点必填
world_state_or_chapter: null
recognizable_environmental_evidence: []
truthfulness_note: null
palette: null
usable_areas: [] # 2–4 个可拍区域
activity_environment_compatibility: null
clothing_practicality: null
props: []
look_group_confirmation:
status: confirmed
confirmation_source: direction_selected # direction_selected 用户选向 | ai_auto_confirmed 抽卡自动 | user_override 用户改写
rule: 选 A/B/C 就是对所选方向的充分授权,不再要第二次 Group Look 确认;抽卡模式下 AI 选出的合法方向自动确认下游 Look。
handoff_to_photography_skill:
ready: false # 方向已定、每个人服装完整且发型妆容已锁时改成 true
confirmation_rule: 选定方向已固定、每个人都有完整服装和 hairstyle_design、makeup_design、所选方向的妆发已锁定时,ready 变为 true;不需要用户第二次确认。
next_task: 编排 8 张 Shot 的拍摄方案,保留所有人物身份、身份映射、锁定的服装、发型和妆容。
写完要满足的条件
validate_project.py 和 shot_board.py 会按这些拦:
participant_count等于participants的条数,编号唯一非空- 每套 Look 的
participant_looks和visual_lock.participant_outfits都恰好覆盖名单里的每个人一次,每条都有服装 styling_policy.professional_nodes_required为 true 时,每个人都要有非空的hairstyle_design和makeup_design- 服装描述里出现「其他人同风格」「同上」这类压缩说法会被拦
- 进入拍摄前
looks[].status是confirmed、look_group_confirmation.status是confirmed、handoff_to_photography_skill.ready是true,主题目录project.yaml的stage改成LOOKS_CONFIRMED,改完跑theme_manager.py switch同步主题登记;交接文件在这之前就存在会被判错 schema_version: 3时每套 Look 至少一张scenes地点卡和非空的location_lock,地点卡按地点的精度要求校验:现实地点要有城市加具体区域、街道或具名地点,室内要有具名场所或真实街道,verification_status只能是那四个值;作品地点要有作品、作品内地点和时代或世界状态identity_map里没显式升级就不能和原图不一致;升级了active_reference_source要写explicit_user_promoted_derived- 旧的双人字段
female_outfit/male_outfit/couple_relationship脚本还能读,新项目一律写上面的人物数组格式