通过邀请链接:https://agentearth.ai/r/GQvDHBSU 注册可获得5000积分(官方活动,先到先得),目前可生成10个720P seedance2视频
如果需要首尾帧/参考图/图生图,则需要自己注册七牛云/缤纷云存储。
都有一定的免费空间及流量,基本都够用
七牛/缤纷云配置参考:https://gmev6z07ix.feishu.cn/wiki/WZv1w4igziY0jkkddIscvusNnOb?from=from_copylink
Mova 是一个纯客户端的 Flutter 创作应用,面向“图像生成、视频生成、素材管理、任务追踪”这一整条工作流。
目前项目已经打通了:
- 图片生成工作流
- Seedance2 生视频工作流
- 本地视频剪辑、转场、BGM 与合成导出工作流
- 素材上传、管理、分类、分组、引用与回收
- 本地任务记录、结果追踪、失败重试与结果回看
这个项目的定位不是一个重后端平台,而是一个把密钥、工具参数、素材、任务状态都尽量收在本地侧的创作客户端。
-
纯客户端架构 所有配置都在本地维护,适合个人工作流、内部小范围使用或快速原型验证,不依赖自建中台即可开始使用。
-
一套界面串起图片和视频创作 当前应用同时覆盖图片生成与视频生成,两类任务共用素材库、任务队列、结果回看与导入逻辑。
-
面向 Seedance2 的多模式视频工作流 已支持文本生视频、首帧图生视频、首尾帧图生视频、参考素材生成等模式。
-
面向图片生成的独立任务流 图片任务与视频任务拆分管理,支持结果列表、状态追踪、失败重试、入库回流等能力。
-
素材库不是“附件列表”,而是可复用工作区 支持图片、视频、音频素材管理,支持分类、重命名、筛选、同任务结果折叠、紧凑/舒适视图、预览、复制引用链接、删除、保存、回流创作等操作。
-
视频截帧直接接进创作流程 可以从本地视频、云端素材或历史任务结果里截帧,并把截出的画面重新作为素材或创作输入继续使用。
-
本地视频剪辑接入素材工作流 可以从本地文件、素材库或任务结果选择视频片段,裁剪起止时间、调整顺序、设置转场、BGM、输出比例、分辨率、帧率和码率,并将合成结果保存到本地或重新导入素材库继续复用。
-
大素材列表做了性能优化 图片缩略图使用缓存加载,视频素材会抽取首帧并做本地缓存;下载进度也做了节流,降低素材库滚动和批量下载时的卡顿。
-
提交前可预览工具和参数 在真正发起任务前,可以先查看要提交给上游工具的参数结构,减少误触发和误扣费。
-
私有素材链接按素材来源处理 七牛私有空间支持预览和下载签名,素材会记录上传时的存储域名,切换空间后旧素材仍会优先使用自己的原始域名。
-
本地保存最近状态 设置、素材、任务、分类、剪辑草稿和最近使用记录会保存在本地,方便持续迭代使用。
项目当前通过 AgentEarth 做工具发现与执行入口,用于衔接上游图片生成与视频生成能力。
这里需要特别说明:
- 这里提到 AgentEarth,只是说明当前项目“已经接入并验证可用”
- 这不是推荐、背书或投资建议
- 你在购买、开通、充值、调用任何第三方服务前,请自行甄别其稳定性、合规性、计费规则和风险
当前视频生成工作流基于 Seedance2 系列能力,已经在应用中接入了多种常见模式:
- 文本生视频
- 首帧图生视频
- 首尾帧图生视频
- 参考图 / 参考视频 / 参考音频生成
同样说明一下:
- 当前使用 Seedance2,是因为它适合现阶段这条工作流
- 这不是对任何上游模型或服务商的推荐
- 具体服务质量、价格、可用性与合规性,请自行评估
当前项目已对接两种素材存储方案:
-
七牛云 文档参考:七牛云对象存储
-
缤纷云 Bitiful S4 文档参考:Bitiful S4 简介
选择它们的原因主要是:
- 接起来相对直接
- 适合素材上传、回显、引用和下载
- 方便当前这类客户端工作流快速落地
但这仍然不是推荐结论,只是“目前用起来比较方便”的现实选择。购买、开通或长期使用前,请务必自行甄别:
- 服务可用性
- 价格与计费方式
- 流量 / 存储 / 出网成本
- 鉴权方式
- 数据安全与合规要求
如果你手里有更稳定、成本更合适、接入体验更好的 Seedance 渠道,或者更顺手的云存储 / 对象存储方案,也欢迎推荐给我后续对接。项目当前并不绑定特定供应商,后面会继续根据实际可用性、接入成本和使用体验做迭代。
这个项目是纯客户端应用,当前 API Key、存储密钥和相关配置主要保存在本地。
这意味着它更适合:
- 个人自用
- 内部小规模试验
- 原型验证
- 对部署成本敏感、先跑通工作流的场景
但也意味着你必须注意以下风险:
- 不要把生产级高权限密钥直接发给不可信用户使用
- 不要把 Access Key / Secret Key / API Key 明文传播到公共群、公开仓库或截图里
- 如果是多人分发安装包,请默认视为“客户端配置有被提取风险”
- 尽量使用权限更小、可轮换、可撤销的密钥
- 对存储桶、回源域名、私有读写策略、跨域和签名过期时间做额外约束
如果后续准备面向更广范围分发,建议进一步演进为:
- 将高敏感凭据下沉到服务端
- 由服务端签发短时上传 / 下载凭证
- 对调用频率、用户身份和资源访问做更细的控制
- 文本生视频
- 首帧图生视频
- 首尾帧图生视频
- 参考素材生成视频
- 图片生成
- Prompt 中插入素材占位符
- 提交前查看工具与请求参数预览
- 本地视频 / 素材库视频 / 任务结果视频加入剪辑
- 片段裁剪、排序、删除
- 淡入淡出、交叉溶解、黑场、白闪等转场设置
- 原声保留、静音、混合 BGM、仅 BGM 等音频模式
- 本地音频 / 素材库音频作为 BGM
- 输出分辨率、比例、帧率、码率和文件名设置
- 合成导出、保存到相册 / 文件、导入素材库
- 图片 / 视频 / 音频上传
- 七牛云 / Bitiful S4 上传
- 素材分类管理、分类筛选与搜索
- 舒适 / 紧凑两种素材视图
- 同一图片任务生成的多张素材折叠成任务组
- 素材重命名
- 预览图片、视频和音频
- 图片缩略图缓存、视频首帧抽取与缓存
- 视频素材下载到本地后截帧
- 删除本地素材记录
- 可选同时删除云端对象
- 七牛私有空间预览 / 下载签名
- 历史素材自动回填任务归属和原始存储域名
- 图片任务与视频任务分开管理
- 查看任务状态、日志、异常与结果
- 手动刷新
- 失败重试
- 暂停 / 恢复轮询
- 下载结果并显示下载进度
- 结果导回素材库
- 图片任务多结果跟踪、失败项重试和入库回流
- AgentEarth 接口地址与 API Key
- 七牛云配置
- Bitiful S4 配置
- 当前存储提供商切换
- 七牛 Bucket / 域名拉取
- 测试 AgentEarth、七牛云和 Bitiful S4 连接
- 自动轮询、自动下载和图片自动回退开关
- 本地数据导出
这个项目比较适合:
- 想快速搭一个本地可运行的 AI 创作客户端
- 需要把图片、视频、素材、任务统一管理
- 希望先验证工作流,而不是先建设完整后端
- 希望在自己的设备上直接配置和测试多家上游能力
如果你的目标是:
- 面向大量终端用户发布
- 做严格的多用户权限隔离
- 在服务端统一托管密钥与审计
- 做正式生产级结算与风控
那就建议在这个客户端基础上继续补后端能力,而不是长期停留在“纯客户端持有密钥”的模式。
项目基于 Flutter。
已知当前版本:
- App version:
1.0.6+2007 - Android application id:
com.jbrains.mova - iOS bundle id:
com.jbrains.mova
如果你的环境里没有把 Flutter 放进 PATH,请先使用 Flutter 可执行文件的绝对路径。
flutter pub get
flutter run本机最近一次确认可用的 Flutter 路径是:
/Users/jbrains/dev/flutter-sdk/bin/flutter如果 flutter 不在 PATH,可以改用:
/Users/jbrains/dev/flutter-sdk/bin/flutter pub get
/Users/jbrains/dev/flutter-sdk/bin/flutter runAndroid release APK:
flutter build apk --release --split-per-abi只打 ARM64 v8a:
flutter build apk --release --split-per-abi --target-platform android-arm64iOS 无签名构建:
flutter build ios --no-codesign当前项目支持两种 Android release 构建方式:
-
未配置正式签名时: 会回退为 debug 签名,适合本地临时打包测试
-
配置正式签名后: 本地构建和 GitHub Actions 都可以使用同一份 release keystore,保证安装包签名一致
- 把你的 keystore 文件放到
android/目录,例如:
android/release.keystore- 复制示例文件:
cp android/key.properties.example android/key.properties- 按实际内容修改
android/key.properties:
storePassword=你的 keystore 密码
keyPassword=你的 key 密码
keyAlias=你的 alias
storeFile=release.keystore说明:
android/key.propertiesandroid/*.jksandroid/*.keystore
- 这个项目的剪辑页视频预览依赖
video_player_android的原生通道 - 之前曾出现过一个只在 release 包里复现的问题:R8 压缩后,
dev.flutter.pigeon.video_player...通道注册失败,debug 正常但 release 无法播放 - 目前
android/app/build.gradle.kts的 release 已显式关闭isMinifyEnabled和isShrinkResources - 如果以后要重新打开 R8,必须先补齐 keep 规则并在真机 release 包上验证剪辑页视频播放
- 只看
flutter run的结果不够,release 包要单独装到 Android 真机确认一次
这些文件默认已加入 .gitignore,不要提交到仓库。
如果希望 GitHub 构建出的 Android 包和本地签名一致,请在 GitHub Secrets 中配置同一份 keystore:
-
ANDROID_KEYSTORE_BASE64你的.jks或.keystore文件做 base64 后的内容 -
ANDROID_KEYSTORE_PASSWORDkeystore 密码 -
ANDROID_KEY_ALIASkey alias -
ANDROID_KEY_PASSWORDkey 密码
这样 GitHub Actions 会在构建时自动生成 android/key.properties 和 android/release.keystore,并使用 release 签名。
如果没有配置这些 Secrets,GitHub 仍然可以构建,但会回退到 debug 签名,因此和你本地正式签名包不会一致。
本项目 README 中提到的 AgentEarth.ai、Seedance2、七牛云、缤纷云(Bitiful S4)仅用于说明“当前项目已接入的服务”与“当前验证过可工作的组合”。
这不构成任何推荐、背书、采购建议或安全承诺。请你在接入、购买、充值或生产使用任何第三方服务前,自行甄别并承担相应决策责任。
同时,也欢迎提供更好的 Seedance 接入渠道或云存储服务建议,后续可以继续评估并补充对接。