Magiviz
- 创始国家:[!--country--]
- 创始年份:[!--year--]
- 收录时间:2026-08-25 16:50:03
- 流量:
- 访客:0
- 评价:0
工具介绍:
Magiviz是一款AI驱动的智能视频创作平台,让每个人都能轻松创作专业级的视频内容。从创意构想到成品制作,只需一键完成。
Magiviz
Magiviz Logo
AI驱动的智能视频创作平台 | AI-Powered Intelligent Video Creation Platform
Next.js TypeScript Tailwind CSS PostgreSQL Stripe
Magiviz 是一款 AI 驱动的智能视频创作平台,让每个人都能轻松创作专业级的视频内容。从创意构想到成品制作,只需数分钟——无需任何经验。支持好莱坞影视、动漫、故事剧情、广告、科普等多种视频类型。
目录
核心功能
???? AI 视频创作工作流
创意输入 → AI 剧情生成 → 角色设计 → 分镜生成 → 视频渲染 → 成品导出
- AI 剧情生成:输入故事大纲,AI 自动生成详细的场景分解、角色设定、导演指令和对话
- 自定义角色生成:AI 根据文字描述生成风格一致的角色设计,支持自定义上传和重新生成
- 分镜图生成:自动生成高保真分镜图,包含构图、光影、氛围等细节
- 多格式输出:支持 16:9、9:16等多种画面比例
- 多模型支持:集成 Veo、Kling、Seedance、Wan 等多个 AI 视频生成模型
???? 核心五步工作流(详见 components/operate.tsx)
应用的核心交互组件 AIFunction(位于 components/operate.tsx,约 10,289 行)实现了一套完整的「五步串行 + 可中断可恢复」AI 视频生成流水线。
整体流程
┌─────────────────────────────────────────────┐
│ 步骤1:AI 剧情生成 (script) │
│ /api/ai/generate-story-details │
└─────────────────────────────────────────────┘
↓
┌─────────────────────────────────────────────┐
│ 步骤2:主角生成 (character) [并行] │
│ /api/ai/generate-character-image │
└─────────────────────────────────────────────┘
↓
┌─────────────────────────────────────────────┐
│ 步骤3:分镜图生成 (storyboard) [并行] │
│ /api/ai/generate-storyboard-image │
└─────────────────────────────────────────────┘
↓
┌─────────────────────────────────────────────┐
│ 步骤4:剧情视频生成 (scenes) [并行] │
│ /api/ai/generate-story-video │
└─────────────────────────────────────────────┘
↓
┌─────────────────────────────────────────────┐
│ 步骤5:完整视频合成 (video) │
│ /api/ai/fal/compose-story-video │
└─────────────────────────────────────────────┘
步骤详解
步骤 1:AI 剧情生成
- 输入:用户提示词、时长、比例、视频风格、视频模型、参考图
- 调
generate-story-details生成结构化 JSON:标题、场景列表、角色列表(含主角描写与分镜/视频提示词) - 内置分段时长规则:根据
videoModel决定每段时长(Veo 固定 8s;Seedance 2.5 支持 4-30s;Seedance 2.0 系列 4-15s;Wan 2-15s 等) - 解析时使用
tryParsePossiblyMalformedJson兼容 LLM 输出的非严格 JSON
步骤 2:主角生成(并行)
- 对
scriptData.characters中每个角色调用generateCharacterForSingle - 支持图生图:如果用户上传了角色参考图,会作为
referenceImage传入 - 错误处理:积分不足、其他 API 错误、JSON 解析失败均有独立分支
- 实时状态:每个完成的主角立即更新到 UI(带失败覆盖层)
步骤 3:分镜图生成(并行)
- 调用
generateStoryboardForScene,对每个场景并行生成 - 智能角色筛选:只把该场景
characterIds引用的角色图片传给分镜图生成 - 首尾帧模式(
generationMode === 'first-last-frame'):同时生成首帧和尾帧,使用firstFramePrompt/lastFramePrompt - 支持
regenerateFrameType单帧重生成(仅重新生成首帧或尾帧)
步骤 4:剧情视频生成(并行)
- 调用
generateSceneVideoForScene,基于分镜图生成每个场景的视频 - 传递参数:
aspectRatio、duration、videoStyle、videoModel - 多模态参考:上传的视频/音频会作为
videoUrls/audioUrls传入(仅 Seedance 模型支持) - 首尾帧模式下,尾帧图作为
additionalImageUrls传入 - 实时更新:每完成一段视频立即显示
步骤 5:完整视频合成
- 调用
composeSceneVideosWithFAL,使用 FAL AI 把所有剧情视频拼接为完整视频 - 计算每段视频的
keyframes(视频轨 + 音频轨)并合并 - 完整视频含总时长、缩略图、宽高比、文件大小
关键状态机
type WorkflowStep = 'idle' | 'script' | 'character' | 'storyboard' | 'scenes' | 'video'
每个步骤都有三种 UI 状态:当前(橙色高亮 + Loader)、已完成(绿色 ✓)、待开始(灰色)。
可中断 & 可恢复
工作流支持在任意步骤暂停和恢复:
- 暂停:积分不足时自动暂停,弹出购买弹窗;用户也可手动暂停
- 正在执行的 Pusher 任务:暂停时先等待所有进行中的异步任务完成(最多 60s),再调用
abortController.abort()取消新请求 - 恢复:从中断的步骤继续(
resumeWorkflow按workflowStep分发),不丢失已有数据 - 项目恢复:通过
resumeProjectId+resumeVersionId加载历史项目,按完成度自动跳转到下一步
版本组管理(versionGroupId)
每次重新生成(剧情/主角/分镜图/剧情视频/视频)都会生成新的 versionGroupId,用于:
- 关联同一批次的所有重新生成任务
- 数据库版本追踪
- 历史版本回溯(原版本不会被覆盖)
参数面板
UI 面板提供完整的生成参数控制:
| 参数 | 选项 |
|---|---|
| 视频模型 | auto / veo31Lite / veo31Fast / veo31Quality / geminiOmni / seedance25 / seedance2Fast / seedance2Mini / seedance2 / kling3 / happyHorse / wan27 / minimaxH3 |
| 生成模式 | auto(普通)/ first-last-frame(首尾帧) |
| 画面比例 | 16:9 / 9:16 |
| 时长 | auto / 15s / 30s / 60s |
| 视频风格 | auto / anime / hollywood / ads |
媒体兼容性自动锁定:当用户上传了视频/音频时,自动锁定为 Seedance 模型(seedance2 / seedance2Fast / seedance2Mini / seedance25),其他模型被禁用。
媒体校验(validateSeedanceMedia)
上传视频/音频后,自动调用 probeMediaUrl 探测元数据并校验:
- 视频/音频数量 ≤
SEEDANCE_LIMITS.video.maxCount/audio.maxCount - 总时长 ≤
maxTotalDuration - 单个文件格式/尺寸符合 Seedance 限制
单个元素重新生成
工作流运行后,用户可针对每个元素重新生成:
| 操作 | 触发 | 流程 |
|---|---|---|
| 重新生成剧情 | 步骤1按钮 | 完整 5 步重跑 |
| 重新生成主角 | 步骤2按钮 | 单主角 → 找出受影响场景 → 重生成分镜+剧情+总视频 |
| 重新生成分镜图 | 步骤3按钮 | 单分镜 → 对应剧情视频 → 总视频 |
| 重新生成首/尾帧 | 步骤3首尾帧按钮 | 单帧 → 对应剧情视频 → 总视频 |
| 重新生成剧情视频 | 步骤4按钮 | 单视频 → 总视频 |
| 重新生成完整视频 | 步骤5按钮 | 仅合成步骤 |
实时状态更新
每完成一个元素立即更新 UI:
- 正在生成:半透明黑色蒙层 + Loader2 转圈
- 生成失败:红色蒙层 + 错误信息
- 生成成功:图片/视频立即显示
???? 项目管理
Magiviz 提供完整的项目生命周期管理体系,覆盖从创作、保存、版本追溯到成果导出的全部环节。
项目列表(/projects)
- 统一列表:集中展示用户的所有项目,支持缩略图预览、标题、状态、创建时间、进度百分比
- 状态标签:
已完成(绿色 badge)/进行中(灰色 badge)一目了然 - 进度可视化:每个项目显示当前步骤(剧情/主角/分镜图/剧情视频/完整视频)的完成百分比
- 快速操作:列表项支持继续生成、查看详情、删除等快捷操作
- 过滤与搜索:按状态、模型、风格筛选,按关键词搜索项目标题
项目详情页(/projects/[id],由 components/project-detail.tsx 实现)
详情页是一个多 Tab 复合视图,包括:
| Tab | 内容 |
|---|---|
| 概览(Overview) | 项目元信息(比例/时长/风格/模型/生成模式/状态/当前步骤)+ 最终视频播放器 |
| 剧情(Script) | 剧情标题、描述、每个场景的标题与文字描述,支持下载 JSON |
| 角色(Characters) | 主角列表,头像、名字、描述、角色标签,支持查看/下载/重新生成 |
| 分镜图(Storyboards) | 各场景分镜图,首尾帧模式可左右切换预览 |
| 剧情视频(Scene Videos) | 每个场景的剧情视频播放器 |
| 完整视频(Final) | 最终合成视频(含缩略图、时长、文件大小) |
| 历史版本(History) | 所有版本时间线,支持查看/编辑/继续生成 |
五步进度跟踪
详情页顶部展示五步进度条,每个步骤对应不同图标:
???? 剧情 → ???? 主角 → ????️ 分镜图 → ???? 剧情视频 → ✨ 完整视频
- 完成步骤:绿色 + 主色填充
- 当前步骤:高亮主色
- 待开始:灰色
进度数据由 useProject Hook 提供,进度百分比通过 getProgressPercentage 计算。
元信息记录
每个项目自动保存完整的生成参数,便于回溯与复现:
| 字段 | 说明 |
|---|---|
originalPrompt |
用户原始提示词 |
aspectRatio |
画面比例(16:9 / 9:16) |
duration |
视频总时长(auto / 15s / 30s / 60s) |
videoStyle |
视频风格(auto / anime / hollywood / ads) |
videoModel |
视频模型(auto / veo31Fast / seedance2 / kling3 等 12 种) |
generationMode |
生成模式(auto / first-last-frame) |
currentStep |
当前所处步骤 |
status |
项目状态(completed / in_progress) |
createdAt / completedAt |
创建时间 / 完成时间 |
versionGroupId |
当前激活版本组 ID |
version |
当前激活版本号 |
版本管理(versionGroupId + version)
Magiviz 实现了一套双层版本控制:
versionGroupId:每次「重新生成」(剧情/主角/分镜图/剧情视频/总视频)会生成新的versionGroupId,把同一批次的所有重新生成任务关联起来version:每个版本组内的具体版本号(自增整数),用于版本时间线展示
| 操作 | versionGroupId | version |
|---|---|---|
| 首次创建项目 | 初始 vgId | 1 |
| 重新生成剧情 | 新 vgId | 自增 |
| 单分镜图重生 | 新 vgId | 自增 |
| 继续生成(未完成项目) | 复用原 vgId | 保持 |
历史版本时间线(History Tab)
详情页的「历史版本」Tab 提供:
- 完整版本列表:显示版本号(v1、v2...)、创建时间、修改时间、是否当前查看
- 版本查看:点击
查看按钮切换前端展示的数据(仅前端状态,不改变真实激活版本) - 版本继续生成:未完成版本显示
继续生成按钮 - 版本编辑:已完成版本显示
编辑按钮,可跳转到创作页面 - 状态标识:高亮当前正在查看的版本
项目恢复(Resume Project)
当用户从项目列表点击未完成项目时:
- 详情页会展示项目状态和当前进度
- 点击
继续生成跳转到/create?projectId=xxx&versionId=yyy AIFunction组件通过resumeProjectId+resumeVersionIdprops 接收参数restoreProjectData调用/api/projects/:id和/api/projects/:id/data?version=:versionId恢复全部数据useEffect根据完成度自动跳转到对应步骤:
缺主角图 → 跳到步骤 2(character)
缺分镜图 → 跳到步骤 3(storyboard)
缺剧情视频 → 跳到步骤 4(scenes)
缺完整视频 → 跳到步骤 5(video)
全部完成 → 显示「全部完成」提示
项目数据存储结构
每个项目版本在数据库中保存完整的生成结果:
{
id: string, // 版本 ID
projectId: string, // 所属项目
version: number, // 版本号
versionGroupId: string, // 版本组 ID
// 步骤 1:剧情
scriptTitle: string,
scriptDescription: string,
scriptScenes: Scene[], // 场景列表
// 步骤 2:主角
characterData: Character[], // 角色列表(含 imageUrl)
// 步骤 3:分镜图
storyboardData: Storyboard[], // 分镜图列表(含 imageUrl、firstFrameUrl、lastFrameUrl)
// 步骤 4:剧情视频
sceneVideoData: SceneVideo[], // 剧情视频列表(含 videoUrl)
// 步骤 5:完整视频
finalVideoUrl: string,
finalVideoThumbnail: string,
finalVideoDuration: number,
finalVideoSize: number,
}
素材库(/library)
独立的素材管理模块,集中管理用户上传的所有资源:
- 图片素材:用户上传的参考图、按时间倒序展示、缩略图预览、删除操作
- 视频素材:项目生成的剧情视频片段、最终视频
- 存储空间监控:顶部展示已用/总配额/可用空间进度条(按订阅等级不同)
- 引用追踪:每个素材显示被哪些项目使用
- 上传限额校验:单文件 ≤ 订阅计划限制(Trial 50MB / Pro 100MB / Annual 无限制)
- 存储校验:上传前调用
/api/library/storage预检查剩余空间
一键导出
详情页每个素材都支持一键下载:
- 剧情 JSON:导出完整剧本结构(含 title、description、scenes)
- 主角图:PNG 格式下载,文件名包含角色名
- 分镜图:PNG 格式下载,支持首尾帧
- 剧情视频:MP4 格式下载,文件名包含场景信息
- 完整视频:MP4 格式下载,Kie.ai URL 自动转换为直链
- 下载进度:流式下载带进度反馈,失败时降级为浏览器直链下载
删除与归档
- 项目可一键删除(带确认弹窗)
- 删除会同时清理关联的所有素材数据
- 数据库层面使用级联删除保证一致性
???? 支付与积分系统
- 订阅计划:Trial(试用)、Pro(月付)、Annual(年付)三种方案
- 积分购买:灵活的积分充值系统,按量付费
- 积分折扣:订阅用户享受 67 折积分消耗优惠
- 消费记录:详细的积分使用历史和消费明细
???? 推荐与分销
- 推荐计划:通过推荐链接邀请好友,获得积分奖励
- 分销系统:加入推广计划,通过推广获得收益
- 提现功能:佣金可随时提现至账户
???? 用户系统
- 多种登录方式:邮箱密码、Google OAuth、GitHub OAuth
- 邮箱验证:注册验证、密码重置
- 个人资料:用户信息管理、账户安全设置
- 订阅管理:查看订阅状态、管理计费
????️ 管理员后台
- 用户管理:查看和管理所有用户、积分调整
- 订阅统计:订阅数据分析、收入报表
- 分销管理:推广订单、佣金结算
- 邮件订阅:Newsletter 管理
???? 国际化
- 多语言支持:中文、英文,可轻松扩展
- 本地化:完整的 UI 翻译和日期格式化
- 多语言 SEO:多语言 URL 和元数据优化
技术栈
前端
- Next.js 15 - React 全栈框架
- TypeScript - 类型安全
- Tailwind CSS - 原子化 CSS 框架
- Radix UI - 无障碍组件库
- next-intl - 国际化解决方案
- Framer Motion - 动画效果
- React Hook Form + Zod - 表单管理与验证
后端
- Next.js API Routes - 服务端 API
- NextAuth.js - 身份认证
- Drizzle ORM - 数据库 ORM
- PostgreSQL - 关系型数据库
- Stripe - 支付处理
- Resend - 邮件服务
- Pusher - 实时推送
AI 服务
- Kie.ai - 集成多个视频生成模型
- ZenMux - AI 剧情生成
快速开始
环境要求
- Node.js 18+
- PostgreSQL 数据库
- Stripe 账户
- Kie.ai API Key
1. 克隆项目
git clone <https://github.com/ItusiAI/Open-Magiviz> cd Magiviz
2. 安装依赖
npm install
3. 配置环境变量
复制 .env.example 到 .env.local 并配置以下环境变量:
# 数据库 DATABASE_URL="postgresql://..." # NextAuth NEXTAUTH_URL="http://localhost:3000" NEXTAUTH_SECRET="your-secret-key" # Stripe STRIPE_SECRET_KEY="sk_..." NEXT_PUBLIC_STRIPE_PUBLISHABLE_KEY="pk_..." STRIPE_WEBHOOK_SECRET="whsec_..." # AI 服务 KIE_API_KEY="your-kie-api-key" ZENMUX_API_KEY="your-zenmux-api-key"
4. 数据库设置
npm run db:push
5. 启动开发服务器
npm run dev
访问 http://localhost:3000
项目结构
├── app/
│ ├── [locale]/ # 国际化路由
│ │ ├── page.tsx # 首页
│ │ ├── create/ # 创作页面
│ │ ├── projects/ # 项目列表
│ │ ├── library/ # 素材库
│ │ ├── pricing/ # 价格页面
│ │ ├── profile/ # 个人资料
│ │ ├── auth/ # 认证页面
│ │ └── admin/ # 管理后台
│ └── api/
│ ├── ai/ # AI 相关 API
│ │ ├── generate-story-details/ # 剧情生成
│ │ ├── generate-story-video/ # 视频生成
│ │ └── ...
│ ├── stripe/ # 支付 API
│ ├── admin/ # 管理 API
│ └── auth/ # 认证 API
├── components/
│ ├── operate.tsx # 核心创作组件
│ ├── project-detail.tsx # 项目详情
│ ├── sidebar.tsx # 侧边栏
│ ├── ui/ # UI 组件库
│ └── ...
├── lib/
│ ├── auth.ts # 认证配置
│ ├── db.ts # 数据库连接
│ ├── schema.ts # 数据模型
│ ├── stripe.ts # Stripe 配置
│ └── ...
├── messages/
│ ├── en.json # 英文翻译
│ └── zh.json # 中文翻译
└── public/ # 静态资源
商业模式
订阅计划
| 方案 | 价格 | 积分赠送 | 积分折扣 | 上传大小 | 存储空间 |
|---|---|---|---|---|---|
| Trial | $19.9 | 200 | 67折 | 50MB | 50GB |
| Pro | $49.9/月 | 550 | 67折 | 100MB | 100GB |
| Annual | $499/年 | 6600 | 67折 | 无限制 | 无限制 |
积分套餐
| 套餐 | 积分 | 价格 |
|---|---|---|
| Starter | 200 | $20 |
| Popular | 500 | $50 |
| Premium | 1,000 | $98 |
积分消耗示例
| 模型 | 5秒视频 | 10秒视频 | 15秒视频 |
|---|---|---|---|
| Veo 3.1 Fast | 10 | 20 | 30 |
| Veo 3.1 Lite | 5 | 10 | 15 |
| Veo 3.1 Quality | 15 | 30 | 45 |
| Seedance 2.0 Fast | 10 | 20 | 30 |
| Seedance 2.0 Mini | 7.5 | 15 | 22.5 |
| Seedance 2.0 | 15 | 30 | 45 |
| Kling 3.0 | 10 | 20 | 30 |
| Wan 2.7 | 10 | 20 | 30 |
| HappyHorse | 10 | 20 | 30 |
| Gemini Omni | 5 | 10 | 15 |
| MiniMax H3 | 12.5 | 25 | 37.5 |
API 接口
剧情生成
POST /api/ai/generate-story-details
{
prompt: string, // 故事大纲
duration?: number, // 时长
aspectRatio?: string, // 画面比例
videoStyle?: string, // 视频风格
videoModel?: string, // 视频模型
userImages?: string[] // 参考图片
}
视频生成
POST /api/ai/generate-story-video
{
imageUrl?: string, // 分镜图 URL
prompt: string, // 视频提示词
aspectRatio?: string, // 画面比例
duration?: string, // 视频时长
videoModel?: string, // 视频模型
videoStyle?: string, // 视频风格
additionalImageUrls?: string[], // 额外图片(尾帧等)
generationType?: string, // 生成模式(仅 Veo)
videoUrls?: string[], // 参考视频(仅 Seedance)
audioUrls?: string[] // 参考音频(仅 Seedance)
}
部署指南
Vercel 部署(推荐)
- Fork 本项目到 GitHub
- 在 Vercel 中导入项目
- 配置环境变量
- 部署完成
环境变量清单
# 数据库 DATABASE_URL # NextAuth NEXTAUTH_URL NEXTAUTH_SECRET # Stripe STRIPE_SECRET_KEY NEXT_PUBLIC_STRIPE_PUBLISHABLE_KEY STRIPE_WEBHOOK_SECRET STRIPE_TRIAL_PRICE_ID STRIPE_PRO_PRICE_ID STRIPE_ANNUAL_PRICE_ID STRIPE_POINTS_* # OAuth GOOGLE_CLIENT_ID GOOGLE_CLIENT_SECRET GITHUB_ID GITHUB_SECRET # AI 服务 KIE_API_KEY KIE_VEO_WEBHOOK_URL KIE_VIDEO_WEBHOOK_URL ZENMUX_API_KEY # 邮件服务 RESEND_API_KEY RESEND_FROM_EMAIL # 应用 NEXT_PUBLIC_APP_URL
安全特性
- 数据加密:密码 bcrypt 加密
- 会话管理:JWT 令牌和安全会话
- CSRF 保护:内置 CSRF 防护
- 输入验证:Zod 数据验证
- 环境隔离:敏感配置环境变量管理
SEO 优化
- 多语言 SEO 元数据
- 自动生成 sitemap.xml
- JSON-LD 结构化数据
- Open Graph 社交分享优化
- 图片自动优化
让每个人都能成为影视创作者
延伸阅读
Magiviz

