{"repo":"waooAI/waoowaoo","free":true,"listed":false,"github":"https://github.com/waooAI/waoowaoo","clone":"git clone https://github.com/waooAI/waoowaoo.git","description":"首家工业级全流程 AI 影视生产平台。Industry-first professional AI Agent platform for controllable film & video production. From shorts to live-action with Hollywood-standard workflows.","language":"TypeScript","stars":13631,"topics":["ai-agent","ai-agents","automation","film-production","generative-ai","short-drama","storyboard","video-generation"],"license":null,"category":"ai_media_suite","readme_excerpt":"<p align=\"center\">\n  <a href=\"https://www.waoowaoo.com/\">\n    <img src=\"images/cta-banner.png\" alt=\"🚀 探索 AI 影视的下一代创作流 | 立即加入 waoowaoo 在线网页版内测候补\" width=\"800\">\n  </a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://trendshift.io/repositories/22585?utm_source=trendshift-badge&amp;utm_medium=badge&amp;utm_campaign=badge-trendshift-22585\" target=\"_blank\" rel=\"noopener noreferrer\">\n    <img src=\"https://trendshift.io/api/badge/trendshift/repositories/22585/daily\" alt=\"waooAI%2Fwaoowaoo | Trendshift\" width=\"250\" height=\"55\"/>\n  </a>\n</p>\n\n<h1 align=\"center\">waoowaoo AI 影视 Studio</h1>\n\n<p align=\"center\">\n  一款基于 AI 技术的短剧/漫画视频制作工具，支持从小说文本自动生成分镜、角色、场景，并制作成完整视频。\n</p>\n\n<p align=\"center\">\n  <a href=\"README_en.md\">English</a> · <a href=\"https://www.waoowaoo.com/\">加入内测候补</a> · <a href=\"https://github.com/saturndec/waoowaoo/issues\">反馈问题</a>\n</p>\n\n> [!IMPORTANT]\n> ⚠️ **测试版声明**：本项目目前处于测试初期阶段，由于暂时只有我一个人开发，存在部分 bug 和不完善之处。我们正在快速迭代更新中，**欢迎进群反馈问题和需求，及时关注项目更新！目前更新会非常频繁，后续会增加大量新功能以及优化效果，我们的目标是成为行业最强AI工具！**\n\n<img src=\"https://github.com/user-attachments/assets/d190bf41-488d-47df-a5df-06346ef0f2f5\" width=\"30%\">\n\n---\n## ✨ 功能特性\n\n- 🎬 **AI 剧本分析** — 自动解析小说，提取角色、场景、剧情\n- 🎨 **角色 & 场景生成** — AI 生成一致性人物和场景图片\n- 📽️ **分镜视频制作** — 自动生成分镜头并合成视频\n- 🎙️ **AI 配音** — 多角色语音合成\n- 🌐 **多语言支持** — 中文 / 英文界面，右上角一键切换\n\n---\n\n## 🚀 快速开始\n\n**前提条件**：安装 [Docker Desktop](https://docs.docker.com/get-docker/)\n\n### 方式一：拉取预构建镜像（最简单）\n\n无需克隆仓库，下载即用：\n\n```bash\n# 下载 docker-compose.yml\ncurl -O https://raw.githubusercontent.com/saturndec/waoowaoo/main/docker-compose.yml\n\n# 启动所有服务\ndocker compose up -d\n```\n\n> ⚠️ 当前为测试版，版本间数据库不兼容。升级请先清除旧数据：\n\n```bash\ndocker compose down -v\ndocker rmi ghcr.io/saturndec/waoowaoo:latest\ncurl -O https://raw.githubusercontent.com/saturndec/waoowaoo/main/docker-compose.yml\ndocker compose up -d\n```\n\n> 启动后请**清空浏览器缓存**并重新登录，避免旧版本缓存导致异常。\n\n### 方式二：克隆仓库 + Docker 构建（完全控制）\n\n```bash\ngit clone https://github.com/saturndec/waoowaoo.git\ncd waoowaoo\ndocker compose up -d\n```\n\n更新版本：\n```bash\ngit pull\ndocker compose down && docker compose up -d --build\n```\n\n### 方式三：本地开发模式（开发者）\n\n```bash\ngit clone https://github.com/saturndec/waoowaoo.git\ncd waoowaoo\n\n# 复制环境变量配置文件（必须在 npm install 之前完成）\ncp .env.example .env\n# ⚠️ 编辑 .env，填入你的 AI API Key（NEXTAUTH_URL 默认已是 http://localhost:3000，无需修改）\n\nnpm install\n\n# 只启动基础设施\n# 注意：docker-compose.yml 将服务映射到非标准端口，.env.example 已按此预设\nmysql:13306  redis:16379  minio:19000\ndocker compose up mysql redis minio -d\n\n# 初始化数据库表结构（首次必须执行，跳过会导致启动后报错）\nnpx prisma db push\n\n# 启动开发服务器\nnpm run dev\n```\n\n> [!WARNING]\n> 跳过 `npx prisma db push` 会导致所有数据库表不存在，启动后报错 `The table 'tasks' does not exist`。请务必先运行此命令再启动开发服务器。\n\n---\n\n访问 [http://localhost:13000](http://localhost:13000)（方式一、二）或 [http://localhost:3000](http://localhost:3000)（方式三）开始使用！\n\n> 首次启动会自动完成数据库初始化，无需任何额外配置。\n\n> [!TIP]\n> **如果遇到网页卡顿**：HTTP 模式下浏览器可能限制并发连接。可安装 [Caddy](https://caddyserver.com/docs/install) 启用 HTTPS：\n> ```bash\n> caddy run --config Caddyfile\n> ```\n> 然后访问 [https://localhost:1443](https://localhost:1443)\n\n---\n\n## 🔧 API 配置\n\n启动后进入**设置中心**配置 AI 服务的 API Key，内置配置教程。\n\n> 💡 **注意**：目前仅推荐使用各服务商官方 API，第三方兼容格式（OpenAI Compatible）尚不完善，后续版本会持续优化。\n\n---\n\n## 📦 技术栈\n\n- **框架**: Next.js 15 + React 19\n- **数据库**: MySQL + Prisma ORM\n- **队列**: Redis + BullMQ\n- **样式**: Tailwind CSS v4\n- **认证**: NextAuth.js\n\n---\n\n## 📦 页面功能预览\n\n![4f7b913264f7f26438c12560340e958c67fa833a](https://github.com/user-attachments/assets/fa0e9c57-9ea0-4df3-893e-b76c4c9d304b)\n![67509361cbe6809d2496a550de5733b9f99a9702](https://github.com/user-attachments/assets/f2fb6a64-5ba8-4896-a064-be0ded213e42)\n![466e13c8fd1fc799d8f588c367ebfa24e1e99bf7](https://github.com/user-attachments/assets/09bbff39-e535-4c67-80a9-69421c3b05ee)\n![c067c197c20b0f1de456357c49cdf0b0973c9b31](https://github.com/user-attachments/assets/688e3147-6e95-43b0-b9e7-dd9af40db8a0)\n\n---\n\n## 🤝 参与方式\n\n本项目由核心团队独立维护。欢迎你通过以下方式参与：\n\n- 🐛 提交 [Issue](https://github.com/saturndec/waoowaoo/issues) 反馈 Bug\n- 💡 提交 [Issue](https://github.com/saturndec/waoowaoo/issues) 提出功能建议\n- 🔧 提交 Pull Request 供参考 — 我们会认真审阅每一个 PR 的思路，但最终由团队自行实现修复，不会直接合并外部 PR\n\n---\n\n**Made with ❤️ by waoowaoo team**\n\n## Star History\n\n[![Star History Chart](https://api.star-history.com/svg?repos=saturndec/waoowaoo&type=date&legend=top-left)](https://www.star-history.com/#saturndec/waoowaoo&type=date&legend=top-left)\n","default_branch":"main","files":1477,"tree":[".dockerignore",".env.example",".eslintrc.json",".github/workflows/docker-publish.yml",".gitignore",".husky/pre-commit",".husky/pre-push",".nvmrc",".tmp_check_task.ts","CHANGELOG.md","Dockerfile","LICENSE","README.md","README_en.md","caddyfile","debug-request.json","docker-compose.test.yml","docker-compose.yml","eslint.config.mjs","extract_chinese.py","images/cta-banner.png","images/dab6b4105e3260f37ba2d5f536dce259.jpg","lib/prompts/character-reference/character_image_to_description.en.txt","lib/prompts/character-reference/character_image_to_description.zh.txt","lib/prompts/character-reference/character_reference_to_sheet.en.txt","lib/prompts/character-reference/character_reference_to_sheet.zh.txt","lib/prompts/novel-promotion/agent_acting_direction.en.txt","lib/prompts/novel-promotion/agent_acting_direction.zh.txt","lib/prompts/novel-promotion/agent_character_profile.en.txt","lib/prompts/novel-promotion/agent_character_profile.zh.txt","lib/prompts/novel-promotion/agent_character_visual.en.txt","lib/prompts/novel-promotion/agent_character_visual.zh.txt","lib/prompts/novel-promotion/agent_cinematographer.en.txt","lib/prompts/novel-promotion/agent_cinematographer.zh.txt","lib/prompts/novel-promotion/agent_clip.en.txt","lib/prompts/novel-promotion/agent_clip.zh.txt","lib/prompts/novel-promotion/agent_shot_variant_analysis.en.txt","lib/prompts/novel-promotion/agent_shot_variant_analysis.zh.txt","lib/prompts/novel-promotion/agent_shot_variant_generate.en.txt","lib/prompts/novel-promotion/agent_shot_variant_generate.zh.txt","lib/prompts/novel-promotion/agent_storyboard_detail.en.txt","lib/prompts/novel-promotion/agent_storyboard_detail.zh.txt","lib/prompts/novel-promotion/agent_storyboard_insert.en.txt","lib/prompts/novel-promotion/agent_storyboard_insert.zh.txt","lib/prompts/novel-promotion/agent_storyboard_plan.en.txt","lib/prompts/novel-promotion/agent_storyboard_plan.zh.txt","lib/prompts/novel-promotion/ai_story_expand.en.txt","lib/prompts/novel-promotion/ai_story_expand.zh.txt","lib/prompts/novel-promotion/character_create.en.txt","lib/prompts/novel-promotion/character_create.zh.txt","lib/prompts/novel-promotion/character_description_update.en.txt","lib/prompts/novel-promotion/character_description_update.zh.txt","lib/prompts/novel-promotion/character_modify.en.txt","lib/prompts/novel-promotion/character_modify.zh.txt","lib/prompts/novel-promotion/character_regenerate.en.txt","lib/prompts/novel-promotion/character_regenerate.zh.txt","lib/prompts/novel-promotion/episode_split.en.txt","lib/prompts/novel-promotion/episode_split.zh.txt","lib/prompts/novel-promotion/image_prompt_modify.en.txt","lib/prompts/novel-promotion/image_prompt_modify.zh.txt","lib/prompts/novel-promotion/location_create.en.txt","lib/prompts/novel-promotion/location_create.zh.txt","lib/prompts/novel-promotion/location_description_update.en.txt","lib/prompts/novel-promotion/location_description_update.zh.txt","lib/prompts/novel-promotion/location_modify.en.txt","lib/prompts/novel-promotion/location_modify.zh.txt","lib/prompts/novel-promotion/location_regenerate.en.txt","lib/prompts/novel-promotion/location_regenerate.zh.txt","lib/prompts/novel-promotion/prop_description_update.en.txt","lib/prompts/novel-promotion/prop_description_update.zh.txt","lib/prompts/novel-promotion/screenplay_conversion.en.txt","lib/prompts/novel-promotion/screenplay_conversion.zh.txt","lib/prompts/novel-promotion/select_location.en.txt","lib/prompts/novel-promotion/select_location.zh.txt","lib/prompts/novel-promotion/select_prop.en.txt","lib/prompts/novel-promotion/select_prop.zh.txt","lib/prompts/novel-promotion/single_panel_image.en.txt","lib/prompts/novel-promotion/single_panel_image.zh.txt","lib/prompts/novel-promotion/storyboard_edit.en.txt","lib/prompts/novel-promotion/storyboard_edit.zh.txt","lib/prompts/novel-promotion/voice_analysis.en.txt","lib/prompts/novel-promotion/voice_analysis.zh.txt","lib/prompts/proxy.ts","lib/prompts/skills/api-config-template.system.txt","lib/prompts/skills/tutorial.system.txt","messages/en/actions.json","messages/en/apiConfig.json","messages/en/apiTypes.json","messages/en/assetHub.json","messages/en/assetLibrary.json","messages/en/assetModal.json","messages/en/assetPicker.json","messages/en/assets.json","messages/en/auth.json","messages/en/billing.json","messages/en/common.json","messages/en/configModal.json","messages/en/errors.json","messages/en/home.json","messages/en/landing.json","messages/en/layout.json","messages/en/modelSection.json","messages/en/nav.json","messages/en/novel-promotion.json","messages/en/profile.json","messages/en/progress.json","messages/en/providerSection.json","messages/en/scriptView.json","messages/en/smartImport.json","messages/en/stages.json","messages/en/storyboard.json","messages/en/video.json","messages/en/voice.json","messages/en/workspace.json","messages/en/workspaceDetail.json","messages/en/workspaceRedesign.json","messages/en/worldContextModal.json","messages/zh/actions.json","messages/zh/apiConfig.json","messages/zh/apiTypes.json","messages/zh/assetHub.json","messages/zh/assetLibrary.json","messages/zh/assetModal.json","messages/zh/assetPicker.json","messages/zh/assets.json","messages/zh/auth.json","messages/zh/billing.json","messages/zh/common.json","messages/zh/configModal.json","messages/zh/errors.json","messages/zh/home.json","messages/zh/landing.json","messages/zh/layout.json","messages/zh/modelSection.json","messages/zh/nav.json","messages/zh/novel-promotion.json","messages/zh/profile.json","messages/zh/progress.json","messages/zh/providerSection.json","messages/zh/scriptView.json","messages/zh/smartImport.json","messages/zh/stages.json","messages/zh/storyboard.json","messages/zh/video.json","messages/zh/voice.json","messages/zh/workspace.json","messages/zh/workspaceDetail.json","messages/zh/workspaceRedesign.json","messages/zh/worldContextModal.json","middleware.ts","next.config.ts","package-lock.json","package.json","postcss.config.mjs","prisma/migrations/20260317120000_add_asset_kind_to_locations/migration.sql","prisma/migrations/20260324120000_drop_project_mode/migration.sql","prisma/migrations/20260328110000_add_location_available_slots/migration.sql","prisma/schema.prisma","prisma/schema.sqlit.prisma","public/banner.png","public/file.svg","public/globe.svg","public/icon.png","public/images/grid-template-9x16.png","public/logo-small.png","public/logo.ico","public/logo.png","public/next.svg","public/window.svg","scripts/billing-cleanup-pending-freezes.ts","scripts/billing-reconcile-ledger.ts","scripts/bull-board.ts","scripts/check-api-handler.ts","scripts/check-capability-catalog.mjs","scripts/check-image-urls-contract.ts","scripts/check-log-semantic.ts","scripts/check-media-normalization.ts","scripts/check-model-config-contract.mjs","scripts/check-no-console.ts","scripts/check-outbound-image-runtime-sample.ts","scripts/check-outbound-image-success-rate.ts","scripts/check-outbound-image-unification.ts","scripts/check-pricing-catalog.mjs","scripts/cleanup-remove-legacy-voice-data.ts","scripts/diagnose-project.ts","scripts/guards/api-route-contract-guard.mjs","scripts/guards/changed-file-test-impact-guard.mjs","scripts/guards/file-line-count-guard.mjs","scripts/guards/image-reference-normalization-guard.mjs","scripts/guards/locale-navigation-guard.mjs","scripts/guards/no-api-direct-llm-call.mjs","scripts/guards/no-duplicate-endpoint-entry.mjs","scripts/guards/no-hardcoded-model-capabilities.mjs","scripts/guards/no-internal-task-sync-fallback.mjs","scripts/guards/no-media-provider-bypass.mjs","scripts/guards/no-model-key-downgrade.mjs","scripts/guards/no-multiple-sources-of-truth.mjs","scripts/guards/no-provider-guessing.mjs","scripts/guards/no-server-mirror-state.mjs","scripts/guards/prompt-ab-regression.mjs","scripts/guards/prompt-i18n-guard.mjs","scripts/guards/prompt-json-canary-guard.mjs","scripts/guards/prompt-semantic-regression.mjs","scripts/guards/task-loading-baseline.json","scripts/guards/task-loading-guard.mjs","scripts/guards/task-state-unification-guard.sh","scripts/guards/task-status-cutover-audit.sh","scripts/guards/task-submit-compensation-guard.mjs","scripts/guards/task-target-states-no-polling-guard.mjs","scripts/guards/test-behavior-quality-guard.mjs","scripts/guards/test-behavior-route-coverage-guard.mjs","scripts/guards/test-behavior-tasktype-coverage-guard.mjs","scripts/guards/test-route-coverage-guard.mjs","scripts/guards/test-tasktype-coverage-guard.mjs","scripts/media-archive-legacy-refs.ts","scripts/media-backfill-refs.ts","scripts/media-build-unreferenced-index.ts","scripts/media-mapping.ts","scripts/media-restore-dry-run.ts","scripts/media-safety-backup.ts","scripts/migrate-cancelled-to-failed.ts","scripts/migrate-image-urls-contract.ts","scripts/migrate-local-to-minio.ts","scripts/migrate-to-minio.sh","scripts/migrate-to-minio.ts","scripts/migrations/migrate-capability-selections.ts","scripts/migrations/migrate-custom-pricing-v2.ts","scripts/migrations/migrate-gateway-route-openai-compat.ts","scripts/migrations/migrate-graph-artifacts-unique-index.ts","scripts/migrations/migrate-model-config-contract.ts","scripts/migrations/migrate-qwen-to-bailian.ts","scripts/migrations/migrate-release-blockers.ts","scripts/migrations/reports/model-config-migration-report.apply.json","scripts/migrations/reports/model-config-migration-report.post-alias-apply.json","scripts/migrations/reports/model-config-migration-report.post-alias-dryrun.json","scripts/migrations/reports/model-config-migration-report.pre-apply.json","scripts/task-error-stats.ts","scripts/test-full-image-flow.ts","scripts/test-image-url-flow.ts","scripts/test-minio.ts","scripts/test-regression-runner.sh","scripts/test-sign-api.ts","scripts/tmp-cleanup-project-models.mjs","scripts/tmp-find-old-model.mjs","scripts/watchdog.ts","src/app/[locale]/auth/signin/page.tsx","src/app/[locale]/auth/signup/page.tsx","src/app/[locale]/dev/segmented-control-test/page.tsx","src/app/[locale]/dev/workspace-redesign/InlineSelector.tsx","src/app/[locale]/dev/workspace-redesign/ProjectLayouts.tsx","src/app/[locale]/dev/workspace-redesign/VariantClearBreath.tsx","src/app/[locale]/dev/workspace-redesign/page.tsx","src/app/[locale]/dev/workspace-redesign/shared.ts","src/app/[locale]/home/page.tsx","src/app/[locale]/layout.tsx","src/app/[locale]/page.tsx","src/app/[locale]/profile/components/ApiConfigTab.tsx","src/app/[locale]/profile/components/api-config-tab/ApiConfigProviderList.tsx","src/app/[locale]/profile/components/api-config-tab/ApiConfigTabContainer.tsx","src/app/[locale]/profile/components/api-config-tab/ApiConfigToolbar.tsx","src/app/[locale]/profile/components/api-config-tab/DefaultModelCards.tsx","src/app/[locale]/profile/components/api-config-tab/hooks/useApiConfigFilters.ts","src/app/[locale]/profile/components/api-config/DefaultModelSection.tsx","src/app/[locale]/profile/components/api-config/ProviderCard.tsx","src/app/[locale]/profile/components/api-config/ProviderSection.tsx","src/app/[locale]/profile/components/api-config/hooks.ts","src/app/[locale]/profile/components/api-config/index.ts","src/app/[locale]/profile/components/api-config/provider-card/ModelTemplateAssistantModal.tsx","src/app/[locale]/profile/components/api-config/provider-card/ProviderAdvancedFields.tsx","src/app/[locale]/profile/components/api-config/provider-card/ProviderBaseFields.tsx","src/app/[locale]/profile/components/api-config/provider-card/ProviderCardShell.tsx","src/app/[locale]/profile/components/api-config/provider-card/hooks/useProviderCardState.ts","src/app/[locale]/profile/components/api-config/provider-card/types.ts","src/app/[locale]/profile/components/api-config/types.ts","src/app/[locale]/profile/page.tsx","src/app/[locale]/providers.tsx","src/app/[locale]/workspace/[projectId]/components/Sidebar.tsx","src/app/[locale]/workspace/[projectId]/episode-selection.ts","src/app/[locale]/workspace/[projectId]/hooks/useProject.ts","src/app/[locale]/workspace/[projectId]/modes/novel-promotion/NovelPromotionWorkspace.tsx","src/app/[locale]/workspace/[projectId]/modes/novel-promotion/StageNavigation.tsx","src/app/[locale]/workspace/[projectId]/modes/novel-promotion/WorkspaceProvider.tsx","src/app/[locale]/workspace/[projectId]/modes/novel-promotion/WorkspaceStageRuntimeContext.tsx","src/app/[locale]/workspace/[projectId]/modes/novel-promotion/components/AssetLibrary.tsx","src/app/[locale]/workspace/[projectId]/modes/novel-promotion/components/AssetsStage.tsx","src/app/[locale]/workspace/[projectId]/modes/novel-promotion/components/ConfigStage.tsx","src/app/[locale]/workspace/[projectId]/modes/novel-promotion/components/NovelInputStage.tsx","src/app/[locale]/workspace/[projectId]/modes/novel-promotion/components/PanelEditForm.tsx","src/app/[locale]/workspace/[projectId]/modes/novel-promotion/components/PromptsStage.tsx","src/app/[locale]/workspace/[projectId]/modes/novel-promotion/components/ScriptStage.tsx","src/app/[locale]/workspace/[projectId]/modes/novel-promotion/components/ScriptView.tsx","src/app/[locale]/workspace/[projectId]/modes/novel-promotion/components/SmartImportWizard.tsx","src/app/[locale]/workspace/[projectId]/modes/novel-promotion/components/StoryboardStage.tsx","src/app/[locale]/workspace/[projectId]/modes/novel-promotion/components/VideoStage.tsx","src/app/[locale]/workspace/[projectId]/modes/novel-promotion/components/VideoStageRoute.tsx","src/app/[locale]/workspace/[projectId]/modes/novel-promotion/components/VoiceStage.tsx","src/app/[locale]/workspace/[projectId]/modes/novel-promotion/components/VoiceStageRoute.tsx","src/app/[locale]/workspace/[projectId]/modes/novel-promotion/components/WorkspaceAssetLibraryModal.tsx","src/app/[locale]/workspace/[projectId]/modes/novel-promotion/components/WorkspaceHeaderShell.tsx","src/app/[locale]/workspace/[projectId]/modes/novel-promotion/components/WorkspaceRunStreamConsoles.tsx","src/app/[locale]/workspace/[projectId]/modes/novel-promotion/components/WorkspaceStageContent.tsx","src/app/[locale]/workspace/[projectId]/modes/novel-promotion/components/WorkspaceTopActions.tsx","src/app/[locale]/workspace/[projectId]/modes/novel-promotion/components/assets/AddLocationModal.tsx","src/app/[locale]/workspace/[projectId]/modes/novel-promotion/components/assets/AssetFilterBar.tsx","src/app/[locale]/workspace/[projectId]/modes/novel-promotion/components/assets/AssetToolbar.tsx","src/app/[locale]/workspace/[projectId]/modes/novel-promotion/components/assets/AssetsStageModals.tsx","src/app/[locale]/workspace/[projectId]/modes/novel-promotion/components/assets/AssetsStageStatusOverlays.tsx","src/app/[locale]/workspace/[projectId]/modes/novel-promotion/components/assets/CharacterCard.tsx","src/app/[locale]/workspace/[projectId]/modes/novel-promotion/components/assets/CharacterEditModal.tsx","src/app/[locale]/workspace/[projectId]/modes/novel-promotion/components/assets/CharacterProfileCard.tsx","src/app/[locale]/workspace/[projectId]/modes/novel-promotion/components/assets/CharacterProfileDialog.tsx","src/app/[locale]/workspace/[projectId]/modes/novel-promotion/components/assets/CharacterSection.tsx","src/app/[locale]/workspace/[projectId]/modes/novel-promotion/components/assets/ImageEditModal.tsx","src/app/[locale]/workspace/[projectId]/modes/novel-promotion/components/assets/LocationCard.tsx","src/app/[locale]/workspace/[projectId]/modes/novel-promotion/components/assets/LocationEditModal.tsx","src/app/[locale]/workspace/[projectId]/modes/novel-promotion/components/assets/LocationSection.tsx","src/app/[locale]/workspace/[projectId]/modes/novel-promotion/components/assets/VoiceSettings.tsx","src/app/[locale]/workspace/[projectId]/modes/novel-promotion/components/assets/character-card/CharacterCardActions.tsx","src/app/[locale]/workspace/[projectId]/modes/novel-promotion/components/assets/character-card/CharacterCardGallery.tsx","src/app/[locale]/workspace/[projectId]/modes/novel-promotion/components/assets/character-card/CharacterCardHeader.tsx","src/app/[locale]/workspace/[projectId]/modes/novel-promotion/components/assets/hooks/index.ts","src/app/[locale]/workspace/[projectId]/modes/novel-promotion/components/assets/hooks/useAssetModals.ts","src/app/[locale]/workspace/[projectId]/modes/novel-promotion/components/assets/hooks/useAssetsCopyFromHub.ts","src/app/[locale]/workspace/[projectId]/modes/novel-promotion/components/assets/hooks/useAssetsGlobalActions.ts","src/app/[locale]/workspace/[projectId]/modes/novel-promotion/components/assets/hooks/useAssetsImageEdit.ts","src/app/[locale]/workspace/[projectId]/modes/novel-promotion/components/assets/hooks/useBatchGeneration.helpers.ts","src/app/[locale]/workspace/[projectId]/modes/novel-promotion/components/assets/hooks/useBatchGeneration.ts","src/app/[locale]/workspace/[projectId]/modes/novel-promotion/components/assets/hooks/useCharacterActions.ts","src/app/[locale]/workspace/[projectId]/modes/novel-promotion/components/assets/hooks/useLocationActions.ts","src/app/[locale]/workspace/[projectId]/modes/novel-promotion/components/assets/hooks/useProfileManagement.ts","src/app/[locale]/workspace/[projectId]/modes/novel-promotion/components/assets/hooks/useTTSGeneration.ts","src/app/[locale]/workspace/[projectId]/modes/novel-promotion/components/assets/location-backed-asset.ts","src/app/[locale]/workspace/[projectId]/modes/novel-promotion/components/assets/location-card/LocationCardActions.tsx","src/app/[locale]/workspace/[projectId]/modes/novel-promotion/components/assets/location-card/LocationCardHeader.tsx","src/app/[locale]/workspace/[projectId]/modes/novel-promotion/components/assets/location-card/LocationImageList.tsx","src/app/[locale]/workspace/[projectId]/modes/novel-promotion/components/prompts-stage/PromptEditorPanel.tsx","src/app/[locale]/workspace/[projectId]/modes/novel-promotion/components/prompts-stage/PromptListCardView.tsx","src/app/[locale]/workspace/[projectId]/modes/novel-promotion/components/prompts-stage/PromptListPanel.tsx","src/app/[locale]/workspace/[projectId]/modes/novel-promotion/components/prompts-stage/PromptListTableView.tsx","src/app/[locale]/workspace/[projectId]/modes/novel-promotion/components/prompts-stage/PromptsStageLayout.tsx","src/app/[locale]/workspace/[projectId]/modes/novel-promotion/components/prompts-stage/PromptsStageShell.tsx","src/app/[locale]/workspace/[projectId]/modes/novel-promotion/components/prompts-stage/hooks/usePromptStageActions.tsx","src/app/[locale]/workspace/[projectId]/modes/novel-promotion/components/prompts-stage/runtime/hooks/usePromptAiModifyFlow.ts","src/app/[locale]/workspace/[projectId]/modes/novel-promotion/components/prompts-stage/runtime/hooks/usePromptAppendFlow.ts","src/app/[locale]/workspace/[projectId]/modes/novel-promotion/components/prompts-stage/runtime/hooks/usePromptAssetMention.ts","src/app/[locale]/workspace/[projectId]/modes/novel-promotion/components/prompts-stage/runtime/hooks/usePromptDraftByShot.ts","src/app/[locale]/workspace/[projectId]/modes/novel-promotion/components/prompts-stage/runtime/hooks/usePromptEditorRuntime.ts","src/app/[locale]/workspace/[projectId]/modes/novel-promotion/components/prompts-stage/runtime/promptStageRuntime.types.ts","src/app/[locale]/workspace/[projectId]/modes/novel-promotion/components/prompts-stage/runtime/promptStageRuntime.utils.ts","src/app/[locale]/workspace/[projectId]/modes/novel-promotion/components/prompts-stage/runtime/promptStageRuntimeCore.tsx","src/app/[locale]/workspace/[projectId]/modes/novel-promotion/components/script-view/ScriptViewAssetsPanel.tsx","src/app/[locale]/workspace/[projectId]/modes/novel-promotion/components/script-view/ScriptViewContainer.tsx","src/app/[locale]/workspace/[projectId]/modes/novel-promotion/components/script-view/ScriptViewCore.tsx","src/app/[locale]/workspace/[projectId]/modes/novel-promotion/components/script-view/ScriptViewRuntime.tsx","src/app/[locale]/workspace/[projectId]/modes/novel-promotion/components/script-view/ScriptViewScriptPanel.tsx","src/app/[locale]/workspace/[projectId]/modes/novel-promotion/components/script-view/SpotlightCards.tsx","src/app/[locale]/workspace/[projectId]/modes/novel-promotion/components/script-view/asset-state-utils.ts","src/app/[locale]/workspace/[projectId]/modes/novel-promotion/components/script-view/clip-asset-utils.ts","src/app/[locale]/workspace/[projectId]/modes/novel-promotion/components/script-view/selection-sync.ts","src/app/[locale]/workspace/[projectId]/modes/novel-promotion/components/smart-import/hooks/useWizardState.ts","src/app/[locale]/workspace/[projectId]/modes/novel-promotion/components/smart-import/steps/StepConfirm.tsx","src/app/[locale]/workspace/[projectId]/modes/novel-promotion/components/smart-import/steps/StepMapping.tsx","src/app/[locale]/workspace/[projectId]/modes/novel-promotion/components/smart-import/steps/StepParse.tsx","src/app/[locale]/workspace/[projectId]/modes/novel-promotion/components/smart-import/steps/StepSource.tsx","src/app/[locale]/workspace/[projectId]/modes/novel-promotion/components/smart-import/types.ts","src/app/[locale]/workspace/[projectId]/modes/novel-promotion/components/storyboard/AIDataModal.tsx","src/app/[locale]/workspace/[projectId]/modes/novel-promotion/components/storyboard/AIDataModal.types.ts","src/app/[locale]/workspace/[projectId]/modes/novel-promotion/components/storyboard/AIDataModalFormPane.tsx","src/app/[locale]/workspace/[projectId]/modes/novel-promotion/components/storyboard/AIDataModalPreviewPane.tsx","src/app/[locale]/workspace/[projectId]/modes/novel-promotion/components/storyboard/CandidateSelector.tsx","src/app/[locale]/workspace/[projectId]/modes/novel-promotion/components/storyboard/ImageEditModal.tsx","src/app/[locale]/workspace/[projectId]/modes/novel-promotion/components/storyboard/ImageEditModalAssetPicker.tsx","src/app/[locale]/workspace/[projectId]/modes/novel-promotion/components/storyboard/ImageEditModalSelectedAssets.tsx","src/app/[locale]/workspace/[projectId]/modes/novel-promotion/components/storyboard/ImageSection.css","src/app/[locale]/workspace/[projectId]/modes/novel-promotion/components/storyboard/ImageSection.tsx","src/app/[locale]/workspace/[projectId]/modes/novel-promotion/components/storyboard/ImageSectionActionButtons.tsx","src/app/[locale]/workspace/[projectId]/modes/novel-promotion/components/storyboard/ImageSectionCandidateMode.tsx","src/app/[locale]/workspace/[projectId]/modes/novel-promotion/components/storyboard/InsertPanelButton.tsx","src/app/[locale]/workspace/[projectId]/modes/novel-promotion/components/storyboard/InsertPanelModal.tsx","src/app/[locale]/workspace/[projectId]/modes/novel-promotion/components/storyboard/PanelActionButtons.tsx","src/app/[locale]/workspace/[projectId]/modes/novel-promotion/components/storyboard/PanelCard.tsx","src/app/[locale]/workspace/[projectId]/modes/novel-promotion/components/storyboard/PanelVariantModal.tsx","src/app/[locale]/workspace/[projectId]/modes/novel-promotion/components/storyboard/PanelVariantModal.types.ts","src/app/[locale]/workspace/[projectId]/modes/novel-promotion/components/storyboard/PanelVariantModalCustomOptions.tsx","src/app/[locale]/workspace/[projectId]/modes/novel-promotion/components/storyboard/PanelVariantModalSuggestionList.tsx","src/app/[locale]/workspace/[projectId]/modes/novel-promotion/components/storyboard/ScreenplayDisplay.tsx","src/app/[locale]/workspace/[projectId]/modes/novel-promotion/components/storyboard/StoryboardCanvas.tsx","src/app/[locale]/workspace/[projectId]/modes/novel-promotion/components/storyboard/StoryboardGroup.tsx","src/app/[locale]/workspace/[projectId]/modes/novel-promotion/components/storyboard/StoryboardGroup.types.ts","src/app/[locale]/workspace/[projectId]/modes/novel-promotion/components/storyboard/StoryboardGroupActions.tsx","src/app/[locale]/workspace/[projectId]/modes/novel-promotion/components/storyboard/StoryboardGroupDialogs.tsx","src/app/[locale]/workspace/[projectId]/modes/novel-promotion/components/storyboard/StoryboardGroupFailedAlert.tsx","src/app/[locale]/workspace/[projectId]/modes/novel-promotion/components/storyboard/StoryboardGroupHeader.tsx","src/app/[locale]/workspace/[projectId]/modes/novel-promotion/components/storyboard/StoryboardHeader.tsx","src/app/[locale]/workspace/[projectId]/modes/novel-promotion/components/storyboard/StoryboardPanelList.tsx","src/app/[locale]/workspace/[projectId]/modes/novel-promotion/components/storyboard/StoryboardStageShell.tsx","src/app/[locale]/workspace/[projectId]/modes/novel-promotion/components/storyboard/StoryboardToolbar.tsx","src/app/[locale]/workspace/[projectId]/modes/novel-promotion/components/storyboard/hooks/contracts.ts","src/app/[locale]/workspace/[projectId]/modes/novel-promotion/components/storyboard/hooks/image-generation-runtime.ts","src/app/[locale]/workspace/[projectId]/modes/novel-promotion/components/storyboard/hooks/panel-candidate-runtime.ts"],"storefront":"/r/waooAI","claimed":false,"request_supported":{"post":"https://gitbuyer.com/r/waooAI/waoowaoo/request-supported","requests":0},"note":"indexed from public GitHub; nothing is for sale on this page. Clone it from GitHub. Paid listings live at /search."}