04e467e433
后端: - 微信回调 db.commit 失败仍返回 SUCCESS,避免无限重试 - recharge() 加 order_id 幂等保护,防重复充值 - time_expire 使用北京时间(UTC+8),修复时区 bug - 充值档位后端配置化(points-config.yaml + /recharge-options API) - 代码审查 20 项修复(认证加固、扣费顺序、错误响应、状态同步等) 前端: - 充值弹窗:自动轮询 + 【我已支付】手动兜底 - 二维码倒计时显示,过期后遮罩 + 刷新按钮 - 充值档位从后端动态加载 - 去掉 select/qrcode 弹窗标题,金额红色突出显示 - 全项目命名统一(视频生成/压制成片/配音合成/声音复刻等) - Modal 关闭按钮独立于 title 显示
93 lines
4.2 KiB
YAML
93 lines
4.2 KiB
YAML
# 积分计费配置
|
||
# =============
|
||
# 修改此文件即可调整各业务积分价格,无需改动代码。重启服务后生效。
|
||
#
|
||
# 配置结构说明:
|
||
# - fixed_costs: 固定积分业务(与使用量无关)
|
||
# - duration_based_costs: 按秒计费业务(根据产出内容的实际/预估时长计算)
|
||
# - free_services: 不扣积分的业务(黑名单)
|
||
|
||
|
||
# ── 固定积分业务 ──────────────────────────────────────
|
||
# 计费公式:消耗积分 = points(与输入输出量无关)
|
||
fixed_costs:
|
||
# 脚本生成:根据用户输入的装修需求,AI 生成视频脚本文案
|
||
script: 5
|
||
|
||
# 润色:对已有脚本进行改写、优化、调整语气风格
|
||
polish: 1
|
||
|
||
# 标题生成:根据脚本内容自动生成多个标题建议
|
||
title: 1
|
||
|
||
# 声音克隆:录制用户声音样本,训练专属 TTS 音色(一次性高成本操作)
|
||
voice_clone: 200
|
||
|
||
# 字幕烧录:将生成的字幕文件烧录到视频中(FFmpeg 合成)
|
||
subtitle_burn: 2
|
||
|
||
# 封面制作:根据视频内容自动生成封面图
|
||
cover_design: 2
|
||
|
||
# 压制成片:将多个素材片段合并为最终视频(FFmpeg 拼接)
|
||
compose: 5
|
||
|
||
|
||
# ── 按秒计费业务 ──────────────────────────────────────
|
||
# 计费公式见各业务下的注释。共性参数:
|
||
# min_points: 最低扣费积分(即使时长极短也至少扣这个数)
|
||
# estimation: 执行业务前的预估参数(用于余额检查,取保守估计)
|
||
duration_based_costs:
|
||
|
||
# ── TTS(文字转语音)──
|
||
# 计费公式:max(min_points, ceil(实际音频秒数 / divisor))
|
||
# 示例:12秒音频 → ceil(12/5) = 3 积分
|
||
tts:
|
||
divisor: 5 # 每 5 秒为 1 个计费单位
|
||
min_points: 1 # 最短音频也至少扣 1 积分
|
||
|
||
# 预估参数(执行业务前检查余额时使用)
|
||
estimation:
|
||
# 每个中文字符预估时长(秒)。
|
||
# 计算依据:中文正常朗读语速约 200~250 字/分钟,取保守值 200 字/分钟:
|
||
# 60秒 ÷ 200字 = 0.30 秒/字
|
||
# 注意:此为经验值,未经过 Vidu TTS 实测校准。实际时长受标点停顿、
|
||
# 数字/英文混合、TTS 角色风格等因素影响,误差约 ±20%。
|
||
# TODO: 收集实测数据后校准此值。
|
||
seconds_per_char: 0.3
|
||
|
||
# ── 视频生成(对口型)──
|
||
# 计费公式:max(min_points, ceil(实际视频秒数) × multiplier)
|
||
# 说明:秒数先向上取整为整数,再乘以 multiplier。不足 1 秒按 1 秒计算。
|
||
# 示例:4.5秒视频 → ceil(4.5) × 5 = 25 积分;0.8秒 → ceil(0.8) × 5 = 5 积分
|
||
video:
|
||
multiplier: 5 # 每秒视频消耗 5 积分
|
||
min_points: 1 # 最短视频也至少扣 1 积分
|
||
|
||
# 预估参数(执行业务前检查余额时使用)
|
||
estimation:
|
||
# 是否直接使用输入素材秒数作为预估上限。
|
||
# 视频生成时长 = 输入音频/素材时长,因此用 input_seconds 预估最准确。
|
||
# 调用方需传入 input_seconds 参数。
|
||
use_input_seconds: true
|
||
|
||
|
||
# ── 充值档位配置 ──────────────────────────────────────
|
||
# 前端充值弹窗展示的选项,由后端统一控制。
|
||
# 支持积分赠送:points 为实际到账积分数,amount_rmb 为支付金额(分)。
|
||
# label 为空时不显示标签角标。
|
||
recharge_options:
|
||
- { price: 1, points: 100, label: "测试" }
|
||
- { price: 500, points: 100, label: "入门" }
|
||
- { price: 1000, points: 220, label: "热销" }
|
||
- { price: 3000, points: 650, label: "推荐" }
|
||
- { price: 5000, points: 1200, label: "超值" }
|
||
- { price: 10000, points: 2500, label: "尊享" }
|
||
|
||
|
||
# ── 免费业务(不扣积分)───────────────────────────────
|
||
# 以下业务仅提取/处理数据,不产生 AI 生成内容,故不扣积分。
|
||
free_services:
|
||
# 字幕生成:从视频中提取字幕文本(火山引擎字幕识别)
|
||
- caption
|