积分系统
了解和配置 VideoFly 的核心积分逻辑
VideoFly 采用灵活的积分(Credits)系统来管理 AI 视频生成的消耗。这不仅能控制成本,还能为用户提供清晰的价值感知。
所有的积分配置都集中在 src/config/credits.ts 文件中,您可以轻松修改。
1. 积分基本概念
在系统中,积分为整数。通常我们将 1 积分 定价为 1 美分 (0.01 USD) 的价值锚点,但这完全取决于您的定价策略。
- 获取积分: 用户通过注册赠送、订阅每月发放、或一次性购买获取。
- 消耗积分: 生成视频时,根据模型类型、时长、画质扣除相应积分。
2. 修改新用户赠送
想在用户注册时赠送更多免费积分以吸引用户?
打开 src/config/credits.ts,找到 registerGift 配置块:
您也可以通过环境变量来控制,而无需修改代码:
3. 调整模型消耗 (定价)
不同的 AI 模型成本不同。您可以为每个模型单独设置积分消耗规则。
在 models 配置块中:
示例计算:
如果 sora-2 的 base 是 10(对应 10秒视频),perExtraSecond 是 2。
生成一个 15秒 的视频,消耗 = 10 + (15-10) * 2 = 20 积分。
4. 自定义积分包
您可以在 subscriptions(订阅)和 packages(一次性购买)中定义自己的销售套餐。
5. 积分管理脚本
项目提供了三个命令行工具,用于管理员进行积分操作:
5.1 赠送积分
给指定用户账户增加积分:
参数:
| 参数 | 说明 | 示例 |
|---|---|---|
email | 用户邮箱地址 | user@example.com |
credits | 赠送积分数(正整数) | 100 |
reason | 可选,赠送理由/备注 | "活动奖励" |
使用示例:
执行结果:
- 创建新的积分包(类型:
SYSTEM_ADJUST) - 记录积分交易流水
- 积分有效期:365 天
- ⚠️ 操作不可逆
5.2 查询用户积分
查看指定用户的积分详情和交易历史:
使用示例:
输出信息包括:
- 👤 用户基本信息(ID、是否管理员、注册时间)
- 📦 所有积分包详情(初始、剩余、冻结、状态、过期时间)
- 📊 积分统计汇总(总额、已用、冻结、可用)
- 📜 最近 10 条交易记录
5.3 重置用户积分
清空指定用户的所有积分(危险操作,请谨慎使用):
参数:
| 参数 | 说明 |
|---|---|
email | 用户邮箱地址 |
--confirm | 必须添加此确认标志才会执行 |
使用示例:
⚠️ 警告:
- 此操作不可逆
- 会删除用户所有积分包
- 会删除用户所有积分交易记录
- 用户积分将变为 0
使用场景:
- 测试账户清理
- 用户账户异常处理
- 数据迁移准备
5.4 环境配置
所有脚本会自动加载 .env.local 文件中的数据库配置。确保你的 .env.local 文件包含正确的数据库连接信息:
6. 常见问题
Q: 积分会过期吗? A: 是的。默认情况下:
- 订阅赠送的积分有效期为 30天(随订阅周期刷新)。
- 一次性购买的积分有效期默认为 365天。
这可以在
CREDITS_CONFIG.expiration中修改。
Q: 如何给特定用户手动充值?
A: 使用管理脚本 pnpm script:add-credits user@example.com 100 "理由"。详见上方"积分管理脚本"章节。
Q: 如何快速查询用户积分详情?
A: 使用查询脚本 pnpm script:check-credits user@example.com,会显示完整的积分信息和交易历史。
Q: 管理脚本执行失败?
A: 确保 .env.local 文件中已配置正确的数据库连接信息(DATABASE_URL 或 POSTGRES_URL)。