feat: expand novel IP and production workflows
This commit is contained in:
@@ -0,0 +1,100 @@
|
||||
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);
|
||||
Reference in New Issue
Block a user