Videofly Docs

积分系统

了解和配置 VideoFly 的核心积分逻辑

VideoFly 采用灵活的积分(Credits)系统来管理 AI 视频生成的消耗。这不仅能控制成本,还能为用户提供清晰的价值感知。

所有的积分配置都集中在 src/config/credits.ts 文件中,您可以轻松修改。

1. 积分基本概念

在系统中,积分为整数。通常我们将 1 积分 定价为 1 美分 (0.01 USD) 的价值锚点,但这完全取决于您的定价策略。

  • 获取积分: 用户通过注册赠送、订阅每月发放、或一次性购买获取。
  • 消耗积分: 生成视频时,根据模型类型、时长、画质扣除相应积分。

2. 修改新用户赠送

想在用户注册时赠送更多免费积分以吸引用户?

打开 src/config/credits.ts,找到 registerGift 配置块:

// src/config/credits.ts
 
export const CREDITS_CONFIG = {
  // ...
  registerGift: {
    // 是否开启赠送
    enabled: true, 
    // 赠送数量(例如改成了 100)
    amount: 50,    
    // 积分有效期(天)
    expireDays: 30, 
  },
  // ...
}

您也可以通过环境变量来控制,而无需修改代码:

# .env.local
CREDIT_NEW_USER_AMOUNT="100"

3. 调整模型消耗 (定价)

不同的 AI 模型成本不同。您可以为每个模型单独设置积分消耗规则。

models 配置块中:

// src/config/credits.ts
 
models: {
  "sora-2": {
    // ...
    creditCost: {
      base: 10,              // 基础消耗:生成一次扣 10 积分
      perExtraSecond: 2,     // 额外时长:每多 1 秒多扣 2 积分
    },
  },
  "veo-3.1": {
    // ...
    creditCost: {
      base: 60,              // 固定消耗 60 积分,不论时长
      perExtraSecond: 0,
    },
  },
}

示例计算: 如果 sora-2base 是 10(对应 10秒视频),perExtraSecond 是 2。 生成一个 15秒 的视频,消耗 = 10 + (15-10) * 2 = 20 积分

4. 自定义积分包

您可以在 subscriptions(订阅)和 packages(一次性购买)中定义自己的销售套餐。

// src/config/credits.ts
 
basic_monthly: {
  id: "prod_sub_basic_monthly", // 对应 Stripe/Creem 产品 ID
  credits: 100,                 // 该套餐包含多少积分
  price: {
    amount: 990,                // 显示价格(美分),即 $9.90
    currency: "USD",
  },
  // ...
}

5. 积分管理脚本

项目提供了三个命令行工具,用于管理员进行积分操作:

5.1 赠送积分

给指定用户账户增加积分:

pnpm script:add-credits <email> <credits> [reason]

参数:

参数说明示例
email用户邮箱地址user@example.com
credits赠送积分数(正整数)100
reason可选,赠送理由/备注"活动奖励"

使用示例:

# 赠送 100 积分
pnpm script:add-credits user@example.com 100
 
# 赠送 500 积分并添加备注
pnpm script:add-credits user@example.com 500 "活动奖励"

执行结果:

  • 创建新的积分包(类型:SYSTEM_ADJUST
  • 记录积分交易流水
  • 积分有效期:365 天
  • ⚠️ 操作不可逆

5.2 查询用户积分

查看指定用户的积分详情和交易历史:

pnpm script:check-credits <email>

使用示例:

pnpm script:check-credits user@example.com

输出信息包括:

  • 👤 用户基本信息(ID、是否管理员、注册时间)
  • 📦 所有积分包详情(初始、剩余、冻结、状态、过期时间)
  • 📊 积分统计汇总(总额、已用、冻结、可用)
  • 📜 最近 10 条交易记录

5.3 重置用户积分

清空指定用户的所有积分(危险操作,请谨慎使用):

pnpm script:reset-credits <email> --confirm

参数:

参数说明
email用户邮箱地址
--confirm必须添加此确认标志才会执行

使用示例:

# 预览(安全模式,不会执行)
pnpm script:reset-credits user@example.com
 
# 确认执行(会删除所有积分包和交易记录)
pnpm script:reset-credits user@example.com --confirm

⚠️ 警告:

  • 此操作不可逆
  • 会删除用户所有积分包
  • 会删除用户所有积分交易记录
  • 用户积分将变为 0

使用场景:

  • 测试账户清理
  • 用户账户异常处理
  • 数据迁移准备

5.4 环境配置

所有脚本会自动加载 .env.local 文件中的数据库配置。确保你的 .env.local 文件包含正确的数据库连接信息:

# .env.local
DATABASE_URL="postgresql://user:password@host:port/database"
# 或
POSTGRES_URL="postgresql://user:password@host:port/database"

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_URLPOSTGRES_URL)。

On this page