# Air Spark > AI 驱动的动画自动化生产平台 · Air Spark 内部使用 导演通过对话生成剧本,系统自动串联**图片生成 → 视频生成 → 拼接**,输出完整成片。 --- ## 核心理念 **模型 + Skill = Agent** Skill 即系统提示词,定义 Agent 的行为规则和输出格式。新增内容类型 = 新增 Skill,不改代码。 --- ## 七阶段流水线 ``` Stage 1 剧本对话 screenplay-skill Stage 2 资产 & 分镜规划 storyboard-skill Stage 3 片段切分 segmentation-skill Stage 4 参考图生成 Banana Pro (人设图 / 场景图) Stage 5 Keyshot 宫格图 空间锚点参考 Stage 6 视频生成 Seedance (提示词 + 参考图) Stage 7 拼接成片 ``` 两条并行线均以剧本为输入: - 剧本 → storyboard-skill → Keyshot 宫格图(空间参考) - 剧本 → segmentation-skill → 片段提示词 → Seedance --- ## 目录结构 ``` . ├── frontend/ Next.js 16 (App Router) + React 19 + Tailwind v4 ├── skills/ 项目 Skill 包(剧本、分镜、切分等) ├── skills-lock.json Skill 版本锁 ├── PRD.md 产品需求文档 ├── UI-Design-System.md 设计系统规范 ├── DEV-LOG.md 开发日志 ├── seedance视频生成文档.md Seedance API 集成参考 └── mook图/ Mock / 参考图 ``` --- ## 快速开始 ```bash cd frontend npm install npx next dev --webpack ``` 打开 http://localhost:3000 > ⚠️ Next.js 16 的 Turbopack 在部分 Windows 环境会 panic(`failed to create whole tree`),所以使用 `--webpack` 启动。 可用路由: - `/` — 首页 - `/dashboard` — 项目工作台 - `/showcase` — UI 展示 --- ## 技术栈 - **Frontend**:Next.js 16.1.6 · React 19.2 · TypeScript 5 · Tailwind CSS v4 - **图标**:lucide-react - **视频生成**:火山引擎 Seedance(参见 `seedance视频生成文档.md`) - **图像生成**:Banana Pro - **对话/规划**:Claude(通过 Skill 体系驱动) --- ## 角色 | 角色 | 核心需求 | |------|---------| | **导演** | 对话写剧本 → 一键触发流水线 → 审核成片 | | **管理员** | 管理成员、API Key、Skill 配置 | --- ## 内容层级 ``` Project(一部动画 IP) ├── Asset Library(角色/场景图,跨集复用) └── Episode(EP01, EP02 ...) ├── script.md ├── 流水线状态 └── 各阶段输出文件 ``` --- ## 更多文档 - [PRD.md](./PRD.md) — 完整产品需求 - [UI-Design-System.md](./UI-Design-System.md) — 设计系统 - [DEV-LOG.md](./DEV-LOG.md) — 开发日志 - [seedance视频生成文档.md](./seedance视频生成文档.md) — Seedance API 接入 --- ## 部署 CI/CD 走 Gitea Actions + 火山引擎 CR + K3s(traefik + cert-manager)。 | 分支 | 环境 | 域名 | Image tag | | --- | --- | --- | --- | | `master` | production | `airspark.airlabs.art` | `prod-YYYYMMDD-` | | `dev` | development | `airspark.test.airlabs.art` | `dev-YYYYMMDD-` | 推到对应分支自动触发 [.gitea/workflows/deploy.yaml](.gitea/workflows/deploy.yaml): checkout → `docker build ./frontend` (multi-stage: deps → builder → runner)→ push `airspark-web` → kubectl apply [k8s/](k8s/) → rollout restart。 **Next.js standalone 模式:** [frontend/next.config.ts](frontend/next.config.ts) 中 `output: "standalone"`,Docker runtime 仅拷贝 `.next/standalone` + `.next/static` + `public`,以非 root 用户运行 `node server.js`,监听 `:3000`。Service 80 → targetPort 3000。 **Gitea 仓库需要配置的 Secrets:** - prod: `CR_PROD_PASSWORD` · `VOLCANO_PROD_KUBE_CONFIG` - dev: `CR_SERVER` · `CR_USERNAME` · `CR_PASSWORD` · `VOLCANO_TEST_KUBE_CONFIG`