把 NVIDIA DGX Spark 变成主播身边的本地 AI 直播运营团队:实时看懂现场、协同多个专长 Agent、把建议交给主播确认,并把直播后的高光变成可复用资产。
SparkLive Studio 面向游戏主播、虚拟主播、聊天/知识主播、直播带货团队以及管理多位主播的 MCN。它不是又一个推流器,也不是把一个通用聊天机器人塞进直播间;它是一个以本地推理为核心的直播控制面,把声音、画面、弹幕、商品事实、OBS 状态和设备健康组织成同一条可追溯的工作流。
SparkLive Studio 的故事很简单:主播把注意力放在观众和内容上,DGX Spark 在本地承担繁重的感知、整理和复盘,Multi-Agent 把每一个建议交给正确的岗位,Policy 和 Audit 让企业敢于把它接进真实流程。这样,直播不再依赖一个人同时记住所有事情,而成为一套可以部署、度量、复制和持续改进的生产系统。
项目版本:1.0.0
运行平台:NVIDIA DGX Spark(GB10,Linux ARM64)+ Windows 11 Qt 主播工作台
许可证:项目自研代码采用 Apache License 2.0;第三方源码、模型权重、字体、音乐、角色与声音素材不因本项目许可证而重新授权,详见 NOTICE 和模型、服务、外部仓库与许可证。
直播行业的难题不是“没有一个能回答问题的 AI”,而是主播在同一秒要表演、看评论、记流程、守合规、盯设备、切场景、记高光,还要在延迟和故障中保持自然。SparkLive Studio 的价值是把这些分散的注意力任务压缩成少数有来源、有时效、可确认的提示,同时不把原始直播内容交给云端 API。
项目的三项核心亮点:
Software/ 的固定权重加载;默认不调用任何云端大模型 API,不运行时下载。128 GB 统一内存让大模型、媒体缓冲和编解码共享一个可治理的内存池,GB10 的 CUDA/NVENC/NVDEC 让本地推理和后期媒体处理可以放在主播团队自己的设备上。ActionProposal,所有 OBS、商品卡、公开内容和文件动作都经过 Policy Gateway -> Tool Registry -> Audit。这样既能并行扩展,也能在一个 Agent 出错时保住直播主链路。| 场景 | 实测结果 | 对直播运营的意义 |
|---|---|---|
| Qwen3.5-27B-FP8(GB10) | 冷启动约 269.68 s;常驻复用约 18.01 s;峰值 CUDA allocated 约 30.9 GB | 适合低频复杂语义、录播复核,不把重模型塞进逐条弹幕热路径 |
| Qwen3.5-9B BF16 弹幕重点 | 冷启动约 93.84 s;warm 96-token 路径约 8.86 s;约 10.84 token/s;峰值约 17.7 GiB | 10 秒窗口异步复核;确定性排序先展示,模型慢或不可用不阻塞主播 |
| 录播切片链路 | 70 秒真实模型录播生成 60 秒、360x640 H.264/AAC 草稿;checkpoint 恢复约 1.60 s | 长任务可暂停、恢复和显示阶段 ETA,适合下播后自动整理 |
| FLUX.2 Klein 4B FP8 重绘 | 256 px 双参考 smoke:冷加载约 78.08 s,四步推理约 1.42 s,峰值约 11.81 GiB | 本地角色/风格化输出可与 OBS 分离,切换同一模型可复用 resident pipeline |
| StreamDiffusionV2 Wan2.1 1.3B | 5 帧初始化、4 帧时序块推进,默认 832x480 / 16 FPS / 2-step | 用有界“保最新帧”队列控制延迟,不让网络抖动形成无界积压 |
| 自动化质量基线 | make test:195 项通过,2 项按 PyAV/环境规则跳过;Console production build 通过 | 代码、契约和前端构建可在断网环境回归 |
公开数据说明了两个事实:观众和商业预算都在增长,而直播现场的“第二注意力”没有被基础推流软件解决。
| 主播类型 | 同时发生的任务 | 传统方式的失误代价 |
|---|---|---|
| 游戏主播 | 操作/解说、队伍语音、弹幕、赞助口播、OBS、掉帧与隐私 | 战斗中漏掉高价值问题;剧透、房间号或桌面通知泄露;高光靠回看手工找 |
| 虚拟主播 | 中之人表演、口型/面捕/模型状态、角色口径、音乐和素材授权 | 追踪丢失、穿模、口型不同步会立即破坏角色体验;身份信息泄露风险更高 |
| 带货主播 | 脚本、商品演示、价格/库存/优惠、FAQ、合规、转化节奏 | 错价、过期券、功效夸大或串品会带来退款、平台处罚和品牌损失 |
| 聊天/知识主播 | 长时间表达、资料核对、重复问题、敏感话题、时间管理 | 主播被重复问题淹没;回答没有事实来源;话题和收尾失控 |
共同痛点是高并发信号、低可用注意力:弹幕速度、平台事件、音画质量和流程时钟同时变化,但主播只能把注意力放在一个画面上。真正有用的 AI 不应再开一个聊天窗口,而应把一百条事件压成“现在最该看哪两件事”。
人工场控很重要,但不是无限扩张的答案:
SparkLive Studio 的定位不是替掉所有人,而是把“监看、整理、提示、记录和可回放的判断”软件化,让一个场控可以服务更多主播,把人的时间留给最终表达、敏感判断和对外确认。
| 产品/项目 | 主要价值 | 适合的场景 | 结构性边界 | SparkLive 的差异 |
|---|---|---|---|---|
| OBS Studio | 免费、可扩展的采集、场景和编码引擎 | 所有主播的基础生产 | 它是导播引擎,不负责弹幕语义、商品事实、多 Agent 协作或审计 | 通过 obs-websocket Adapter 控制 OBS,把事件、策略和复盘放在其上层 |
| Restream | 云端多平台推流、聊天聚合和团队协作 | 多平台分发 | 依赖云端链路和平台账号;跨平台事实、权限和数据留存由服务商决定 | 本地优先、原始媒体不进 Event Bus;平台 Adapter 可替换并保留事实来源 |
| Streamlabs / Streamer.bot | 小组件、告警、宏和事件自动化 | 已有 OBS 工作流的增强 | 强项是规则和 UI 组件,不是本地多模态推理、证据引用和高风险动作治理 | Agent 只出 proposal,L0-L3 策略、人工确认、审计和应急接管统一处理 |
| Eklipse / OpusClip | 云端 AI 高光和短视频生成 | 下播后快速出片 | 需要上传录播;对账号隐私、平台事件、商品事实和本地合规的控制较弱,在线热路径与后期工作流分离 | 录播证据、直播 sidecar、VAD/ASR、Top-K VLM 和 FFmpeg 在 DGX 本地组成一条可恢复链路 |
| NVIDIA Broadcast | 本地降噪、虚拟背景、眼神/画面增强 | 单机音视频增强 | 解决的是媒体效果,不是节目流程、互动排序、商品事实或动作治理 | 将本地视觉/音频能力放入统一 Capture/Perception/Agent 契约 |
| 单体“AI 主播/AI 助手” | 一次调用生成回答或脚本 | 低风险内容草稿 | 大模型拥有过宽权限,延迟、幻觉、成本和云端数据外发难以控制 | Qwen 只接收有界证据,结果必须回到窄职责 Agent;商品价格、库存和公开回复仍受策略控制 |
竞品并非“做得不好”,而是各自优化一个环节。SparkLive 的商业机会在于把这些环节接成本地、可审计、可替换、面向团队规模化运营的一套控制面。
摄像头 / 游戏 / 麦克风 / 弹幕 / 商品目录 / OBS / 设备指标
|
Capture Gateway
|
Perception 结构化事实
|
Event Bus + SQLite 时间线
|
窄职责 Agent 并行分析与排序
|
ActionProposal
|
Policy Gateway -> Tool Registry -> Audit
/ allow | confirm | block
|
OBS / 字幕 / 商品卡 / Clip / Avatar / 系统降级
媒体面和控制面分离:原始音视频走受认证、有界的媒体通道;Event Bus 只传 URI、PTS、帧索引、检测框、文本、分数和证据引用。这样可以让模型和媒体 Worker 更换,而不让业务层、审计表或外部 Agent 接触原始字节。
NVIDIA DGX Spark 官方规格给出的 GB10 平台包含 128 GB coherent unified memory、最高 1 petaFLOP FP4 AI 性能、273 GB/s 带宽、NVENC/NVDEC,并支持本地运行最多约 200B 参数级别的 Agent 工作负载。SparkLive 按直播优先级使用它:
本地化带来三项直接收益:
Software/,推理不按 token、分钟或并发向云服务计费;成本变成可预算的设备折旧、电力和维护。每个 Agent 有 owner、触发事件、证据范围和工具白名单:
| Agent | 解决的现场问题 | 输出 |
|---|---|---|
| 导播 | 流程、场景、字幕、BGM、转场 | OBS/提示 proposal |
| 互动 | 弹幕去重、主题、重复问题、礼物队列 | 主播私有提词,不自动公开发送 |
| 商品 | SKU、价格/库存/优惠/FAQ 的事实引用 | 商品卡或口播建议,外显前确认 |
| 安全合规 | 隐私、版权、骚扰、广告和功效风险 | 隐藏来源、告警和人工升级 |
| 运维 | 掉帧、静音、GPU 温度、编码、模型延迟 | 降级或人工处置建议 |
| 虚拟人 | 表情、口型、动作和角色口径 | 可中断的 avatar cue |
| Clip | 高光打点、证据融合、9:16 计划和 QC | 本地草稿与可审阅计划 |
高风险动作的生命周期是 proposed -> allowed/confirm/blocked -> executed/failed。每次调用保留 correlation_id 和 idempotency_key;策略不可用或审计不可写时,外部状态改变动作自动 fail closed。这个设计把“AI 很聪明”转换成企业能接受的“出了问题知道谁建议、依据什么、是否执行”。
SparkLive 采用 Python 模块化单体:先用清晰契约保证断网演示和单机回放,再按媒体采集、感知、控制面和异步 Worker 拆进程。下面的模块边界对应上面的现场需求。
| 模块 | 技术实现 | 针对的痛点与亮点 |
|---|---|---|
contracts | CloudEvents 风格 JSON envelope;LiveEvent、ActionProposal、PolicyDecision、ToolResult 字段校验 | 让多 Agent、平台和桌面端共享版本化事实;URI/PTS/证据引用隔离原始媒体 |
capture | Windows QAudioSource/QMediaDevices,PCM16 mono 16 kHz;20 ms 自适应能量 VAD、双阈值滞回、前后留白、稀疏 PTS、有限 PUT 队列 | 静音不上传、丢包与 VAD gap 可区分;主播可看到 RMS、说话状态、丢块和 DGX 延迟 |
perception | Whisper 有界重叠窗口产生 interim/final;商品/OCR/跟踪/隐私/高光规范化为结构化事件 | 中间字幕只修订同一 utterance_id,最终句才触发意图和 sidecar,避免重复动作 |
event_bus | 线程安全同步总线、glob 订阅、失败隔离、有限历史;预留 NATS JetStream Adapter | 直播关键事件不因单个订阅者失败而丢失;未来横向扩展不泄漏 NATS 类型 |
memory | SQLite WAL 保存 state、events、pending、audit、clips、clip_jobs | 审计不可写时阻断高风险动作;时间线可回放,商品事实仍由 Connector 持有 |
agents | 七类实时 Agent + PostLiveClipAgent;固定 schema、owner 和证据边界 | 采用岗位分工而非全权限 Agent;模型不可直接生成 Tool 调用 |
live_assistant | 五类 rundown、滚动互动桶、礼物/问题/健康、host attention、Qwen 9B chat insight、5 秒匿名 sidecar | 将“第二注意力”压缩为少量提示;Qwen 只处理有界窗口,确定性路径永远可用 |
orchestrator | 组装 Engine、动作状态机、人工确认、应急接管、幂等键和回执 | 外部动作有统一入口;停止/重试不会重复执行工具 |
policy | L0--L3 风险、always-confirm/block、emergency stop、本地 fail-closed;生产可替换 OPA/Rego | 商品卡/公开内容必须确认,改价/改库存直接阻断,适合企业合规 |
connectors | Mock/replay、OBS WebSocket v5、平台 bridge、商品/聊天/模型/Clip 端口 | SDK 和平台协议隔离;无真实账号时仍能离线演示和回放 |
clip_pipeline | PyAV probe、15 分钟 PCM 块、Silero VAD、Whisper、Qwen 语义/Top-K VLM、证据融合、ASS、FFmpeg 原子输出 | 60--180 秒 9:16 草稿;跨游戏/聊天/虚拟主播使用同一证据契约 |
realtime_redraw | 7860 StreamDiffusionV2 Worker;模型 registry、prepare/lease、JPEG WebSocket、MJPEG、同源 relay | Windows 不需要 CUDA;保最新帧、模型 resident 复用和失败回滚控制低延迟 |
avatar | 稳定的 AvatarService/mock 输出契约,预留 LiveTalking/Audio2Face/VTube Studio Adapter | 先把口型/动作权限接入治理,再替换真实数字人引擎 |
plugins | 自然语言生成受限 JSON/YAML DSL;白名单 Tool、条件、模拟、manifest 校验;不执行 Python/TS | 让运营能描述流程,又不开放任意代码执行 |
observability | counter/gauge/sample、p50/p95/max、GPU/模型/媒体指标接口 | 调度使用低基数指标;不把用户名、弹幕原文或 SKU 全量放入 label |
apps/api | 零后端依赖 Python HTTP 控制面,同源托管 Console;Bearer/TLS、分块上传、WS/MJPEG relay | 控制动作与媒体字节分离,适合 DGX 局域网部署 |
apps/console | React + Vite + Lucide;总览、Agent、人工确认、高光、审计、弹幕重点、重绘输出 | 桌面/移动响应式,busy 防重复,断线保留最后快照,所有按钮连接实际 API |
apps/desktop | PySide6 + Qt Quick 原生 Windows 工作台;助手、重绘、Clip、日志、参数中心 | 不携带 CUDA/模型到 Windows;主播看板和 DGX Worker 解耦,适合复制式部署 |
项目优先复用成熟引擎,自己实现直播领域的契约、治理和适配:
Software/python-venv/ Python/CUDA 推理环境
Software/frontend/ React/Vite/Lucide 依赖
Software/playwright/ 浏览器自动化与浏览器缓存
Software/models/ Whisper、Qwen、VAD、重绘权重
Software/source-cache/ 固定 revision 的外部源码
runtime/ SQLite、artifact、checkpoint、基准和日志
根目录 requirements.txt 汇总 DGX 推理、媒体、OBS、Qt 桌面和平台 bridge 的直接 Python 依赖,便于审计、IDE 和离线制品准备。正式安装仍优先使用下述 make 目标:它们会把依赖放入 Software/python-venv,并完成 CUDA、SM121 扩展、模型和本地缓存检查。
# 1. Python/媒体/ASR/剪辑依赖(首次执行)
make autoclip-install
make autoclip-install-inference
make console-install
# 2. 下载并校验本地模型(按磁盘和用途选择)
make autoclip-download-models
make chat-model-download
make chat-model-verify
make qwen-fastpath-install
# 3. 运行确定性演示和测试
make demo
make verify
# 4. 启动 DGX 控制面 + 7860 重绘 Worker
export SPARKLIVE_API_TOKEN='replace-with-a-long-random-secret'
export SPARKLIVE_HOST='0.0.0.0'
make api
API 默认端口 8787,实时重绘媒体 Worker 默认 7860。8787 是控制面和受认证 relay;原始 JPEG/音频不经过 JSON API、Event Bus 或 Audit。跨机器连接应使用受管 LAN/VPN,并配置 SPARKLIVE_TLS_CERT 与 SPARKLIVE_TLS_KEY。
make console-dev # 开发端口,默认 Vite 代理 8787
make console-build # 生产构建,由 API 同源托管
make browser-install # 项目内 Playwright 浏览器
SPARKLIVE_VISUAL_URL=http://127.0.0.1:8787 make visual-test
Console 的主要操作:运行 demo、查看 Agent/事件/高光/审计、确认或拒绝 L2/L3 proposal、切换应急接管、打开实时重绘和复制 OBS Browser Source。断线时保留最后快照,重新连接后以服务端 revision 为准。
Linux ARM64 生成 Windows 源码包:
make desktop-package-source
在 Windows 11 x64 + Visual Studio 2022 Build Tools 上:
powershell -ExecutionPolicy Bypass -File .\apps\desktop\scripts\build_windows.ps1
gameplay、virtual_avatar、commerce、talk 或 general rundown,核对 OBS、音频设备、商品目录和模型健康。Ctrl+Shift+H 记录人工高光;下播时先停止音频并等待最后 ASR 窗口排空,再导出匿名 5 秒互动桶、转写和 marker sidecar。| 参数 | 默认 | 意义 |
|---|---|---|
capture.live_audio.chunk_duration_ms | 1000 | Windows 每次认证 PUT 的 PCM 时长;越小越低延迟但请求更多 |
capture.live_audio.transcription_window_seconds | 8 | DGX 累积音频后调用 Whisper 的窗口;持续讲话用重叠窗口修订 |
capture.live_audio.vad_start/stop_threshold_db | -42/-48 | 双阈值滞回,降低键盘/游戏声误触发 |
live_assistant.attention.max_visible_prompts | 3 | 主工作台同时显示的关键提示数;主播窗固定更少 |
live_assistant.analysis.chat_window_seconds | 60 | 弹幕重点和重复问题的滚动窗口 |
live_assistant.chat_insight.interval_seconds | 10 | Qwen 复核节拍;即时排序不等待它 |
live_assistant.chat_insight.max_output_tokens | 96 | 模型摘要上限,控制延迟和显存 |
clip_pipeline.workflow.min/max_duration_seconds | 60/180 | 自动切片时长边界 |
clip_pipeline.workflow.max_evidence | 512 | Agent 可接收的结构化证据上限 |
clip_pipeline.render.encoder_preferences | NVENC→x264 | 有 NVENC 使用硬件编码,否则软件回退 |
policy.auto_execute_risks | L0/L1 | 可自动执行的风险级别;L2/L3 默认需要确认 |
完整 schema 在 config/default.json;Windows 参数中心只暴露主播能理解且确实影响链路的字段\。
# 健康检查
curl http://127.0.0.1:8787/api/health
# 读取统一快照
curl -H "Authorization: Bearer $SPARKLIVE_API_TOKEN" \
http://127.0.0.1:8787/api/snapshot
# 运行离线演示(会产生结构化事件、proposal、审计和高光草稿)
curl -X POST -H "Content-Type: application/json" \
-H "X-Idempotency-Key: demo-20260721-001" \
http://127.0.0.1:8787/api/demo/run
版本化模块 API 位于 /api/v1/<module>;所有控制 POST 都支持 X-Idempotency-Key。外部事件入口只接受白名单结构化事件,不能注入内部 agent.proposal 或 tool.result。
本章面向主播、场控和直播技术负责人。它把安装说明、现场操作和故障处置放在一条工作流里:主播只需要掌握场次、提示、音频和确认;技术负责人负责 DGX、OBS、模型和网络边界。
推荐一台 Windows 主播机配合一台 DGX Spark:
| 位置 | 职责 |
|---|---|
| Windows + OBS | 推流、录制、摄像头/音频采集、原生主播工作台、置顶主播窗和 OBS 观众窗 |
| DGX Spark | API、Multi-Agent、Policy、Audit、SQLite、Whisper/Qwen、平台 Adapter、重绘与 Clip Worker |
| OBS WebSocket | 场景、来源、文字、推流/录制状态等结构化控制;不承载连续媒体 |
| Live Audio 数据面 | Windows 将指定设备转为 16 kHz 单声道 PCM,经 VAD 后受认证发送到 DGX |
| Realtime Redraw 数据面 | Windows 摄像头 JPEG 经 8787 同源 relay 进入 7860 Worker,生成帧以 MJPEG 返回 |
| Clip 数据面 | 录像按 4 MiB 分块续传;原始字节不进入 Event Bus 或 Audit |
关键数据保存在项目目录内:
runtime/sparklive.db 运行状态、时间线、pending 和审计
runtime/live-assistant/<session_id>/ transcript、平台 sidecar 和 marker
runtime/live-audio/<audio_session>/windows/ 受限 ASR 短窗,默认处理后删除
runtime/uploads/<upload_id>/ 可续传录像临时文件
runtime/autoclip/<job_id>/ checkpoint、阶段指标、证据和计划
runtime/clips/ 本地 MP4 草稿
Software/ 模型、venv、Node、浏览器和媒体工具
原始媒体、Cookie、Token、OBS 密码和完整平台 payload 不进入事件总线。控制动作保留 correlation_id 与 idempotency_key,重试不会重复执行 OBS 或上传动作。
在 DGX 上启动服务:
export SPARKLIVE_API_TOKEN='replace-with-a-long-random-secret'
export SPARKLIVE_HOST='0.0.0.0'
export SPARKLIVE_PORT='8787'
make api
跨不可信网络时同时配置 SPARKLIVE_TLS_CERT、SPARKLIVE_TLS_KEY,或使用受管 VPN。Windows 工作台中填写 http(s)://<DGX-LAN-IP>:8787 和相同 Token;Token 仅保存在当前进程,不写入 QSettings。
连接成功后,工作台提供五个工作区:
主播可使用以下快捷键:
| 快捷键 | 行为 |
|---|---|
Ctrl+Shift+S | 开始、暂停或恢复当前场次 |
Ctrl+Shift+H | 以当前 PTS 记录人工高光 |
Ctrl+Shift+A | 完成当前第一条主播提示 |
Ctrl+Shift+F | 切换专注模式,只保留 high/critical 提示 |
开播前应在目标 Windows 全屏游戏中测试快捷键冲突、麦克风权限、DPI 和 OBS Window Capture。
OBS 28+ 已内置 obs-websocket v5。技术负责人按以下顺序配置:
4455 并设置强密码。商品特写、休息画面、limited-offer 和 screen-capture。export SPARKLIVE_OBS_ADAPTER=websocket
export SPARKLIVE_OBS_HOST=192.168.1.50
export SPARKLIVE_OBS_PORT=4455
export SPARKLIVE_OBS_PASSWORD='set-only-in-this-shell'
make api-obs
/api/snapshot,确认 obs.adapter=obs-websocket-v5、obs.connected=true,并检查 command/event/telemetry lane。SparkLive 已注册 obs.set_scene、obs.show_overlay 和 obs.hide_source。逻辑 overlay 可以在 config/default.json 映射到既有 OBS 来源:
"overlays": {
"limited-offer": {
"scene": "商品讲解",
"source": "SparkLive 优惠层",
"text_input": "SparkLive 优惠文案",
"transform": {"positionX": 1320.0, "positionY": 120.0}
}
}
主工作台顶部的广播按钮会打开两个独立窗口:
SparkLive 主播提示:约 470x410,置顶,只显示主播私有信息。SparkLive 观众提示层:约 720x180,供 OBS Window Capture 使用。OBS 只采集观众提示层。该窗口优先显示主播明确授权的 live_caption;普通公开提示必须先创建 L2 proposal,再由操作者确认展示。问题队列、礼物列表和私有建议不会出现在观众窗口。
实时重绘使用另一个纯画面窗口 SparkLive Studio - StreamDiffusionV2 OBS Output。它不显示 Prompt、参数、日志或参考图。运行中可以热更新 Prompt;模型、分辨率和步数等需要重建 pipeline 的参数在停止前锁定。
工作台读取 Windows 录音设备,可选择两种接线:
CABLE Input,工作台读取 CABLE Output。使用耳机检查双声、回声和啸叫,避免把桌面音频再次监听回扬声器或麦克风。完整处理链如下:
麦克风 / OBS 虚拟录音端
-> Qt QAudioSource
-> PCM16 下混与重采样
-> 20 ms 自适应 VAD、双阈值、前后留白
-> 语音块 + 场次 PTS + VAD gap 的认证 PUT
-> DGX 静音兜底与重叠增量窗口
-> 本地 Whisper
-> interim/final speech.transcript
-> 主播看板、sidecar、OBS live_caption 和窄职责 Agent
主播操作步骤:
1000 ms 分块 / 8 s 识别窗 / -42 dB 开始 / 600 ms 句尾静音。base_pts_ms 后,Windows 才打开设备。utterance_id 合并为最终句。stopping 进入 stopped,再结束助手场次。VAD 与增量参数:
| 参数 | 默认 | 调整建议 |
|---|---|---|
chunk_duration_ms | 1000 ms | 可选 250/500/1000/2000;越短反馈更快,请求和 gap 风险更高 |
transcription_window_seconds | 8 s | 可选 2--30 s;4 s 适合快速反馈,8 s 是稳定平衡 |
vad_start_threshold_db | -42 dB | 噪声误触发时提高到 -38/-36;轻声漏检时降低到约 -46 |
vad_stop_threshold_db | -48 dB | 必须不高于开始阈值,形成起止滞回 |
vad_min_speech_ms | 160 ms | 过滤点击、键盘等短促瞬态 |
vad_min_silence_ms | 600 ms | 长句被截断时提高到 800--1200 ms |
vad_pre_roll_ms / post_roll_ms | 240/600 ms | 首字或尾字被吞时分别增加 |
vad_calibration_ms | 400 ms | 估计房间噪声底;开始后立即说话时可缩短 |
streaming_overlap_ms | 1000 ms | 修复跨窗断句,必须小于流式窗口 |
max_pending_windows | 4 | DGX 有界 ASR 队列;过载时丢最旧窗口并明确记录 gap |
五类默认流程:
| Profile | 默认阶段(分钟) | 典型内容 |
|---|---|---|
gameplay | 开场 5;热身 10;主对局 45;互动 10;收尾 5 | 游戏解说、排位、赛事 |
virtual_avatar | 模型确认 5;主题 35;互动 15;收尾 5 | 角色表演、虚拟直播 |
commerce | 开场 5;商品 A 15;问答 8;商品 B 15;收尾 7 | 商品演示、事实问答 |
talk | 开场 5;主题 35;问答 15;收尾 5 | 聊天、访谈、知识内容 |
general | 开场 5;主内容 40;互动 10;收尾 5 | 混合节目 |
阶段结束前默认 60 秒提示。流程修改从下一场生效;提醒、互动和健康阈值保存后立即生效。
提示卡支持“稍后”“已处理”和“申请送入观众层”。主看板显示服务端允许的 1--5 条提示,置顶窗最多显示两条;专注模式只过滤主播窗,不关闭安全告警、数据采集或主看板。
互动区保留滚动弹幕速率、主题、重复问题和礼物待谢。勾选礼物只标记主播已感谢。Ctrl+Shift+H 生成权威人工 marker,进入实时 Clip 候选和下播 sidecar,但仍经过素材、边界、隐私和版权检查。
首次部署使用 Mock/replay 验证流程:在平台 Adapter 中选择平台、Mock / 离线 和合法房间标识。该模式不访问网络,可以稳定演练弹幕、礼物、人数、gap 和审批。
显式学习环境可安装隔离 bridge:
make platform-adapters-install
export SPARKLIVE_ENABLE_COMMUNITY_ADAPTERS=1
make api
启动 community 模式需要同时满足服务端开关、UI“已取得主播授权”的二次确认和合法房间号。bridge 输出最小化 NDJSON,Connector 负责匿名引用、去重、gap、进程监督和健康快照;Cookie、WBI key 和设备标识不离开 bridge 进程。
平台指标始终保留原语义:只有 concurrent_viewers 表示同时在线;popularity、cumulative_views、room_entries 分别表示热度、累计观看和进房。
结束场次后生成:
runtime/live-assistant/<session_id>/transcript.json
runtime/live-assistant/<session_id>/platform-sidecar.json
sidecar 保存匿名 5 秒互动桶、平台指标原语义、duplicate ratio、gap、transcript URI、自动/人工 marker、profile、settings revision 和实际 rundown 边界。建议在开始 OBS 录制时同步开始助手场次,使录像、转录和 marker 共用时间轴。
桌面端智能切片流程:
.mp4/.mkv/.mov/.m4v/.webm/.ts/.flv 录像。auto/gameplay/talk/virtual_avatar/general profile 和 1--3 条输出。七阶段产物:
| 阶段 | 处理 | 主要产物 |
|---|---|---|
probe | PyAV 读取容器、轨道、时长、FPS、编码和 PTS | probe.json |
audio | 15 分钟、2 秒重叠的 16 kHz PCM | audio/、chunk plan |
asr | VAD 合并语音,Whisper 批量转写 | transcript.json |
subtitles | word/segment timestamp 生成 ASS | subtitles.ass |
evidence | 音频、场景、sidecar、语义和 Top-K 视觉证据 | evidence.json |
plan | profile 融合、负信号、边界、NMS 和 QC | workflow-plan.json |
render | 白名单 FFmpeg、字幕、原子替换和基础 QC | MP4、render-audit.json |
高光选择先用 15 秒窗口/5 秒步长召回,再融合语义、画面、游戏、声音和观众反应。单纯弹幕、关键词、响度或镜头变化不能独立过线;重复刷屏、黑帧、静音、BRB 和观众快速下跌属于负证据。最终片段吸附句子/话题/镜头边界,并重新检查隐私和版权。
DGX 本地 CLI 同样可用:
make autoclip-run RECORDING=/path/to/live.mkv
make autoclip-run RECORDING=/path/to/live.mkv EXECUTE=1
第一条只生成计划,第二条是操作者明确授权的本地渲染。
| 目标 | 推荐调整 | 影响 |
|---|---|---|
| 更快字幕反馈 | 500 ms 分块、4 s 识别窗 | 请求约翻倍,对 LAN 稳定性要求更高 |
| 更稳的默认 ASR | 1000 ms 分块、8 s 识别窗 | 延迟、上下文和请求量平衡 |
| 长句少截断 | 句尾静音提高到 800--1200 ms | 最终句稍晚,完整度更高 |
| 更严格高光 | 提高对应 profile threshold | 候选更少,precision 更高 |
| 保留更多铺垫 | 提高 workflow.selection.lead_in_ratio | 高光点前上下文增加 |
| 更少视觉开销 | 降低 vision_top_k/frames 或关闭视觉复核 | 保留确定性证据融合 |
| 推流优先 | 增加 reserved_for_other_workloads_gb | 需同步降低模型驻留或 headroom,三项总和不超过 120 GB |
Clip 默认输出 9:16 / 1080x1920 / 60--180 s / -14 LUFS,编码优先 NVENC、回退 x264。字幕、画面、编码和模型预算的完整默认值统一位于 config/default.json,服务端会重新校验所有 Windows 覆盖值。
| 现象 | 检查与恢复 |
|---|---|
| Windows 连接被拒绝 | 确认 make api、地址、端口、SPARKLIVE_HOST、Token、防火墙和证书;401/403 重新输入完全一致的 Token |
obs.connected=false | 检查 OBS WebSocket、4455、密码、DGX IP 和 make obs-install;场景/来源名称区分大小写 |
| 观众窗没有字幕 | 确认转写与观众字幕两个开关、本次模式为本地 Whisper,并检查 OBS 捕获的是观众窗而非主播窗 |
| 有 RMS 但不发送 | VAD 未越过开始阈值;先检查 Windows 输入增益,再一次只调整一个阈值 |
| 已发送但没有文字 | 检查 Whisper prepare/worker 状态;演练模式只验证设备、VAD、网络和 PTS |
| OBS 虚拟声卡无峰值 | 核对 OBS 监听播放端、Source“监听并输出”和工作台配对录音端 |
| 延迟或丢弃持续增加 | 检查 LAN/TLS,停止竞争 GPU 的任务并重启音频会话;客户端和 DGX 队列均有界,不会无限缓存 |
平台 gap/degraded | 把断线期视为未知,检查 bridge/官方 Adapter 和诊断日志,不把零值当真实数据 |
模型任务 ready_for_worker | dry-run 下表示任务已就绪;使用本地 Qwen 前先验证权重并选择受支持的 Worker 模式 |
| Clip 上传中断 | 暂停/继续或重新连接;客户端从服务端 received_size 续传,未完成分块会回滚 |
| Clip 任务失败/中断 | 在相同源、sidecar 和配置 digest 下恢复 checkpoint;没有候选时核对音轨、profile、阈值和 marker |
| 配置保存 409 | 另一客户端已更新 revision;重新读取服务端值,合并本地草稿后保存 |
| 内存预算被拒 | 保证 reserved + resident + headroom <= 120 GB |
故障时系统保留确定性提示、mock/replay 和本地计划能力。Policy、Audit、授权或事实源不可用时,高风险动作关闭;模型失败不自动切云,也不伪造结果。
开播前
直播中
Ctrl+Shift+H,平台 gap 记录为未知而不是零互动。下播后
runtime artifact。| 类别 | 模型/服务 | 项目用途 | 权重/来源 | 许可证提示 |
|---|---|---|---|---|
| ASR smoke | ggml-tiny | 11 秒 CUDA 运行时探针 | Software/models/asr/whisper.cpp/ggml-tiny.bin | MIT;仅作运行时检查,商业再分发前复核模型卡 |
| ASR | AI-ModelScope/whisper-large-v3 | 实时句级转写、录播全文转写 | Software/models/asr/AI-ModelScope/whisper-large-v3 | Apache-2.0;以精确模型卡为准 |
| VAD | Silero v6.2.0 / whisper.cpp ggml | 静音抑制、录播语音分段 | Software/models/vad/ggml-org/whisper-vad | MIT |
| 文本/多模态 | Qwen/Qwen3.5-9B BF16 | 高频弹幕重点和摘要 | Software/models/multimodal/Qwen/Qwen3.5-9B-BF16-source | Apache-2.0;固定本地权重 |
| 文本/多模态 | Qwen/Qwen3.5-27B-FP8 | 低频复杂语义、Top-K VLM、Clip | Software/models/multimodal/Qwen/Qwen3.5-27B-FP8 | Apache-2.0;受 60 GB 单模型预算治理 |
| 兼容别名 | semantic_llm、candidate_vlm | 指向同一 Qwen3.5-27B 权重的语义/候选角色 | config/autoclip-models.json | 与目标 checkpoint 相同 |
| 可选 VLM/音频 | Step3-VL-10B-FP8、Step-Audio-2-mini | Top-K 视觉/音频复核端口 | config/autoclip-models.json | Apache-2.0;按模型卡和 Adapter 状态使用 |
| 可选远程端口 | stepaudio-2.5-asr | 授权环境的带时间戳/说话人云端对照 | 仅登记在模型清单,默认关闭 | 商业 StepFun API 条款;SparkLive 默认本地优先、不调用 |
| 预算拒绝项 | Step-3.7-Flash | 记录资源预算边界,不进入 Worker | config/autoclip-models.json | Apache-2.0;运行时和 KV cache 超出本地 60 GB clip 预算 |
| 视觉/检索 | OpenCV YuNet、Qwen3-Embedding-0.6B | 人脸目标 track、候选语义去重 | 配置中的可选路径 | MIT/Apache-2.0,需核对精确文件 |
| 实时重绘 | Wan2.1 T2V 1.3B + Causal-DMD、SD-Turbo、SD 1.5+LCM、Hyper-SDXL、FLUX.2 Klein 4B FP8 | 摄像头风格化/角色化/参考图 | Software/models/realtime-redraw、streamdiffusionv2 | 基础模型分别遵循模型卡;SD 1.5 CreativeML Open RAIL-M、LCM/SDXL OpenRAIL++、FLUX/IP-Adapter Apache-2.0 等 |
| 组件 | 复用方式 | 许可证/风险 |
|---|---|---|
| OBS Studio + obs-websocket v5 | 控制场景、来源、字幕和状态;不承载连续音视频 | GPL-2.0;插件和分发需单独核对 |
| Bilibili Open Live、抖音直播开放能力 | 通过官方授权的长链/回调接入弹幕、礼物、点赞等最小事件 | 需要主播/主体授权、验签、去重、乱序/丢失处理;平台字段不能互相推算 |
| ModelScope | 下载并校验 Whisper、Qwen、VAD 等本地权重 | 只允许显式操作者下载;权重许可以模型卡为准 |
| FFmpeg、nv-codec-headers、PyAV | probe、裁切、ASS、H.264/AAC、NVENC/NVDEC | FFmpeg 构建选项决定 GPL/LGPL;项目区分开发构建和分发构建 |
| StreamDiffusionV2、draw-realtime、BFL FLUX2 | 固定 commit 的媒体管线/模型结构参考与适配 | 当前固定 Apache-2.0 源码 revision;权重条款另行核对 |
| whisper.cpp、faster-whisper、PySceneDetect | ASR 运行时、场景边界和离线工具 | MIT/BSD-3-Clause;CTranslate2 ARM64/CUDA 组合需实测 |
| Qt/PySide6、React/Vite、Lucide | Windows 原生 UI、Web Console、图标 | LGPL/商业 Qt 条款、MIT;分发时保留 notices |
| NVIDIA DGX Spark playbooks、CloudEvents、NATS、OPA、LanceDB | 架构和后续 Adapter 参考 | 各仓库许可证独立 |
DouyinLiveWebFetcher、bilive-danmaku | 仅隔离的学习/replay bridge | 分别 AGPL-3.0/MIT;默认关闭,不作为未授权生产数据源 |
下表区分“随项目缓存/直接适配”和“架构参考/预留端口”。所有实际下载由 make 目标触发并落在 Software/。
| 领域 | 仓库 |
|---|---|
| 直播/媒体 | OBS Studio、obs-websocket、FFmpeg、nv-codec-headers、PyAV、GStreamer、Haivision SRT |
| 实时重绘 | StreamDiffusionV2、draw-realtime、BFL FLUX.2、Diffusers |
| 语音/视觉 | whisper.cpp、faster-whisper、Silero VAD、PySceneDetect、OpenCV Zoo YuNet、FunClip |
| 模型/本地 AI | Qwen、Qwen3-VL、NVIDIA DGX Spark playbooks(live-vlm-webui、multi-agent-chatbot、VSS) |
| 编排/治理 | CloudEvents、NATS、LangGraph、OPA、Wasmtime、LanceDB |
| 应用/可观测 | FastAPI、Vite、React、Lucide、OpenTelemetry Python、Prometheus Python Client |
| 数字人/平台研究 | LiveTalking、Open-LLM-VTuber、DouyinLiveWebFetcher、bilive-danmaku、blivedm、Douyin Open API credential |
SparkLive Studio 原创业务代码以 Apache License 2.0 开源。该许可证允许个人和企业使用、修改、分发及商业部署,同时要求保留版权声明、许可证文本、NOTICE 内容和适用的修改说明;Apache-2.0 还提供明确的贡献者专利授权,但不授予项目名称、标识或第三方资产的商标权。
根许可证只覆盖本项目贡献者有权授权的原创代码,不改变任何外部组件的许可:
Software/ 中按需下载的外部仓库、Python/Node 依赖和工具继续遵循各自上游许可证;发行包只应携带实际分发组件对应的完整许可和署名文本。DouyinLiveWebFetcher 的 AGPL-3.0 源码保持进程与分发隔离,不作为 Apache-2.0 核心的一部分;bilive-danmaku 的 MIT 版权与许可声明必须保留。nonfree 的 FFmpeg 开发构建不得直接作为公开二进制制品重新分发。项目级署名和边界声明见 NOTICE,Windows 桌面发行涉及的开发期清单见 apps/desktop/THIRD_PARTY_NOTICES.md。商业发行方仍应按照实际装入制品的精确版本生成最终第三方许可证清单。
ActionProposal;不能直接调用 OBS、平台、文件、网络或发布接口。SPARKLIVE_API_TOKEN;跨不可信网络启用 TLS 或受管 VPN;Token 不写入 QSettings。SparkLive 的直接买单者可以是三类客户:
公开市场数据能证明预算存在,但不能替项目承诺具体 ROI:
年度人工节省 = 每场被自动整理/提示的助理小时数 × 场次 × 助理综合时薪
年度云推理节省 = 每月音频分钟×ASR 云价 + 每月视频分钟×VLM/剪辑云价
新增收益 = 高光复用带来的可归因播放/转化增量
项目净价值 = 三项收益 - DGX 折旧/电力 - 运维和授权成本
项目实测说明本地化确实能把重任务放进同一设备:Qwen 9B 的确定性即时路径不等待模型;27B 只在有预算的低频窗口运行;70 秒录播已完成本地 ASR/语义/渲染闭环。商业试点应以 10 场主播基线记录以下指标:主播被打断次数、未回答问题比例、错误商品事实次数、人工高光整理分钟数、Clip 出片时长、GPU/网络故障恢复时间和观众/转化变化。这样 ROI 来自真实运营数据,而不是泛化的“AI 提效百分比”。
| 阶段 | 交付 | 成功指标 |
|---|---|---|
| 第 1--2 周 | DGX、Windows 客户端、OBS、mock/replay、商品目录 | 开播检查、提示、确认、审计全链路可演示 |
| 第 3--6 周 | 1--3 位主播的授权平台事件、Whisper/VAD、Qwen 弹幕重点 | 首字/最终句延迟、误触发、掉帧、提示采纳率可记录 |
| 第 7--10 周 | 直播 sidecar、自动切片、人工 marker、9:16 本地草稿 | 下播到草稿时间、候选 Precision@3、边界 IoU、人工复核分钟数 |
| 第 11--13 周 | 多主播并行、角色权限、备份与保留期 | 无重复工具动作、故障恢复、每场成本、主播满意度与转化对照 |
试点结束后可以选择按设备销售、按工作室订阅、按本地 Worker 节点授权或与硬件/平台联合交付。
apps/api/ 控制面 HTTP API + 7860 媒体 relay
apps/console/ React/Vite Web 操作台
apps/desktop/ PySide6/Qt Quick Windows 主播工作台
apps/redraw/ StreamDiffusionV2 多模型 Worker
src/sparklive/ contracts/capture/perception/agents/policy/...
config/default.json 运行时配置和风险边界
config/autoclip-models.json 模型、来源、SHA-256、资源策略
requirements.txt 完整 Python 直接依赖与 DGX/Windows 平台标记
tests/ 契约、策略、Agent、API、桌面结构和 Clip 回归
Software/ 所有依赖、浏览器、源码缓存和模型
runtime/ 本地数据库、artifact、checkpoint、基准和截图
建议阅读顺序:
make test # Python 单元/契约回归
make verify # test + Console production build
make visual-test # API 启动后执行 Web desktop/mobile/output 回归
make desktop-visual-test # Qt Quick 离屏窗口矩阵
3 commits
Python
77.7%
QML
13.9%
TypeScript
3.0%
CSS
1.5%
Shell
1.5%
JavaScript
1.2%
把 NVIDIA DGX Spark 变成主播身边的本地 AI 直播运营团队:实时看懂现场、协同多个专长 Agent、把建议交给主播确认,并把直播后的高光变成可复用资产。
SparkLive Studio 面向游戏主播、虚拟主播、聊天/知识主播、直播带货团队以及管理多位主播的 MCN。它不是又一个推流器,也不是把一个通用聊天机器人塞进直播间;它是一个以本地推理为核心的直播控制面,把声音、画面、弹幕、商品事实、OBS 状态和设备健康组织成同一条可追溯的工作流。
SparkLive Studio 的故事很简单:主播把注意力放在观众和内容上,DGX Spark 在本地承担繁重的感知、整理和复盘,Multi-Agent 把每一个建议交给正确的岗位,Policy 和 Audit 让企业敢于把它接进真实流程。这样,直播不再依赖一个人同时记住所有事情,而成为一套可以部署、度量、复制和持续改进的生产系统。
项目版本:1.0.0
运行平台:NVIDIA DGX Spark(GB10,Linux ARM64)+ Windows 11 Qt 主播工作台
许可证:项目自研代码采用 Apache License 2.0;第三方源码、模型权重、字体、音乐、角色与声音素材不因本项目许可证而重新授权,详见 NOTICE 和模型、服务、外部仓库与许可证。
直播行业的难题不是“没有一个能回答问题的 AI”,而是主播在同一秒要表演、看评论、记流程、守合规、盯设备、切场景、记高光,还要在延迟和故障中保持自然。SparkLive Studio 的价值是把这些分散的注意力任务压缩成少数有来源、有时效、可确认的提示,同时不把原始直播内容交给云端 API。
项目的三项核心亮点:
Software/ 的固定权重加载;默认不调用任何云端大模型 API,不运行时下载。128 GB 统一内存让大模型、媒体缓冲和编解码共享一个可治理的内存池,GB10 的 CUDA/NVENC/NVDEC 让本地推理和后期媒体处理可以放在主播团队自己的设备上。ActionProposal,所有 OBS、商品卡、公开内容和文件动作都经过 Policy Gateway -> Tool Registry -> Audit。这样既能并行扩展,也能在一个 Agent 出错时保住直播主链路。| 场景 | 实测结果 | 对直播运营的意义 |
|---|---|---|
| Qwen3.5-27B-FP8(GB10) | 冷启动约 269.68 s;常驻复用约 18.01 s;峰值 CUDA allocated 约 30.9 GB | 适合低频复杂语义、录播复核,不把重模型塞进逐条弹幕热路径 |
| Qwen3.5-9B BF16 弹幕重点 | 冷启动约 93.84 s;warm 96-token 路径约 8.86 s;约 10.84 token/s;峰值约 17.7 GiB | 10 秒窗口异步复核;确定性排序先展示,模型慢或不可用不阻塞主播 |
| 录播切片链路 | 70 秒真实模型录播生成 60 秒、360x640 H.264/AAC 草稿;checkpoint 恢复约 1.60 s | 长任务可暂停、恢复和显示阶段 ETA,适合下播后自动整理 |
| FLUX.2 Klein 4B FP8 重绘 | 256 px 双参考 smoke:冷加载约 78.08 s,四步推理约 1.42 s,峰值约 11.81 GiB | 本地角色/风格化输出可与 OBS 分离,切换同一模型可复用 resident pipeline |
| StreamDiffusionV2 Wan2.1 1.3B | 5 帧初始化、4 帧时序块推进,默认 832x480 / 16 FPS / 2-step | 用有界“保最新帧”队列控制延迟,不让网络抖动形成无界积压 |
| 自动化质量基线 | make test:195 项通过,2 项按 PyAV/环境规则跳过;Console production build 通过 | 代码、契约和前端构建可在断网环境回归 |
公开数据说明了两个事实:观众和商业预算都在增长,而直播现场的“第二注意力”没有被基础推流软件解决。
| 主播类型 | 同时发生的任务 | 传统方式的失误代价 |
|---|---|---|
| 游戏主播 | 操作/解说、队伍语音、弹幕、赞助口播、OBS、掉帧与隐私 | 战斗中漏掉高价值问题;剧透、房间号或桌面通知泄露;高光靠回看手工找 |
| 虚拟主播 | 中之人表演、口型/面捕/模型状态、角色口径、音乐和素材授权 | 追踪丢失、穿模、口型不同步会立即破坏角色体验;身份信息泄露风险更高 |
| 带货主播 | 脚本、商品演示、价格/库存/优惠、FAQ、合规、转化节奏 | 错价、过期券、功效夸大或串品会带来退款、平台处罚和品牌损失 |
| 聊天/知识主播 | 长时间表达、资料核对、重复问题、敏感话题、时间管理 | 主播被重复问题淹没;回答没有事实来源;话题和收尾失控 |
共同痛点是高并发信号、低可用注意力:弹幕速度、平台事件、音画质量和流程时钟同时变化,但主播只能把注意力放在一个画面上。真正有用的 AI 不应再开一个聊天窗口,而应把一百条事件压成“现在最该看哪两件事”。
人工场控很重要,但不是无限扩张的答案:
SparkLive Studio 的定位不是替掉所有人,而是把“监看、整理、提示、记录和可回放的判断”软件化,让一个场控可以服务更多主播,把人的时间留给最终表达、敏感判断和对外确认。
| 产品/项目 | 主要价值 | 适合的场景 | 结构性边界 | SparkLive 的差异 |
|---|---|---|---|---|
| OBS Studio | 免费、可扩展的采集、场景和编码引擎 | 所有主播的基础生产 | 它是导播引擎,不负责弹幕语义、商品事实、多 Agent 协作或审计 | 通过 obs-websocket Adapter 控制 OBS,把事件、策略和复盘放在其上层 |
| Restream | 云端多平台推流、聊天聚合和团队协作 | 多平台分发 | 依赖云端链路和平台账号;跨平台事实、权限和数据留存由服务商决定 | 本地优先、原始媒体不进 Event Bus;平台 Adapter 可替换并保留事实来源 |
| Streamlabs / Streamer.bot | 小组件、告警、宏和事件自动化 | 已有 OBS 工作流的增强 | 强项是规则和 UI 组件,不是本地多模态推理、证据引用和高风险动作治理 | Agent 只出 proposal,L0-L3 策略、人工确认、审计和应急接管统一处理 |
| Eklipse / OpusClip | 云端 AI 高光和短视频生成 | 下播后快速出片 | 需要上传录播;对账号隐私、平台事件、商品事实和本地合规的控制较弱,在线热路径与后期工作流分离 | 录播证据、直播 sidecar、VAD/ASR、Top-K VLM 和 FFmpeg 在 DGX 本地组成一条可恢复链路 |
| NVIDIA Broadcast | 本地降噪、虚拟背景、眼神/画面增强 | 单机音视频增强 | 解决的是媒体效果,不是节目流程、互动排序、商品事实或动作治理 | 将本地视觉/音频能力放入统一 Capture/Perception/Agent 契约 |
| 单体“AI 主播/AI 助手” | 一次调用生成回答或脚本 | 低风险内容草稿 | 大模型拥有过宽权限,延迟、幻觉、成本和云端数据外发难以控制 | Qwen 只接收有界证据,结果必须回到窄职责 Agent;商品价格、库存和公开回复仍受策略控制 |
竞品并非“做得不好”,而是各自优化一个环节。SparkLive 的商业机会在于把这些环节接成本地、可审计、可替换、面向团队规模化运营的一套控制面。
摄像头 / 游戏 / 麦克风 / 弹幕 / 商品目录 / OBS / 设备指标
|
Capture Gateway
|
Perception 结构化事实
|
Event Bus + SQLite 时间线
|
窄职责 Agent 并行分析与排序
|
ActionProposal
|
Policy Gateway -> Tool Registry -> Audit
/ allow | confirm | block
|
OBS / 字幕 / 商品卡 / Clip / Avatar / 系统降级
媒体面和控制面分离:原始音视频走受认证、有界的媒体通道;Event Bus 只传 URI、PTS、帧索引、检测框、文本、分数和证据引用。这样可以让模型和媒体 Worker 更换,而不让业务层、审计表或外部 Agent 接触原始字节。
NVIDIA DGX Spark 官方规格给出的 GB10 平台包含 128 GB coherent unified memory、最高 1 petaFLOP FP4 AI 性能、273 GB/s 带宽、NVENC/NVDEC,并支持本地运行最多约 200B 参数级别的 Agent 工作负载。SparkLive 按直播优先级使用它:
本地化带来三项直接收益:
Software/,推理不按 token、分钟或并发向云服务计费;成本变成可预算的设备折旧、电力和维护。每个 Agent 有 owner、触发事件、证据范围和工具白名单:
| Agent | 解决的现场问题 | 输出 |
|---|---|---|
| 导播 | 流程、场景、字幕、BGM、转场 | OBS/提示 proposal |
| 互动 | 弹幕去重、主题、重复问题、礼物队列 | 主播私有提词,不自动公开发送 |
| 商品 | SKU、价格/库存/优惠/FAQ 的事实引用 | 商品卡或口播建议,外显前确认 |
| 安全合规 | 隐私、版权、骚扰、广告和功效风险 | 隐藏来源、告警和人工升级 |
| 运维 | 掉帧、静音、GPU 温度、编码、模型延迟 | 降级或人工处置建议 |
| 虚拟人 | 表情、口型、动作和角色口径 | 可中断的 avatar cue |
| Clip | 高光打点、证据融合、9:16 计划和 QC | 本地草稿与可审阅计划 |
高风险动作的生命周期是 proposed -> allowed/confirm/blocked -> executed/failed。每次调用保留 correlation_id 和 idempotency_key;策略不可用或审计不可写时,外部状态改变动作自动 fail closed。这个设计把“AI 很聪明”转换成企业能接受的“出了问题知道谁建议、依据什么、是否执行”。
SparkLive 采用 Python 模块化单体:先用清晰契约保证断网演示和单机回放,再按媒体采集、感知、控制面和异步 Worker 拆进程。下面的模块边界对应上面的现场需求。
| 模块 | 技术实现 | 针对的痛点与亮点 |
|---|---|---|
contracts | CloudEvents 风格 JSON envelope;LiveEvent、ActionProposal、PolicyDecision、ToolResult 字段校验 | 让多 Agent、平台和桌面端共享版本化事实;URI/PTS/证据引用隔离原始媒体 |
capture | Windows QAudioSource/QMediaDevices,PCM16 mono 16 kHz;20 ms 自适应能量 VAD、双阈值滞回、前后留白、稀疏 PTS、有限 PUT 队列 | 静音不上传、丢包与 VAD gap 可区分;主播可看到 RMS、说话状态、丢块和 DGX 延迟 |
perception | Whisper 有界重叠窗口产生 interim/final;商品/OCR/跟踪/隐私/高光规范化为结构化事件 | 中间字幕只修订同一 utterance_id,最终句才触发意图和 sidecar,避免重复动作 |
event_bus | 线程安全同步总线、glob 订阅、失败隔离、有限历史;预留 NATS JetStream Adapter | 直播关键事件不因单个订阅者失败而丢失;未来横向扩展不泄漏 NATS 类型 |
memory | SQLite WAL 保存 state、events、pending、audit、clips、clip_jobs | 审计不可写时阻断高风险动作;时间线可回放,商品事实仍由 Connector 持有 |
agents | 七类实时 Agent + PostLiveClipAgent;固定 schema、owner 和证据边界 | 采用岗位分工而非全权限 Agent;模型不可直接生成 Tool 调用 |
live_assistant | 五类 rundown、滚动互动桶、礼物/问题/健康、host attention、Qwen 9B chat insight、5 秒匿名 sidecar | 将“第二注意力”压缩为少量提示;Qwen 只处理有界窗口,确定性路径永远可用 |
orchestrator | 组装 Engine、动作状态机、人工确认、应急接管、幂等键和回执 | 外部动作有统一入口;停止/重试不会重复执行工具 |
policy | L0--L3 风险、always-confirm/block、emergency stop、本地 fail-closed;生产可替换 OPA/Rego | 商品卡/公开内容必须确认,改价/改库存直接阻断,适合企业合规 |
connectors | Mock/replay、OBS WebSocket v5、平台 bridge、商品/聊天/模型/Clip 端口 | SDK 和平台协议隔离;无真实账号时仍能离线演示和回放 |
clip_pipeline | PyAV probe、15 分钟 PCM 块、Silero VAD、Whisper、Qwen 语义/Top-K VLM、证据融合、ASS、FFmpeg 原子输出 | 60--180 秒 9:16 草稿;跨游戏/聊天/虚拟主播使用同一证据契约 |
realtime_redraw | 7860 StreamDiffusionV2 Worker;模型 registry、prepare/lease、JPEG WebSocket、MJPEG、同源 relay | Windows 不需要 CUDA;保最新帧、模型 resident 复用和失败回滚控制低延迟 |
avatar | 稳定的 AvatarService/mock 输出契约,预留 LiveTalking/Audio2Face/VTube Studio Adapter | 先把口型/动作权限接入治理,再替换真实数字人引擎 |
plugins | 自然语言生成受限 JSON/YAML DSL;白名单 Tool、条件、模拟、manifest 校验;不执行 Python/TS | 让运营能描述流程,又不开放任意代码执行 |
observability | counter/gauge/sample、p50/p95/max、GPU/模型/媒体指标接口 | 调度使用低基数指标;不把用户名、弹幕原文或 SKU 全量放入 label |
apps/api | 零后端依赖 Python HTTP 控制面,同源托管 Console;Bearer/TLS、分块上传、WS/MJPEG relay | 控制动作与媒体字节分离,适合 DGX 局域网部署 |
apps/console | React + Vite + Lucide;总览、Agent、人工确认、高光、审计、弹幕重点、重绘输出 | 桌面/移动响应式,busy 防重复,断线保留最后快照,所有按钮连接实际 API |
apps/desktop | PySide6 + Qt Quick 原生 Windows 工作台;助手、重绘、Clip、日志、参数中心 | 不携带 CUDA/模型到 Windows;主播看板和 DGX Worker 解耦,适合复制式部署 |
项目优先复用成熟引擎,自己实现直播领域的契约、治理和适配:
Software/python-venv/ Python/CUDA 推理环境
Software/frontend/ React/Vite/Lucide 依赖
Software/playwright/ 浏览器自动化与浏览器缓存
Software/models/ Whisper、Qwen、VAD、重绘权重
Software/source-cache/ 固定 revision 的外部源码
runtime/ SQLite、artifact、checkpoint、基准和日志
根目录 requirements.txt 汇总 DGX 推理、媒体、OBS、Qt 桌面和平台 bridge 的直接 Python 依赖,便于审计、IDE 和离线制品准备。正式安装仍优先使用下述 make 目标:它们会把依赖放入 Software/python-venv,并完成 CUDA、SM121 扩展、模型和本地缓存检查。
# 1. Python/媒体/ASR/剪辑依赖(首次执行)
make autoclip-install
make autoclip-install-inference
make console-install
# 2. 下载并校验本地模型(按磁盘和用途选择)
make autoclip-download-models
make chat-model-download
make chat-model-verify
make qwen-fastpath-install
# 3. 运行确定性演示和测试
make demo
make verify
# 4. 启动 DGX 控制面 + 7860 重绘 Worker
export SPARKLIVE_API_TOKEN='replace-with-a-long-random-secret'
export SPARKLIVE_HOST='0.0.0.0'
make api
API 默认端口 8787,实时重绘媒体 Worker 默认 7860。8787 是控制面和受认证 relay;原始 JPEG/音频不经过 JSON API、Event Bus 或 Audit。跨机器连接应使用受管 LAN/VPN,并配置 SPARKLIVE_TLS_CERT 与 SPARKLIVE_TLS_KEY。
make console-dev # 开发端口,默认 Vite 代理 8787
make console-build # 生产构建,由 API 同源托管
make browser-install # 项目内 Playwright 浏览器
SPARKLIVE_VISUAL_URL=http://127.0.0.1:8787 make visual-test
Console 的主要操作:运行 demo、查看 Agent/事件/高光/审计、确认或拒绝 L2/L3 proposal、切换应急接管、打开实时重绘和复制 OBS Browser Source。断线时保留最后快照,重新连接后以服务端 revision 为准。
Linux ARM64 生成 Windows 源码包:
make desktop-package-source
在 Windows 11 x64 + Visual Studio 2022 Build Tools 上:
powershell -ExecutionPolicy Bypass -File .\apps\desktop\scripts\build_windows.ps1
gameplay、virtual_avatar、commerce、talk 或 general rundown,核对 OBS、音频设备、商品目录和模型健康。Ctrl+Shift+H 记录人工高光;下播时先停止音频并等待最后 ASR 窗口排空,再导出匿名 5 秒互动桶、转写和 marker sidecar。| 参数 | 默认 | 意义 |
|---|---|---|
capture.live_audio.chunk_duration_ms | 1000 | Windows 每次认证 PUT 的 PCM 时长;越小越低延迟但请求更多 |
capture.live_audio.transcription_window_seconds | 8 | DGX 累积音频后调用 Whisper 的窗口;持续讲话用重叠窗口修订 |
capture.live_audio.vad_start/stop_threshold_db | -42/-48 | 双阈值滞回,降低键盘/游戏声误触发 |
live_assistant.attention.max_visible_prompts | 3 | 主工作台同时显示的关键提示数;主播窗固定更少 |
live_assistant.analysis.chat_window_seconds | 60 | 弹幕重点和重复问题的滚动窗口 |
live_assistant.chat_insight.interval_seconds | 10 | Qwen 复核节拍;即时排序不等待它 |
live_assistant.chat_insight.max_output_tokens | 96 | 模型摘要上限,控制延迟和显存 |
clip_pipeline.workflow.min/max_duration_seconds | 60/180 | 自动切片时长边界 |
clip_pipeline.workflow.max_evidence | 512 | Agent 可接收的结构化证据上限 |
clip_pipeline.render.encoder_preferences | NVENC→x264 | 有 NVENC 使用硬件编码,否则软件回退 |
policy.auto_execute_risks | L0/L1 | 可自动执行的风险级别;L2/L3 默认需要确认 |
完整 schema 在 config/default.json;Windows 参数中心只暴露主播能理解且确实影响链路的字段\。
# 健康检查
curl http://127.0.0.1:8787/api/health
# 读取统一快照
curl -H "Authorization: Bearer $SPARKLIVE_API_TOKEN" \
http://127.0.0.1:8787/api/snapshot
# 运行离线演示(会产生结构化事件、proposal、审计和高光草稿)
curl -X POST -H "Content-Type: application/json" \
-H "X-Idempotency-Key: demo-20260721-001" \
http://127.0.0.1:8787/api/demo/run
版本化模块 API 位于 /api/v1/<module>;所有控制 POST 都支持 X-Idempotency-Key。外部事件入口只接受白名单结构化事件,不能注入内部 agent.proposal 或 tool.result。
本章面向主播、场控和直播技术负责人。它把安装说明、现场操作和故障处置放在一条工作流里:主播只需要掌握场次、提示、音频和确认;技术负责人负责 DGX、OBS、模型和网络边界。
推荐一台 Windows 主播机配合一台 DGX Spark:
| 位置 | 职责 |
|---|---|
| Windows + OBS | 推流、录制、摄像头/音频采集、原生主播工作台、置顶主播窗和 OBS 观众窗 |
| DGX Spark | API、Multi-Agent、Policy、Audit、SQLite、Whisper/Qwen、平台 Adapter、重绘与 Clip Worker |
| OBS WebSocket | 场景、来源、文字、推流/录制状态等结构化控制;不承载连续媒体 |
| Live Audio 数据面 | Windows 将指定设备转为 16 kHz 单声道 PCM,经 VAD 后受认证发送到 DGX |
| Realtime Redraw 数据面 | Windows 摄像头 JPEG 经 8787 同源 relay 进入 7860 Worker,生成帧以 MJPEG 返回 |
| Clip 数据面 | 录像按 4 MiB 分块续传;原始字节不进入 Event Bus 或 Audit |
关键数据保存在项目目录内:
runtime/sparklive.db 运行状态、时间线、pending 和审计
runtime/live-assistant/<session_id>/ transcript、平台 sidecar 和 marker
runtime/live-audio/<audio_session>/windows/ 受限 ASR 短窗,默认处理后删除
runtime/uploads/<upload_id>/ 可续传录像临时文件
runtime/autoclip/<job_id>/ checkpoint、阶段指标、证据和计划
runtime/clips/ 本地 MP4 草稿
Software/ 模型、venv、Node、浏览器和媒体工具
原始媒体、Cookie、Token、OBS 密码和完整平台 payload 不进入事件总线。控制动作保留 correlation_id 与 idempotency_key,重试不会重复执行 OBS 或上传动作。
在 DGX 上启动服务:
export SPARKLIVE_API_TOKEN='replace-with-a-long-random-secret'
export SPARKLIVE_HOST='0.0.0.0'
export SPARKLIVE_PORT='8787'
make api
跨不可信网络时同时配置 SPARKLIVE_TLS_CERT、SPARKLIVE_TLS_KEY,或使用受管 VPN。Windows 工作台中填写 http(s)://<DGX-LAN-IP>:8787 和相同 Token;Token 仅保存在当前进程,不写入 QSettings。
连接成功后,工作台提供五个工作区:
主播可使用以下快捷键:
| 快捷键 | 行为 |
|---|---|
Ctrl+Shift+S | 开始、暂停或恢复当前场次 |
Ctrl+Shift+H | 以当前 PTS 记录人工高光 |
Ctrl+Shift+A | 完成当前第一条主播提示 |
Ctrl+Shift+F | 切换专注模式,只保留 high/critical 提示 |
开播前应在目标 Windows 全屏游戏中测试快捷键冲突、麦克风权限、DPI 和 OBS Window Capture。
OBS 28+ 已内置 obs-websocket v5。技术负责人按以下顺序配置:
4455 并设置强密码。商品特写、休息画面、limited-offer 和 screen-capture。export SPARKLIVE_OBS_ADAPTER=websocket
export SPARKLIVE_OBS_HOST=192.168.1.50
export SPARKLIVE_OBS_PORT=4455
export SPARKLIVE_OBS_PASSWORD='set-only-in-this-shell'
make api-obs
/api/snapshot,确认 obs.adapter=obs-websocket-v5、obs.connected=true,并检查 command/event/telemetry lane。SparkLive 已注册 obs.set_scene、obs.show_overlay 和 obs.hide_source。逻辑 overlay 可以在 config/default.json 映射到既有 OBS 来源:
"overlays": {
"limited-offer": {
"scene": "商品讲解",
"source": "SparkLive 优惠层",
"text_input": "SparkLive 优惠文案",
"transform": {"positionX": 1320.0, "positionY": 120.0}
}
}
主工作台顶部的广播按钮会打开两个独立窗口:
SparkLive 主播提示:约 470x410,置顶,只显示主播私有信息。SparkLive 观众提示层:约 720x180,供 OBS Window Capture 使用。OBS 只采集观众提示层。该窗口优先显示主播明确授权的 live_caption;普通公开提示必须先创建 L2 proposal,再由操作者确认展示。问题队列、礼物列表和私有建议不会出现在观众窗口。
实时重绘使用另一个纯画面窗口 SparkLive Studio - StreamDiffusionV2 OBS Output。它不显示 Prompt、参数、日志或参考图。运行中可以热更新 Prompt;模型、分辨率和步数等需要重建 pipeline 的参数在停止前锁定。
工作台读取 Windows 录音设备,可选择两种接线:
CABLE Input,工作台读取 CABLE Output。使用耳机检查双声、回声和啸叫,避免把桌面音频再次监听回扬声器或麦克风。完整处理链如下:
麦克风 / OBS 虚拟录音端
-> Qt QAudioSource
-> PCM16 下混与重采样
-> 20 ms 自适应 VAD、双阈值、前后留白
-> 语音块 + 场次 PTS + VAD gap 的认证 PUT
-> DGX 静音兜底与重叠增量窗口
-> 本地 Whisper
-> interim/final speech.transcript
-> 主播看板、sidecar、OBS live_caption 和窄职责 Agent
主播操作步骤:
1000 ms 分块 / 8 s 识别窗 / -42 dB 开始 / 600 ms 句尾静音。base_pts_ms 后,Windows 才打开设备。utterance_id 合并为最终句。stopping 进入 stopped,再结束助手场次。VAD 与增量参数:
| 参数 | 默认 | 调整建议 |
|---|---|---|
chunk_duration_ms | 1000 ms | 可选 250/500/1000/2000;越短反馈更快,请求和 gap 风险更高 |
transcription_window_seconds | 8 s | 可选 2--30 s;4 s 适合快速反馈,8 s 是稳定平衡 |
vad_start_threshold_db | -42 dB | 噪声误触发时提高到 -38/-36;轻声漏检时降低到约 -46 |
vad_stop_threshold_db | -48 dB | 必须不高于开始阈值,形成起止滞回 |
vad_min_speech_ms | 160 ms | 过滤点击、键盘等短促瞬态 |
vad_min_silence_ms | 600 ms | 长句被截断时提高到 800--1200 ms |
vad_pre_roll_ms / post_roll_ms | 240/600 ms | 首字或尾字被吞时分别增加 |
vad_calibration_ms | 400 ms | 估计房间噪声底;开始后立即说话时可缩短 |
streaming_overlap_ms | 1000 ms | 修复跨窗断句,必须小于流式窗口 |
max_pending_windows | 4 | DGX 有界 ASR 队列;过载时丢最旧窗口并明确记录 gap |
五类默认流程:
| Profile | 默认阶段(分钟) | 典型内容 |
|---|---|---|
gameplay | 开场 5;热身 10;主对局 45;互动 10;收尾 5 | 游戏解说、排位、赛事 |
virtual_avatar | 模型确认 5;主题 35;互动 15;收尾 5 | 角色表演、虚拟直播 |
commerce | 开场 5;商品 A 15;问答 8;商品 B 15;收尾 7 | 商品演示、事实问答 |
talk | 开场 5;主题 35;问答 15;收尾 5 | 聊天、访谈、知识内容 |
general | 开场 5;主内容 40;互动 10;收尾 5 | 混合节目 |
阶段结束前默认 60 秒提示。流程修改从下一场生效;提醒、互动和健康阈值保存后立即生效。
提示卡支持“稍后”“已处理”和“申请送入观众层”。主看板显示服务端允许的 1--5 条提示,置顶窗最多显示两条;专注模式只过滤主播窗,不关闭安全告警、数据采集或主看板。
互动区保留滚动弹幕速率、主题、重复问题和礼物待谢。勾选礼物只标记主播已感谢。Ctrl+Shift+H 生成权威人工 marker,进入实时 Clip 候选和下播 sidecar,但仍经过素材、边界、隐私和版权检查。
首次部署使用 Mock/replay 验证流程:在平台 Adapter 中选择平台、Mock / 离线 和合法房间标识。该模式不访问网络,可以稳定演练弹幕、礼物、人数、gap 和审批。
显式学习环境可安装隔离 bridge:
make platform-adapters-install
export SPARKLIVE_ENABLE_COMMUNITY_ADAPTERS=1
make api
启动 community 模式需要同时满足服务端开关、UI“已取得主播授权”的二次确认和合法房间号。bridge 输出最小化 NDJSON,Connector 负责匿名引用、去重、gap、进程监督和健康快照;Cookie、WBI key 和设备标识不离开 bridge 进程。
平台指标始终保留原语义:只有 concurrent_viewers 表示同时在线;popularity、cumulative_views、room_entries 分别表示热度、累计观看和进房。
结束场次后生成:
runtime/live-assistant/<session_id>/transcript.json
runtime/live-assistant/<session_id>/platform-sidecar.json
sidecar 保存匿名 5 秒互动桶、平台指标原语义、duplicate ratio、gap、transcript URI、自动/人工 marker、profile、settings revision 和实际 rundown 边界。建议在开始 OBS 录制时同步开始助手场次,使录像、转录和 marker 共用时间轴。
桌面端智能切片流程:
.mp4/.mkv/.mov/.m4v/.webm/.ts/.flv 录像。auto/gameplay/talk/virtual_avatar/general profile 和 1--3 条输出。七阶段产物:
| 阶段 | 处理 | 主要产物 |
|---|---|---|
probe | PyAV 读取容器、轨道、时长、FPS、编码和 PTS | probe.json |
audio | 15 分钟、2 秒重叠的 16 kHz PCM | audio/、chunk plan |
asr | VAD 合并语音,Whisper 批量转写 | transcript.json |
subtitles | word/segment timestamp 生成 ASS | subtitles.ass |
evidence | 音频、场景、sidecar、语义和 Top-K 视觉证据 | evidence.json |
plan | profile 融合、负信号、边界、NMS 和 QC | workflow-plan.json |
render | 白名单 FFmpeg、字幕、原子替换和基础 QC | MP4、render-audit.json |
高光选择先用 15 秒窗口/5 秒步长召回,再融合语义、画面、游戏、声音和观众反应。单纯弹幕、关键词、响度或镜头变化不能独立过线;重复刷屏、黑帧、静音、BRB 和观众快速下跌属于负证据。最终片段吸附句子/话题/镜头边界,并重新检查隐私和版权。
DGX 本地 CLI 同样可用:
make autoclip-run RECORDING=/path/to/live.mkv
make autoclip-run RECORDING=/path/to/live.mkv EXECUTE=1
第一条只生成计划,第二条是操作者明确授权的本地渲染。
| 目标 | 推荐调整 | 影响 |
|---|---|---|
| 更快字幕反馈 | 500 ms 分块、4 s 识别窗 | 请求约翻倍,对 LAN 稳定性要求更高 |
| 更稳的默认 ASR | 1000 ms 分块、8 s 识别窗 | 延迟、上下文和请求量平衡 |
| 长句少截断 | 句尾静音提高到 800--1200 ms | 最终句稍晚,完整度更高 |
| 更严格高光 | 提高对应 profile threshold | 候选更少,precision 更高 |
| 保留更多铺垫 | 提高 workflow.selection.lead_in_ratio | 高光点前上下文增加 |
| 更少视觉开销 | 降低 vision_top_k/frames 或关闭视觉复核 | 保留确定性证据融合 |
| 推流优先 | 增加 reserved_for_other_workloads_gb | 需同步降低模型驻留或 headroom,三项总和不超过 120 GB |
Clip 默认输出 9:16 / 1080x1920 / 60--180 s / -14 LUFS,编码优先 NVENC、回退 x264。字幕、画面、编码和模型预算的完整默认值统一位于 config/default.json,服务端会重新校验所有 Windows 覆盖值。
| 现象 | 检查与恢复 |
|---|---|
| Windows 连接被拒绝 | 确认 make api、地址、端口、SPARKLIVE_HOST、Token、防火墙和证书;401/403 重新输入完全一致的 Token |
obs.connected=false | 检查 OBS WebSocket、4455、密码、DGX IP 和 make obs-install;场景/来源名称区分大小写 |
| 观众窗没有字幕 | 确认转写与观众字幕两个开关、本次模式为本地 Whisper,并检查 OBS 捕获的是观众窗而非主播窗 |
| 有 RMS 但不发送 | VAD 未越过开始阈值;先检查 Windows 输入增益,再一次只调整一个阈值 |
| 已发送但没有文字 | 检查 Whisper prepare/worker 状态;演练模式只验证设备、VAD、网络和 PTS |
| OBS 虚拟声卡无峰值 | 核对 OBS 监听播放端、Source“监听并输出”和工作台配对录音端 |
| 延迟或丢弃持续增加 | 检查 LAN/TLS,停止竞争 GPU 的任务并重启音频会话;客户端和 DGX 队列均有界,不会无限缓存 |
平台 gap/degraded | 把断线期视为未知,检查 bridge/官方 Adapter 和诊断日志,不把零值当真实数据 |
模型任务 ready_for_worker | dry-run 下表示任务已就绪;使用本地 Qwen 前先验证权重并选择受支持的 Worker 模式 |
| Clip 上传中断 | 暂停/继续或重新连接;客户端从服务端 received_size 续传,未完成分块会回滚 |
| Clip 任务失败/中断 | 在相同源、sidecar 和配置 digest 下恢复 checkpoint;没有候选时核对音轨、profile、阈值和 marker |
| 配置保存 409 | 另一客户端已更新 revision;重新读取服务端值,合并本地草稿后保存 |
| 内存预算被拒 | 保证 reserved + resident + headroom <= 120 GB |
故障时系统保留确定性提示、mock/replay 和本地计划能力。Policy、Audit、授权或事实源不可用时,高风险动作关闭;模型失败不自动切云,也不伪造结果。
开播前
直播中
Ctrl+Shift+H,平台 gap 记录为未知而不是零互动。下播后
runtime artifact。| 类别 | 模型/服务 | 项目用途 | 权重/来源 | 许可证提示 |
|---|---|---|---|---|
| ASR smoke | ggml-tiny | 11 秒 CUDA 运行时探针 | Software/models/asr/whisper.cpp/ggml-tiny.bin | MIT;仅作运行时检查,商业再分发前复核模型卡 |
| ASR | AI-ModelScope/whisper-large-v3 | 实时句级转写、录播全文转写 | Software/models/asr/AI-ModelScope/whisper-large-v3 | Apache-2.0;以精确模型卡为准 |
| VAD | Silero v6.2.0 / whisper.cpp ggml | 静音抑制、录播语音分段 | Software/models/vad/ggml-org/whisper-vad | MIT |
| 文本/多模态 | Qwen/Qwen3.5-9B BF16 | 高频弹幕重点和摘要 | Software/models/multimodal/Qwen/Qwen3.5-9B-BF16-source | Apache-2.0;固定本地权重 |
| 文本/多模态 | Qwen/Qwen3.5-27B-FP8 | 低频复杂语义、Top-K VLM、Clip | Software/models/multimodal/Qwen/Qwen3.5-27B-FP8 | Apache-2.0;受 60 GB 单模型预算治理 |
| 兼容别名 | semantic_llm、candidate_vlm | 指向同一 Qwen3.5-27B 权重的语义/候选角色 | config/autoclip-models.json | 与目标 checkpoint 相同 |
| 可选 VLM/音频 | Step3-VL-10B-FP8、Step-Audio-2-mini | Top-K 视觉/音频复核端口 | config/autoclip-models.json | Apache-2.0;按模型卡和 Adapter 状态使用 |
| 可选远程端口 | stepaudio-2.5-asr | 授权环境的带时间戳/说话人云端对照 | 仅登记在模型清单,默认关闭 | 商业 StepFun API 条款;SparkLive 默认本地优先、不调用 |
| 预算拒绝项 | Step-3.7-Flash | 记录资源预算边界,不进入 Worker | config/autoclip-models.json | Apache-2.0;运行时和 KV cache 超出本地 60 GB clip 预算 |
| 视觉/检索 | OpenCV YuNet、Qwen3-Embedding-0.6B | 人脸目标 track、候选语义去重 | 配置中的可选路径 | MIT/Apache-2.0,需核对精确文件 |
| 实时重绘 | Wan2.1 T2V 1.3B + Causal-DMD、SD-Turbo、SD 1.5+LCM、Hyper-SDXL、FLUX.2 Klein 4B FP8 | 摄像头风格化/角色化/参考图 | Software/models/realtime-redraw、streamdiffusionv2 | 基础模型分别遵循模型卡;SD 1.5 CreativeML Open RAIL-M、LCM/SDXL OpenRAIL++、FLUX/IP-Adapter Apache-2.0 等 |
| 组件 | 复用方式 | 许可证/风险 |
|---|---|---|
| OBS Studio + obs-websocket v5 | 控制场景、来源、字幕和状态;不承载连续音视频 | GPL-2.0;插件和分发需单独核对 |
| Bilibili Open Live、抖音直播开放能力 | 通过官方授权的长链/回调接入弹幕、礼物、点赞等最小事件 | 需要主播/主体授权、验签、去重、乱序/丢失处理;平台字段不能互相推算 |
| ModelScope | 下载并校验 Whisper、Qwen、VAD 等本地权重 | 只允许显式操作者下载;权重许可以模型卡为准 |
| FFmpeg、nv-codec-headers、PyAV | probe、裁切、ASS、H.264/AAC、NVENC/NVDEC | FFmpeg 构建选项决定 GPL/LGPL;项目区分开发构建和分发构建 |
| StreamDiffusionV2、draw-realtime、BFL FLUX2 | 固定 commit 的媒体管线/模型结构参考与适配 | 当前固定 Apache-2.0 源码 revision;权重条款另行核对 |
| whisper.cpp、faster-whisper、PySceneDetect | ASR 运行时、场景边界和离线工具 | MIT/BSD-3-Clause;CTranslate2 ARM64/CUDA 组合需实测 |
| Qt/PySide6、React/Vite、Lucide | Windows 原生 UI、Web Console、图标 | LGPL/商业 Qt 条款、MIT;分发时保留 notices |
| NVIDIA DGX Spark playbooks、CloudEvents、NATS、OPA、LanceDB | 架构和后续 Adapter 参考 | 各仓库许可证独立 |
DouyinLiveWebFetcher、bilive-danmaku | 仅隔离的学习/replay bridge | 分别 AGPL-3.0/MIT;默认关闭,不作为未授权生产数据源 |
下表区分“随项目缓存/直接适配”和“架构参考/预留端口”。所有实际下载由 make 目标触发并落在 Software/。
| 领域 | 仓库 |
|---|---|
| 直播/媒体 | OBS Studio、obs-websocket、FFmpeg、nv-codec-headers、PyAV、GStreamer、Haivision SRT |
| 实时重绘 | StreamDiffusionV2、draw-realtime、BFL FLUX.2、Diffusers |
| 语音/视觉 | whisper.cpp、faster-whisper、Silero VAD、PySceneDetect、OpenCV Zoo YuNet、FunClip |
| 模型/本地 AI | Qwen、Qwen3-VL、NVIDIA DGX Spark playbooks(live-vlm-webui、multi-agent-chatbot、VSS) |
| 编排/治理 | CloudEvents、NATS、LangGraph、OPA、Wasmtime、LanceDB |
| 应用/可观测 | FastAPI、Vite、React、Lucide、OpenTelemetry Python、Prometheus Python Client |
| 数字人/平台研究 | LiveTalking、Open-LLM-VTuber、DouyinLiveWebFetcher、bilive-danmaku、blivedm、Douyin Open API credential |
SparkLive Studio 原创业务代码以 Apache License 2.0 开源。该许可证允许个人和企业使用、修改、分发及商业部署,同时要求保留版权声明、许可证文本、NOTICE 内容和适用的修改说明;Apache-2.0 还提供明确的贡献者专利授权,但不授予项目名称、标识或第三方资产的商标权。
根许可证只覆盖本项目贡献者有权授权的原创代码,不改变任何外部组件的许可:
Software/ 中按需下载的外部仓库、Python/Node 依赖和工具继续遵循各自上游许可证;发行包只应携带实际分发组件对应的完整许可和署名文本。DouyinLiveWebFetcher 的 AGPL-3.0 源码保持进程与分发隔离,不作为 Apache-2.0 核心的一部分;bilive-danmaku 的 MIT 版权与许可声明必须保留。nonfree 的 FFmpeg 开发构建不得直接作为公开二进制制品重新分发。项目级署名和边界声明见 NOTICE,Windows 桌面发行涉及的开发期清单见 apps/desktop/THIRD_PARTY_NOTICES.md。商业发行方仍应按照实际装入制品的精确版本生成最终第三方许可证清单。
ActionProposal;不能直接调用 OBS、平台、文件、网络或发布接口。SPARKLIVE_API_TOKEN;跨不可信网络启用 TLS 或受管 VPN;Token 不写入 QSettings。SparkLive 的直接买单者可以是三类客户:
公开市场数据能证明预算存在,但不能替项目承诺具体 ROI:
年度人工节省 = 每场被自动整理/提示的助理小时数 × 场次 × 助理综合时薪
年度云推理节省 = 每月音频分钟×ASR 云价 + 每月视频分钟×VLM/剪辑云价
新增收益 = 高光复用带来的可归因播放/转化增量
项目净价值 = 三项收益 - DGX 折旧/电力 - 运维和授权成本
项目实测说明本地化确实能把重任务放进同一设备:Qwen 9B 的确定性即时路径不等待模型;27B 只在有预算的低频窗口运行;70 秒录播已完成本地 ASR/语义/渲染闭环。商业试点应以 10 场主播基线记录以下指标:主播被打断次数、未回答问题比例、错误商品事实次数、人工高光整理分钟数、Clip 出片时长、GPU/网络故障恢复时间和观众/转化变化。这样 ROI 来自真实运营数据,而不是泛化的“AI 提效百分比”。
| 阶段 | 交付 | 成功指标 |
|---|---|---|
| 第 1--2 周 | DGX、Windows 客户端、OBS、mock/replay、商品目录 | 开播检查、提示、确认、审计全链路可演示 |
| 第 3--6 周 | 1--3 位主播的授权平台事件、Whisper/VAD、Qwen 弹幕重点 | 首字/最终句延迟、误触发、掉帧、提示采纳率可记录 |
| 第 7--10 周 | 直播 sidecar、自动切片、人工 marker、9:16 本地草稿 | 下播到草稿时间、候选 Precision@3、边界 IoU、人工复核分钟数 |
| 第 11--13 周 | 多主播并行、角色权限、备份与保留期 | 无重复工具动作、故障恢复、每场成本、主播满意度与转化对照 |
试点结束后可以选择按设备销售、按工作室订阅、按本地 Worker 节点授权或与硬件/平台联合交付。
apps/api/ 控制面 HTTP API + 7860 媒体 relay
apps/console/ React/Vite Web 操作台
apps/desktop/ PySide6/Qt Quick Windows 主播工作台
apps/redraw/ StreamDiffusionV2 多模型 Worker
src/sparklive/ contracts/capture/perception/agents/policy/...
config/default.json 运行时配置和风险边界
config/autoclip-models.json 模型、来源、SHA-256、资源策略
requirements.txt 完整 Python 直接依赖与 DGX/Windows 平台标记
tests/ 契约、策略、Agent、API、桌面结构和 Clip 回归
Software/ 所有依赖、浏览器、源码缓存和模型
runtime/ 本地数据库、artifact、checkpoint、基准和截图
建议阅读顺序:
make test # Python 单元/契约回归
make verify # test + Console production build
make visual-test # API 启动后执行 Web desktop/mobile/output 回归
make desktop-visual-test # Qt Quick 离屏窗口矩阵
3 commits
Python
77.7%
QML
13.9%
TypeScript
3.0%
CSS
1.5%
Shell
1.5%
JavaScript
1.2%