Files
ai/CURRENT_ARCHITECTURE.md

31 KiB
Raw Permalink Blame History

CURRENT_ARCHITECTURE

扫描时间:2026-06-17
范围:backenduser-appadminworkersbackend/prismadeploytools
说明:本文只记录当前项目结构、实现状态和关键路径,不包含任何 Provider 密钥。

1. 系统整体架构图

flowchart TB
  User[用户前台\nllzai.top\nVue 3 + Vite] --> Nginx[Nginx / 宝塔站点]
  Admin[管理后台\nai.admin.llzai.top\nVue 3 + Vite] --> Nginx
  Nginx --> API[后端 API\nai.api.llzai.top\nNestJS /api]

  API --> Auth[Auth / User / RBAC]
  API --> Project[Projects / Workflow]
  API --> Novel[Novel Library / Reader]
  API --> Story[StoryBible / Episode / Script / Storyboard]
  API --> Character[Character Library / Actor Profile]
  API --> Live[Live Action Pipeline]
  API --> Provider[AI Provider Layer]
  API --> Media[Media / FFmpeg Render]
  API --> AdminApi[Admin / Ops / Provider Config]
  API --> Billing[Billing / Quota / Provider Cost]

  API --> Prisma[Prisma ORM]
  Prisma --> MySQL[(MySQL)]

  API --> Redis[(Redis)]
  Redis --> BullMQ[BullMQ Queues]
  Worker[workers\nBullMQ Worker] --> BullMQ
  Worker --> InternalAPI[/api/internal/worker/tasks/:id/execute]
  InternalAPI --> API

  API --> Storage[StorageService\nLocal / MinIO / Public Temp URL]
  Storage --> Files[(storage / object files)]

  Provider --> OpenAI[OpenAI]
  Provider --> Volc[火山 / 豆包]
  Provider --> Kling[可灵 Kling]
  Provider --> MiniMax[MiniMax / 海螺]
  Provider --> Domestic[DeepSeek / 通义 / Kimi / 智谱等]
  Provider --> Mock[Mock Providers]

  Live --> FFmpeg[FFmpeg / FFprobe]
  Media --> FFmpeg
  FFmpeg --> FinalVideo[成品视频 / 素材库]

真人短剧主流程:

flowchart LR
  Prompt[外部提示词 / 小说章节 / 项目设定] --> Parse[提示词拆镜 / 分镜草稿]
  Parse --> Project[创建 Project / Episode / StoryBible]
  Project --> Prepare[真人分镜准备\nTextProvider 可选]
  Prepare --> Keyframe[关键帧生成\nImageProvider 可选]
  Keyframe --> Video[视频片段生成\nVideoProvider 可选]
  Video --> Select[每个分镜选择候选片段]
  Select --> Render[FFmpeg 合成]
  Render --> Works[作品列表 / 素材列表]

小说主流程:

flowchart LR
  Import[后台导入小说\n粘贴 / 批量 / 文件] --> Split[章节自动切割]
  Split --> NovelSource[NovelSource]
  Split --> Chapter[NovelChapter]
  NovelSource --> Reader[前台小说详情 / 目录 / 阅读器]
  Reader --> Progress[阅读进度]
  Reader --> Bookmark[书签]
  Reader --> Annotation[批注]
  NovelSource --> ShortDrama[选择小说生成短剧]

2. 核心模块

后端 Backend

入口:

  • backend/src/main.ts:全局 /api 前缀、CORS、请求体大小、全局拦截器、异常过滤器。
  • backend/src/app.module.ts:注册全部业务模块。

核心模块:

  • AuthModule:登录、JWT、权限守卫。
  • UsersModule:用户资料和账号信息。
  • BillingModule:订单、额度、Provider 消耗记录。
  • ProjectsModule:项目创建、提示词直出分镜、作品库、小说库前台接口。
  • AssetsModule:文件上传、素材存储、临时公网访问。
  • NovelsModule:小说导入、解析、章节管理、原创小说工具。
  • StoryBiblesModule:故事圣经、世界观设定。
  • CharactersModule:项目角色库、我的真人脸包、角色定妆版本、状态变体。
  • MemoriesModule:剧情记忆、连续性。
  • EpisodesModule:分集。
  • ScriptsModule:脚本、分镜。
  • ImagesModule:角色图、关键帧、锚点图生成。
  • LiveActionModule:真人短剧全流程。
  • MediaModule:传统音频、字幕、视频合成。
  • ProvidersModuleAI Provider 注册、调用、配置、日志、成本。
  • QueuesModuleRenderTask、BullMQ 队列、内部 Worker 执行入口。
  • ReviewsModule:内容审核、返修、案例展示。
  • AdminModule:后台用户、项目、素材、小说、Provider、Router、运营数据。

