【免费下载链接】violinOpen-source Video Translation Skill项目地址https://gitcode.com/gh_mirrors/violi/violin点击查看免费下载Violin 是一个开源视频翻译工具能把视频里的语音转录、翻译并用母语级声音重新配音。当你把它的 Web API 部署到公网后安全与权限就成了第一问题如何让新手免费体验、又不烧光服务器自己的 API 额度用户的 API Key 如何不被滥用、不被存储下面基于 Violin 源码逐层拆解 BYOK自带密钥、免费试用配额与限流防护这套体系。一、为什么视频翻译工具必须有安全设计Violin 的流水线每一步都在调用付费 APIWhisper 转录、LLM 翻译、TTS 配音。一次完整翻译的 API 费用按量计费如果不加防护公网部署会在几小时内被刷穿余额。因此 Violin 把谁出钱设计成了两个来源来源说明适用人群服务器密钥部署者配置的环境变量如TOGETHER_API_KEY免费试用用户用户密钥BYOK请求时由用户自己粘贴的 API Key正式/重度用户这套先试用、后自带密钥的模式正是 BYOKBring Your Own Key的核心思想。二、BYOK 自带密钥Key 随请求走服务器不留存1. 三个可选的密钥入口提交翻译任务的POST /jobs接口提供了三个可选表单字段对应三个阶段的供应商together_api_key—— Together AI默认供应商覆盖全部阶段openai_api_key—— 当翻译/转录阶段配置为 OpenAI 时需要elevenlabs_api_key—— 当 TTS 配置为 ElevenLabs 时需要源码位于 api/routes/jobs.py。2. 按任务覆盖用完即弃用户提供的密钥不会写进任何配置文件而是作为*_key_override参数沿 api/worker.py 传入流水线在创建 SDK 客户端时优先于环境变量生效未提供则自动回退到服务器密钥# pipeline/llm_client.py —— 用户密钥优先环境变量兜底 api_key together_key_override or os.environ.get(TOGETHER_API_KEY)这段回退逻辑见 pipeline/llm_client.pyTTS 侧同构实现在 pipeline/tts.py。密钥只存在于当前任务的内存对象中任务结束即释放。3. 前端的安全细节Web 界面 api/static/index.html 对密钥输入做了三重处理输入框为typepassword掩码显示避免旁人窥屏密钥仅保存在浏览器本地localStorage标注通过 HTTPS 发送、服务器不存储检测到 401 /invalid api key等错误时自动清空本地保存的密钥并提示重新输入。三、免费试用配额每个 IP 限次用完转 BYOK1. 按 IP 计数的试用账本api/usage.py 用一个轻量 JSON 文件jobs/_ip_usage.json记录每个 IP 用服务器密钥完成了多少任务读写加线程锁保证并发安全def has_free_trial(ip: str) - bool: FREE_TRIAL_JOBS 0 表示 BYOK-only不提供免费试用 if FREE_TRIAL_JOBS 0: return False return get_usage(ip) FREE_TRIAL_JOBS判断逻辑在 api/usage.py。2. 超限即 403引导用户填 Key提交任务时若未带together_api_key且该 IP 试用已耗尽直接返回 403Free trial used. Please provide your own Together API key to continue.校验代码位于 api/routes/jobs.py。同时提供GET /jobs/trial-status查询接口前端据此显示还剩 N 次免费试用的绿色角标用完自动切换为Required红色提示。3. 配额由一个配置项决定配置项默认值公开演示值含义api.free_trial_jobs01每 IP 免费任务数0 纯 BYOK 模式不提供试用默认与生产取值分别见 config/default.yaml 和 config/prod.yaml。也就是说本地自用默认是纯 BYOK官方演示站则让每个 IP 免费试一次。四、限流与资源防护五道闸门拦住滥用1. 并发限流任务池只留 2~4 个工位后台 worker 用ThreadPoolExecutor限制同时执行的任务数api/worker.pyapi.max_workers默认 4生产环境压到 2每任务内部的 ffmpeg 并发再由merge_video.workers控制。双级限流让 4 vCPU / 8 GB 的小机器也能稳定服务。2. 上传闸门类型、体积、时长三道检查检查项失败响应生产默认值扩展名白名单.mp4 .mov .avi .mkv .webm .m4v415—文件大小413500 MB视频时长ffprobe 实测41330 分钟相关实现见 api/routes/jobs.py 与 config/prod.yaml。时长上限直接封住 API 支出是防刷的关键。3. URL 拉流开关公网默认关闭url_upload控制是否允许粘贴 YouTube 等链接走 yt-dlp 下载。生产配置中设为false——拉流不受上传体积闸门约束公网开放风险高官方演示站直接禁用。4. 429 自动降级低配额 BYOK Key 也能跑完很多个人密钥只有约 1 RPS 的速率而 TTS 阶段默认 8 路并发。Violin 在 pipeline/tts_together.py 做了 429 识别def _is_rate_limit(exc) - bool: if getattr(exc, status_code, None) 429: return True ...被限流的片段自动降级为串行重跑pipeline/tts_together.py任务变慢但不失败——对新手最友好的一点。5. 自动清理磁盘不会越跑越满job_ttl_hours: 24完成/失败超 24 小时的任务目录被定时清理api/app.py崩溃残留的/tmp临时目录每 30 分钟扫描删除 1 小时以上的孤儿目录api/app.py。此外Caddyfile 让 Caddy 自动签发 Lets Encrypt 证书所有密钥传输走 HTTPSCORS_ORIGINS环境变量可收紧跨域来源api/app.py默认*适合本地、建议生产收窄。五、成本统计一眼看清谁在用谁的 Key每个任务完成时都会向 SQLite 写入一条统计记录其中包含关键字段using_own_key1BYOK0消耗服务器密钥以及 Whisper / 翻译 / TTS 三段的美元费用实现见 api/stats.py。运营者凭此即可核对免费试用被用了多少次、BYOK 占比多少费用明细长这样六、核心配置速查表配置项api段默认生产安全作用free_trial_jobs01IP 级免费试用配额0 纯 BYOKmax_workers42并发任务数限流max_file_size_mb0不限500阻止超大上传max_duration_seconds0不限1800封住 API 支出上限url_uploadtruefalse公网禁用 URL 拉流job_ttl_hours0关24任务自动过期清理完整默认值见 config/default.yaml公开部署覆盖项见 config/prod.yaml。写在最后Violin 的安全体系值得新手借鉴它没有引入重型鉴权框架而是用**密钥随请求走 IP 试用账本 多级资源闸门 429 优雅降级**这套轻量组合同时解决了体验、成本与滥用三个问题。想自己动手研究的话可以克隆仓库git clone https://gitcode.com/gh_mirrors/violi/violin对照 config/prod.yaml 里的每行注释你会发现公开部署该防住什么、本地自用可以放开什么。赞分享【免费下载链接】violinOpen-source Video Translation Skill项目地址https://gitcode.com/gh_mirrors/violi/violin点击查看免费下载相关推荐DLSS Swapper 上手指南不换游戏文件也能切换 DLSS 版本DLSS Swapper 上手指南不换游戏文件也能切换 DLSS 版本 刚买的游戏更新后画质变糊了查了一圈才知道游戏内置的还是两年前的 DLSS英伟达的桌面应用Honeydew作业生命周期详解从创建到完成的完整流程Honeydew作业生命周期详解从创建到完成的完整流程 Honeydew是一个基于Elixir/Erlang BEAM虚拟机的高性能分布式作业队列系统。这个强后端Epic Stack 安全机制实战指南从 CSP 到限流与密钥管理的完整防护体系Epic Stack 安全机制实战指南从 CSP 到限流与密钥管理的完整防护体系 本指南以 Epic Stack 仓库中的安全文档 docs/securit后端前端开发工具认证鉴权创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
阅读完成 · 觉得有帮助?