Files

101 lines
4.0 KiB
SQL

ALTER TABLE `characters`
ADD COLUMN `story_character_id` BIGINT NULL,
ADD INDEX `characters_story_character_id_idx` (`story_character_id`);
CREATE TABLE `story_characters` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`project_id` BIGINT NOT NULL,
`novel_source_id` BIGINT NULL,
`story_bible_id` BIGINT NULL,
`global_character_id` BIGINT NULL,
`name` VARCHAR(100) NOT NULL,
`alias_names` JSON NULL,
`role_type` VARCHAR(50) NOT NULL DEFAULT 'supporting',
`identity_desc` TEXT NULL,
`background_desc` TEXT NULL,
`personality_desc` TEXT NULL,
`relationship_json` JSON NULL,
`character_arc` TEXT NULL,
`world_role_desc` TEXT NULL,
`negative_rules` TEXT NULL,
`source_type` VARCHAR(50) NOT NULL DEFAULT 'character_extraction',
`source_version_id` BIGINT NULL,
`status` VARCHAR(50) NOT NULL DEFAULT 'active',
`created_at` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
`updated_at` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3),
PRIMARY KEY (`id`),
INDEX `story_characters_project_id_status_idx` (`project_id`, `status`),
INDEX `story_characters_novel_source_id_idx` (`novel_source_id`),
INDEX `story_characters_story_bible_id_idx` (`story_bible_id`),
INDEX `story_characters_global_character_id_idx` (`global_character_id`),
INDEX `story_characters_source_type_idx` (`source_type`)
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
ALTER TABLE `video_clips`
ADD COLUMN `engine_version` VARCHAR(80) NULL,
ADD COLUMN `asset_lock_json` JSON NULL,
ADD COLUMN `motion_control_json` JSON NULL,
ADD COLUMN `camera_control_json` JSON NULL,
ADD COLUMN `composer_usage_json` JSON NULL,
ADD INDEX `video_clips_engine_version_idx` (`engine_version`);
CREATE TABLE `project_pipeline_configs` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`project_id` BIGINT NOT NULL,
`ip_isolation_enabled` BOOLEAN NOT NULL DEFAULT true,
`video_engine_enabled` BOOLEAN NOT NULL DEFAULT true,
`scene_composer_enabled` BOOLEAN NOT NULL DEFAULT false,
`default_generation_mode` VARCHAR(50) NOT NULL DEFAULT 'single_model',
`video_engine_version` VARCHAR(80) NOT NULL DEFAULT 'video_engine_v1',
`scene_composer_version` VARCHAR(80) NOT NULL DEFAULT 'scene_composer_v1_reserved',
`ip_rules_json` JSON NULL,
`video_engine_config_json` JSON NULL,
`scene_composer_config_json` JSON NULL,
`created_at` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
`updated_at` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3),
PRIMARY KEY (`id`),
UNIQUE INDEX `project_pipeline_configs_project_id_key` (`project_id`),
INDEX `project_pipeline_configs_scene_composer_enabled_idx` (`scene_composer_enabled`),
INDEX `project_pipeline_configs_default_generation_mode_idx` (`default_generation_mode`)
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
INSERT INTO `project_pipeline_configs` (
`project_id`,
`ip_isolation_enabled`,
`video_engine_enabled`,
`scene_composer_enabled`,
`default_generation_mode`,
`video_engine_version`,
`scene_composer_version`,
`ip_rules_json`,
`video_engine_config_json`,
`scene_composer_config_json`
)
SELECT
`id`,
true,
true,
false,
'single_model',
'video_engine_v1',
'scene_composer_v1_reserved',
JSON_OBJECT(
'character_ip_policy', 'clean_reusable_assets_only',
'story_character_policy', 'story_bible_and_relationships_only',
'project_character_policy', 'project_look_anchor_scene_state_only',
'forbidden_ip_fields', JSON_ARRAY('episode_plot', 'shot_state', 'project_costume', 'scene_action')
),
JSON_OBJECT(
'mode', 'single_model_first',
'candidate_count_default', 1,
'multi_model_compare_default_enabled', false,
'requires_human_clip_selection', true
),
JSON_OBJECT(
'enabled', false,
'reserved_stage', 'phase_5',
'notes', 'Scene Composer is recorded for future automatic ordering/emotion/transition logic. Current production keeps human clip selection and FFmpeg render.'
)
FROM `projects`
ON DUPLICATE KEY UPDATE `updated_at` = CURRENT_TIMESTAMP(3);