前端 User App

  • 技术栈:Vue 3 + Vite。
  • 主要页面:user-app/src/pages/index/index.vue
  • 主要能力:作品列表、视频/小说/素材 Tab、提示词直出分镜、真人短剧流程、模型选择、素材预览、小说阅读器、我的真人脸包。

后台 Admin

  • 技术栈:Vue 3 + Vite。
  • 主要页面:admin/src/App.vue
  • 主要能力:Provider 配置、模型开关、成本规则、小说管理、章节管理、素材管理、用户项目管理、运营看板。

Worker

  • workers/src/main.tsBullMQ Worker 进程。
  • Worker 不直接写复杂业务,主要从队列拿 RenderTask,再调用后端内部接口执行。

3. 数据表关系

当前 Prisma Schema 以 *_id 字段做逻辑关联,很多模型没有声明 Prisma @relation。下面是业务关系视图,不代表数据库里已经全部建外键约束。

erDiagram
  User ||--o{ Project : owns
  User ||--o{ NovelReadingProgress : reads
  User ||--o{ NovelBookmark : bookmarks
  User ||--o{ NovelAnnotation : annotates
  User ||--o{ GlobalCharacter : owns

  Project ||--o{ StoryBible : has
  Project ||--o{ WorldBible : has
  Project ||--o{ Character : has
  Project ||--o{ Episode : has
  Project ||--o{ Asset : has
  Project ||--o{ CopyrightRecord : has
  Project ||--o{ RenderTask : has
  Project ||--o{ ActorProfile : has

  NovelSource ||--o{ NovelChapter : has
  NovelSource ||--o{ NovelReadingProgress : has
  NovelSource ||--o{ NovelBookmark : has
  NovelSource ||--o{ NovelAnnotation : has

  Episode ||--o{ EpisodeScript : has
  Episode ||--o{ StoryboardShot : has
  Episode ||--o{ VideoClip : has

  StoryboardShot ||--o{ ShotImage : has
  StoryboardShot ||--o{ VideoClip : candidates

  Character ||--o{ CharacterImage : has
  Character ||--o{ CharacterMemory : has
  Character ||--o{ CharacterDesignVersion : has
  Character ||--o{ CharacterState : has

  GlobalCharacter ||--o{ GlobalCharacterAsset : has
  GlobalCharacter ||--o{ Character : binds

  ProviderConfig ||--o{ ProviderLog : logs
  ProviderConfig ||--o{ RenderTask : used_by
  Asset ||--o{ VideoClip : stores

核心表分组:

分组
用户 / 项目 User, Project, CopyrightRecord
小说 / 阅读 NovelSource, NovelChapter, NovelReadingProgress, NovelBookmark, NovelAnnotation
故事世界 StoryBible, WorldBible
角色 Character, GlobalCharacter, GlobalCharacterAsset, CharacterImage, CharacterMemory, CharacterDesignVersion, CharacterState, ActorProfile
分集 / 分镜 Episode, EpisodeScript, StoryboardShot, ShotImage
视频 / 素材 VideoClip, Asset, RenderTask
Provider / 成本 ProviderConfig, ProviderLog, Order, QuotaAccount, QuotaLog
审核 / 运营 RevisionRequest, ContentReview, CaseShowcase, OperationLog, SystemConfig
爆款分析 HitAnalysisCase, HitAnalysisSegment, CreativePattern, ProjectCreativePattern, AnalyticsEvent

重要唯一约束和索引:

  • NovelChapternovel_source_id + chapter_no 唯一,支持章节分页和卷号索引。
  • NovelReadingProgressuser_id + novel_source_id 唯一。
  • CharacterDesignVersioncharacter_id + version_no 唯一。
  • CharacterStatecharacter_id + state_code 唯一。
  • Episodeproject_id + episode_no 唯一。
  • StoryboardShotepisode_id + shot_no 唯一。
  • ActorProfileproject_id + character_id 唯一。
  • ProviderConfigprovider_type + provider_code 唯一。
  • RenderTaskidempotency_key 唯一。
  • ProjectCreativePatternproject_id + creative_pattern_id 唯一。

4. AI Provider 列表

Provider 配置来自 ProviderConfig 表和初始化配置。状态按当前扫描结果记录。

Provider 类型统计

类型 总数 启用
TextProvider 35 26
NovelProvider 15 9
ImageProvider 11 5
VideoProvider 21 10
VoiceProvider 5 2
LipSyncProvider 8 0
EmbeddingProvider 2 2
ModerationProvider 2 2
FileParseProvider 1 1
QualityCheckProvider 1 1

TextProvider

已启用:

Provider 显示名 模型
volcengine-doubao-seed20-pro-text 豆包文本 2.0 Pro doubao-seed-2-0-pro-260215
volcengine-doubao-seed20-lite-text 豆包文本 2.0 Lite doubao-seed-2-0-lite-260215
volcengine-doubao-seed20-mini-text 豆包文本 2.0 Mini 当前配置
volcengine-doubao-text 豆包文本 doubao-seed-1-6-250615
deepseek-text DeepSeek deepseek-chat
qwen-text 通义千问 qwen-plus
kimi-text Kimi kimi-latest
zhipu-glm-text 智谱 GLM glm-4.5
baidu-qianfan-text 百度千帆 当前配置
tencent-hunyuan-text 腾讯混元 当前配置
iflytek-spark-text 讯飞星火 当前配置
minimax-text MiniMax 文本 当前配置
baichuan-text 百川 当前配置
stepfun-text 阶跃星辰 当前配置
sensenova-text 商汤日日新 当前配置
ai360-text 360 智脑 当前配置
mistral-text Mistral 当前配置
xai-grok-text xAI Grok 当前配置
openrouter-text OpenRouter 当前配置
together-llama-text Together Llama 当前配置
fireworks-llama-text Fireworks Llama 当前配置
perplexity-sonar-text Perplexity Sonar 当前配置
azure-openai-text Azure OpenAI 当前配置
aws-bedrock-openai-compatible-text AWS Bedrock OpenAI Compatible 当前配置
openai-responses-text OpenAI Responses gpt-5.5
mock-text Mock Text Mock

未启用:

  • openai-gpt54-text
  • openai-gpt54-mini-text
  • openai-gpt54-nano-text
  • openai-gpt5-text
  • openai-gpt41-text
  • openai-gpt41-mini-text
  • google-gemini-text
  • anthropic-claude-text
  • cohere-command-text

NovelProvider

已启用:

Provider 显示名 模型
volcengine-doubao-seed20-pro-novel 豆包小说 2.0 Pro doubao-seed-2-0-pro-260215
volcengine-doubao-seed20-lite-novel 豆包小说 2.0 Lite doubao-seed-2-0-lite-260215
volcengine-doubao-novel 豆包小说 doubao-seed-1-6-250615
deepseek-novel DeepSeek 小说 deepseek-chat
qwen-novel 通义小说 qwen-plus
kimi-novel Kimi 小说 kimi-latest
zhipu-glm-novel 智谱小说 glm-4.5
openai-responses-novel OpenAI Responses 小说 gpt-5.5
mock-novel Mock Novel Mock

未启用:

  • openai-gpt54-novel
  • openai-gpt54-mini-novel
  • openai-gpt5-novel
  • openai-gpt41-novel
  • google-gemini-novel
  • anthropic-claude-novel

ImageProvider

已启用:

Provider 显示名 模型
volcengine-seedream-50-image 豆包 Seedream 5.0 图片 doubao-seedream-5-0-260128
volcengine-seedream-50-lite-image 豆包 Seedream 5.0 Lite 图片 doubao-seedream-5-0-lite-260128
volcengine-seedream-45-image 豆包 Seedream 4.5 图片 doubao-seedream-4-5-251128
openai-image OpenAI Image gpt-image-2
mock-image Mock Image Mock

未启用:

  • google-gemini-image
  • stability-image
  • replicate-flux-image
  • fal-flux-image
  • ideogram-image
  • leonardo-image

VideoProvider

已启用:

Provider 显示名 模型
volcengine_seedance_20_fast 豆包 Seedance 2.0 Fast 视频 doubao-seedance-2-0-fast-260128
volcengine_seedance_20 豆包 Seedance 2.0 视频 doubao-seedance-2-0-260128
jimeng_seedance 豆包 Seedance 1.5 Pro 视频 doubao-seedance-1-5-pro-251215
kling-image-to-video 可灵图生视频 kling-v3
kling-21-image-to-video 可灵 2.1 图生视频 kling-v2-1
kling-21-master-image-to-video 可灵 2.1 Master 图生视频 kling-v2-1-master
minimax_hailuo_23_fast 海螺 2.3 Fast MiniMax-Hailuo-2.3-Fast
minimax_hailuo_23 海螺 2.3 MiniMax-Hailuo-2.3
openai-video OpenAI Sora sora-2
mock-video Mock Video Mock

未启用:

  • alibaba_wan26_i2v_flash
  • alibaba_wan26_i2v
  • vidu_q3_turbo_reference
  • vidu_q3_pro
  • openai-sora-2-pro-video
  • runway-image-to-video
  • google-veo-video
  • replicate-video
  • fal-video
  • luma-ray-video
  • pika-video

VoiceProvider

已启用:

  • openai-ttsgpt-4o-mini-tts
  • mock-voice

未启用:

  • elevenlabs-tts
  • minimax-tts
  • volcengine-tts

LipSyncProvider

当前全部未启用:

  • mock-lipsync
  • minimax-lipsync
  • alibaba-videoretalk-lipsync
  • heygen-lipsync
  • sync-labs-lipsync
  • fal-veed-lipsync
  • volcengine-doubao-lipsync
  • generic-lipsync

其他 Provider

已启用:

  • openai-embedding
  • mock-embedding
  • mock-file-parse
  • openai-moderation
  • mock-moderation
  • mock-quality-check

5. Router 逻辑

Router 主要服务真人视频生成,核心文件:

  • backend/src/ai-router/ai-router.service.ts
  • backend/src/ai-router/ai-router.types.ts

默认配置:

  • Router 版本:ai.router.v1
  • 默认语言:zh-CN
  • 每日预算:500
  • 普通路线默认 Providerminimax_hailuo_23_fast
  • 高价值路线默认 Providerkling-image-to-video
  • 普通 fallbackminimax_hailuo_23_fastvolcengine_seedance_20_fastvolcengine_seedance_20jimeng_seedancemock-video
  • 高价值 fallbackkling-image-to-videovolcengine_seedance_20minimax_hailuo_23_fastvolcengine_seedance_20_fastjimeng_seedancemock-video

决策步骤:

  1. 如果前端手动选择了视频模型,并且 Router 允许手动覆盖,优先使用手动 Provider。
  2. 如果手动选择了模型,但系统不允许覆盖,直接返回错误,避免假装生效。
  3. 没有手动选择时,读取系统 Router 配置。
  4. 根据分镜文本推断 scene_type,例如对话、冲突、揭露、武打、玄幻变身等。
  5. 对分镜打分:重要性、情绪强度、动作强度。
  6. 如果重要性或动作强度较高,进入 premium 路线;否则进入 normal 路线。
  7. 根据候选 Provider 顺序逐个检查:
    • Provider 是否存在。
    • Provider 是否启用。
    • 单条成本是否超过上限。
    • 当日预算是否超过限制。
    • 时长、分辨率、比例等能力是否可用。
  8. 选中第一个可用 Provider。
  9. 记录 Router 决策、跳过原因、成本估算、Provider 调用日志。

当前实现特点:

  • 支持前端手动指定 Provider。
  • 支持按分镜打分自动调度。
  • 支持 Provider fallback。
  • 支持成本估算和日限额拦截。
  • 支持 Provider 不可用时给出明确跳过原因。
  • 支持长时长拆段,避免单个 Provider 不支持当前时长。

6. Prompt Builder 实现情况

核心文件:

  • backend/src/live-action/prompt-builder.service.ts
  • backend/src/live-action/prompt-builder.service.spec.ts

当前版本:

  • live-action-prompt-engine-v2

Provider Profile

  • generic
  • hailuo
  • kling
  • mock

场景模板:

  • dialog
  • conflict
  • reveal
  • engagement_breakup
  • humiliation
  • rich_arrival
  • identity_reveal
  • bank_balance_reveal
  • boardroom_face_slap
  • ceo_entrance
  • dimensional_break
  • xianxia_transformation
  • action

Prompt Builder 输出内容:

  • prompt 版本。
  • Provider profile。
  • scene type。
  • template ids。
  • applied rules。
  • route tier。
  • aspect ratio。
  • visual style。
  • characters。
  • actor consistency rules。
  • location。
  • main action。
  • camera shot / camera move / camera tag。
  • performance。
  • lighting。
  • VFX / sound cues。
  • duration。
  • continuity rules。
  • motion director。
  • director plan。
  • lip sync policy。
  • negative prompt。

不同 Provider 的处理:

  • 海螺:偏中文真人短剧风格,控制提示词长度,强调镜头、人物、动作和短剧质感。
  • 可灵:偏图生视频、参考图、动作连续性和真实镜头。
  • 通用:偏 photorealistic vertical short drama。
  • Mock:输出结构化 key-value,便于测试。

当前使用位置:

  • 真人分镜准备后,视频片段生成前,会根据 Router 决策和 Provider Profile 重新构建最终提交给视频模型的 Prompt。
  • LiveActionService 会把分镜、角色锁定信息、导演计划、唇形策略、Provider 能力一起传给 Prompt Builder。

待加强点:

  • Prompt Builder 目前主要服务真人视频生成。
  • 小说、故事圣经、角色抽取、分集、脚本、普通分镜等文本步骤虽然已有 Provider 接入点,但还需要统一成更严格的 schema、重试、验证和 Prompt 版本管理。
  • 可继续增加“Prompt 调试面板”,把最终提交给 Provider 的完整参数、参考图、负面词、成本估算展示给前端测试人员。

7. Character Library 实现情况

核心文件:

  • backend/src/characters/characters.service.ts
  • backend/src/characters/characters.controller.ts
  • backend/src/characters/character.dto.ts
  • backend/src/characters/character.types.ts
  • backend/src/images/images.service.ts
  • backend/src/live-action/live-action.service.ts

当前角色体系分两层:

我的真人脸包

对应表:

  • GlobalCharacter
  • GlobalCharacterAsset

当前逻辑:

  • 用户可以在“我的”里维护长期可复用的真人脸包。
  • 真人脸包只保存脸部身份参考。
  • 上传时需要本人/授权确认。
  • 支持 1-10 张脸部参考图。
  • 不默认把真人照当作项目角色锚点。
  • 后续项目套用脸包时,需要在项目里生成或选择“仿真定妆锚点图”。

这样做的原因:

  • 真人照片只用于锁脸,不应直接作为视频主角图。
  • 不同项目有不同服装、发型、时代、风格,需要在项目内重新定妆。
  • 视频模型对真人照片有限制时,可以把真人脸包作为身份参考,而不是首帧图。

项目角色库

对应表:

  • Character
  • CharacterImage
  • CharacterDesignVersion
  • CharacterState
  • ActorProfile

当前逻辑:

  • 项目可以从故事圣经、章节、提示词中抽取角色。
  • 角色可以绑定我的真人脸包。
  • 角色可以生成多张定妆图。
  • 可设置角色锚点图。
  • 可保存设计版本。
  • 可保存状态变体,例如不同服装、受伤状态、战斗状态。
  • ActorProfile 用于真人短剧阶段锁定角色参考图、锚点、脸包引用。

真人视频使用角色时:

  1. 优先使用项目内已确认的定妆锚点图。
  2. 真人脸包作为脸部参考。
  3. 如果 Provider 支持角色参考图,则把参考图传入 Provider。
  4. 如果 Provider 不支持角色参考图,则只在 Prompt 和前置关键帧生成里体现角色一致性。
  5. 对不允许真人图直接生成视频的 Provider,会排除真人脸包作为首帧,避免触发真实人物限制。

8. FFmpeg 流程

相关文件:

  • backend/src/live-action/live-action.service.ts
  • backend/src/media/media.service.ts
  • backend/src/live-action/live-action.types.ts

真人短剧 FFmpeg 合成流程:

flowchart TB
  Selected[每个分镜已选择 VideoClip] --> Download[下载/读取素材文件]
  Download --> Probe[ffprobe 探测\n时长 / 音轨 / 编码]
  Probe --> Normalize[标准化片段\n裁剪 / 补齐 / 缩放 / pad / fps]
  Normalize --> Concat[concat demuxer 拼接]
  Concat --> VideoTrack[video-track.mp4]

  VideoTrack --> Post[后期处理]
  Dialogue[可选后期对白 / TTS] --> Post
  BGM[可选 BGM] --> Post
  SFX[可选音效] --> Post
  Subtitle[可选 ASS 字幕] --> Post

  Post --> Encode[编码输出\nlibx264 / libopenh264 / mpeg4 fallback]
  Encode --> Final[最终 MP4]

标准化动作:

  • 读取源视频。
  • 按分镜时长裁剪或补齐。
  • 统一为竖屏 720x1280
  • force_original_aspect_ratio=decrease 后 pad。
  • setsar=1
  • fps=30
  • format=yuv420p
  • 根据配置决定是否保留源音频。

拼接动作:

  • 每段生成临时标准化 clip。
  • 写入 clips.txt
  • 使用 FFmpeg concat demuxer 拼接。
  • 输出 video-track.mp4

后期动作:

  • 可选后期对白。
  • 可选 BGM。
  • 可选 SFX。
  • 可选字幕。
  • 可选画面 polish filter。
  • 音频使用 amixloudnormlimiter 等策略混合。

编码器 fallback

  1. 优先 libx264
  2. 如果环境没有 libx264,使用 libopenh264
  3. 如果仍不可用,退到 mpeg4

这解决了服务器 FFmpeg 缺少 libx264 时合成失败的问题。

当前后期策略:

  • 合成时可命名成品,默认项目名。
  • 分镜可以保留源视频声音。
  • 后期对白、字幕、BGM、音效应由前端可选。
  • 字幕不适合默认塞入长描述,当前应更偏短标题或分镜短句。

9. 当前已完成功能

基础工程

  • NestJS 后端、Vue 前台、Vue 后台、BullMQ Worker 的 monorepo 结构。
  • Prisma + MySQL 数据层。
  • Redis 队列基础。
  • StorageService 支持本地/对象存储/临时公网 URL。
  • 全局 API 响应封装、异常处理、请求 ID。

用户与后台

  • 用户登录、JWT、基础权限。
  • 后台 Provider 管理。
  • 后台用户、项目、素材、小说、运营配置管理。
  • Provider 日志和成本记录。

小说系统

  • 后台小说源管理。
  • 小说简介、引文、章节管理。
  • 章节增删改查。
  • 批量粘贴导入。
  • 支持按章节分隔符切割,例如 ===== 第6章:直播里的耳光 =====
  • 支持卷号逻辑,当前可按 30 章一卷。
  • 前台小说列表、小说详情、目录、章节详情。
  • 阅读进度保存。
  • 书签。
  • 批注。
  • 搜索。
  • 真书翻页模式和传统按钮模式的基础入口。

提示词直出分镜

  • 可从外部提示词创建分镜项目。
  • 支持解析 3 个镜头、不同镜头标题、不同镜头时长。
  • 支持预览镜头数量和总时长。
  • 创建后可进入真人分镜、关键帧、视频片段、合成流程。
  • 可绑定我的真人脸包,但不会直接把真人照作为角色主图。

AI Provider

  • 文本、小说、图片、视频、语音、审核、向量、文件解析等 Provider 类型已建模。
  • 支持启用/停用。
  • 支持后台配置。
  • 支持模型下拉按步骤类型过滤。
  • 支持前端手动选模型。
  • 支持默认智能计划。
  • 支持 Provider 日志。
  • 支持成本估算和日限额拦截。

真人短剧

  • 角色抽取。
  • 真人分镜准备。
  • 文本模型可参与真人分镜改写。
  • 角色锚点图生成。
  • 关键帧生成。
  • 单镜头测试生成。
  • 批量视频片段生成。
  • 多 Provider 生成候选片段。
  • 每个分镜选择候选片段。
  • 视频 Provider 预检。
  • Provider 长任务轮询和恢复。
  • 对超时但外部仍 running 的任务支持继续查询。
  • 失败片段记录。
  • 质量检查和人工审核入口。
  • FFmpeg 合成真人短剧。

素材与作品

  • 素材表记录图片、视频、音频、字幕、最终视频等。
  • 视频片段记录 Provider、模型、成本、状态。
  • 前台作品列表已区分视频/小说/素材方向。
  • 图片和视频预览能力已具备基础形态。

10. 待优化功能

Provider 能力矩阵

当前不同 Provider 的时长、分辨率、参考图能力不一致。需要继续把能力显式配置化:

  • 支持时长:例如 4s、5s、6s、10s。
  • 支持分辨率:例如 720p768P1080P
  • 支持首帧。
  • 支持尾帧。
  • 支持角色参考图。
  • 是否允许真人照片。
  • 是否支持多参考图。
  • 是否支持同步声音。

前端应根据能力矩阵隐藏不可用选项,而不是等 Provider 报错。

外部任务与费用

  • 已有 RenderTask 和长任务恢复,但还可以增强“正在生成”Tab。
  • 应支持取消、重新拉取、手动对账。
  • 外部官方账单 API 尚未统一接入,当前成本主要来自本地估算和 ProviderLog。
  • 需要按 Provider 建立实际账单同步策略。

Prompt Builder

  • 真人视频 Prompt Builder 已成型。
  • 小说、故事圣经、角色抽取、分集、脚本、分镜等文本步骤需要统一 Prompt Builder、schema 校验和版本记录。
  • 前台应展示最终提交参数,方便测试模型质量。

Character Library

  • 真人脸包和项目定妆已经拆开。
  • 需要继续强化锚点图候选管理、选中状态、历史保留。
  • 需要给用户明确说明上传脸包的照片要求。
  • 需要支持“同一脸包在不同项目生成不同定妆”的对比管理。

真人/版权安全

  • 视频模型可能拒绝真实人物图。
  • 需要更清楚地区分本人授权、素材授权、商业可用状态。
  • 需要生成记录可追溯到使用了哪个脸包、哪个锚点、哪个 Provider、哪个 Prompt。

FFmpeg / 后期

  • 服务器字体需要稳定打包,避免中文字幕显示方框。
  • 字幕默认策略应更轻,只显示短标题或用户指定字幕。
  • 后期对白需要按分镜时长自适应,避免裁剪和重叠。
  • 源视频声音、后期配音、BGM、SFX 都应在前端合成前可选。

小说阅读器

  • 真书翻页效果还可以继续做成点击右下角卷页,而不是按钮触发。
  • 需要继续优化分页算法、阅读主题、字体、行距、自动保存。
  • 可以增加章节购买/权限、阅读历史、多设备同步。

数据模型

  • 当前大量关系通过 *_id 逻辑关联,没有全部声明 Prisma @relation
  • 后续如果要生成更标准 ERD、级联删除、关联查询,可以逐步补充显式关系。

队列化

  • 长耗时任务已有队列基础和部分恢复机制。
  • 仍建议把图片生成、视频生成、合成、质量检查统一走 RenderTask + Worker,减少 HTTP 请求长时间等待。

11. 关键文件路径

工程入口

  • package.json
  • backend/src/main.ts
  • backend/src/app.module.ts
  • backend/prisma/schema.prisma
  • backend/prisma/seed.ts

Provider

  • backend/src/providers/providers.service.ts
  • backend/src/providers/providers.controller.ts
  • backend/src/providers/provider.types.ts
  • backend/src/providers/providers.service.spec.ts
  • backend/prisma/migrations/20260615143000_seedance_20_providers/
  • backend/prisma/migrations/20260615152000_volcengine_creation_providers/
  • backend/prisma/migrations/20260615165000_openai_model_pool/
  • backend/prisma/migrations/20260615172000_volcengine_content_generation_video/
  • backend/prisma/migrations/20260616014000_seedance_20_cost_rules/

Router

  • backend/src/ai-router/ai-router.service.ts
  • backend/src/ai-router/ai-router.types.ts
  • backend/src/ai-router/ai-router.service.spec.ts

Live Action

  • backend/src/live-action/live-action.service.ts
  • backend/src/live-action/live-action.controller.ts
  • backend/src/live-action/live-action.dto.ts
  • backend/src/live-action/live-action.types.ts
  • backend/src/live-action/prompt-builder.service.ts
  • backend/src/live-action/prompt-builder.service.spec.ts
  • backend/src/live-action/live-action-provider-acceptance.ts

Character / Image

  • backend/src/characters/characters.service.ts
  • backend/src/characters/characters.controller.ts
  • backend/src/characters/character.dto.ts
  • backend/src/characters/character.types.ts
  • backend/src/images/images.service.ts
  • backend/src/images/images.controller.ts
  • backend/src/images/image.dto.ts
  • backend/src/images/image.types.ts
  • backend/prisma/migrations/20260615125000_character_workshop_v1/

Project / Story / Script

  • backend/src/projects/projects.service.ts
  • backend/src/projects/projects.controller.ts
  • backend/src/projects/project.dto.ts
  • backend/src/story-bibles/story-bibles.service.ts
  • backend/src/story-bibles/story-bible.dto.ts
  • backend/src/episodes/episodes.service.ts
  • backend/src/episodes/episode.dto.ts
  • backend/src/scripts/scripts.service.ts
  • backend/src/scripts/script.dto.ts

Novel

  • backend/src/novels/novels.service.ts
  • backend/src/novels/novels.service.spec.ts
  • backend/src/novels/novel-parser.service.ts
  • backend/src/novels/novel-parser.service.spec.ts
  • backend/src/novels/novel.dto.ts
  • backend/src/novels/novel.types.ts
  • backend/src/novels/original-novel-mock.service.ts
  • backend/src/novels/original-novel.dto.ts
  • backend/src/novels/original-novel.types.ts
  • backend/prisma/migrations/20260617093000_novel_chapter_volumes/
  • backend/prisma/migrations/20260617111500_novel_reader_tools/

Media / FFmpeg

  • backend/src/media/media.service.ts
  • backend/src/media/media.controller.ts
  • backend/src/media/media.dto.ts
  • backend/src/live-action/live-action.service.ts

Assets / Storage

  • backend/src/assets/assets.service.ts
  • backend/src/assets/assets.controller.ts
  • backend/src/assets/storage.service.ts
  • backend/src/assets/public-temp-assets.controller.ts
  • backend/src/assets/asset.types.ts

Queue / Worker

  • backend/src/queues/queues.service.ts
  • backend/src/queues/worker-tasks.controller.ts
  • workers/src/main.ts

Admin Frontend

  • admin/src/App.vue
  • admin/src/api/client.ts
  • admin/src/styles.css

User Frontend

  • user-app/src/pages/index/index.vue
  • user-app/src/api/client.ts
  • user-app/src/styles.css
  • user-app/src/workflow.ts

Deploy / Tooling

  • deploy/nginx.https.example.conf
  • deploy/docker-compose.dev.yml
  • .env.example
  • tools/frontend-visual-audit.mjs
  • tools/frontend-business-e2e.mjs

12. 当前 Router / Provider / Prompt / Character 的协作关系

flowchart TB
  UI[前端步骤模型选择\n智能计划 / 手动模型] --> LiveAPI[LiveActionController]
  LiveAPI --> LiveService[LiveActionService]

  LiveService --> CharacterCtx[角色上下文\nCharacter / ActorProfile / FacePack / Anchor]
  LiveService --> Router[AiRouterService]
  Router --> ProviderConfig[ProviderConfig\n启用状态 / 成本 / 能力]
  Router --> Decision[RouterDecision\nprovider / fallback / cost / tier]

  CharacterCtx --> PromptBuilder[PromptBuilderService]
  Decision --> PromptBuilder
  PromptBuilder --> FinalPrompt[最终视频 Prompt\nPrompt Components / Negative Prompt]

  FinalPrompt --> ProviderService[ProvidersService]
  ProviderService --> ExternalAI[外部 AI 平台]
  ExternalAI --> Asset[Asset / VideoClip / RenderTask]

关键原则:

  • 前端每个 AI 步骤应只展示对应类型模型:文本、图片、视频、语音。
  • 用户不选模型时走智能计划。
  • 用户手动选模型时必须真实生效;如果不可用应直接报错。
  • 同一分镜可以用多个视频模型生成多个候选。
  • 合成前必须选择每个分镜最终使用哪个候选片段。
  • 真人脸包只锁脸,项目锚点图才是视频角色主参考。
  • Provider 报 running 时,本地不应直接判失败,应记录外部任务号并继续轮询恢复。