01 · PROFILE BORDER
头像框 · 展示型挂件,不计票
用于展示成员头像 / 榜位 / 称号等身份信息。20+ 装饰皮肤可选,横/竖布局,每个实例独立 URL。点击 Copy URL 后加到 OBS Browser Source 即可。
Pawcast · Extras / Profile Border
v0.1.0
Profile Border
Voting Tool
Lucky Game
Lucky Fans
Console · 3 个实例
最大 8 个
#1
Yoochan · TOP1
活动中
布局:
横版
· Skin #07 · 标签 "KING OF TODAY"
#2
Sian · #2
竖版 · Skin #12
#3
Rohan · WIN
竖版 · Skin #03
Skin 选择 · 已选 #07
20+ 装饰皮肤
链接尺寸建议:320×120 (横版) / 200×280 (竖版)
①多实例 Console每个直播间可同时存在多个头像框(最多 8 个)。每个实例独立 URL,OBS 中分别加载,可任意叠放在直播画面上。
②布局方向横版适合放在直播间下方一字排开(左中右三人 cap 推荐);竖版适合放在两侧栏。
③20+ 装饰皮肤第一版预制 20 套,后续版本开放上传 PNG / SVG 自定义。skin_id 直接进 URL 参数。
④头像源从团员库选自动拉 TikTok 头像;从历史列表选已用过的;上传支持 PNG/JPG/WebP,自动剪裁圆形。
⑤文字标签支持中英日韩。常用:「TOP1」/「Leader」/「WIN」/「KING OF TODAY」/「冠军」/「초대」。最多 12 字符防止溢出。
实现说明挂件页是独立 HTML,通过 URL query param 接收配置:?skin=7&label=TOP1&avatar=https://...&layout=h。WebSocket 订阅头像变化(用户上传后实时更新)。
性能挂件页面加载后驻留浏览器进程,主进程通过 WS 推送增量配置。改皮肤瞬时生效,OBS 不需重新加载源。
browser source · 320×120 · transparent
挂件最终呈现这就是 3 个 Profile Border 实例同时加载到 OBS 后,叠在直播画面上的样子。三人横排,最右边的 Yoochan 用 #07 Skin + TOP1 标签突出显示。
透明背景挂件 HTML 本身是透明 body,OBS Browser Source 默认透明,可直接叠在视频流之上。
位置控制不在挂件里控制位置,由主播在 OBS 里自由拖拽源。挂件只负责把头像 + 边框 + 标签渲染出来。
02 · VOTING TOOL
投票工具 · 评论投票,2-10 个选项
观众通过在评论中输入选项关键词参与投票。结果可实时显示百分比 / 票数 / 二者皆有。常用于二选一、多选一、排序、决定下一首歌曲、决定 PK 对手等。
Pawcast · Extras / Voting Tool
v0.1.0
Profile Border
Voting Tool
Lucky Game
Lucky Fans
已结束
02:00
BEST OF THE BEST
总票数 247 · Cathy 60%
进行中
01:24
VOTE NEXT DANCER
总票数 89 · Cathy 领先
未开始
主播谁更帅
5 选项 · 待启动
链接尺寸建议:380×280
①多投票管理左侧 My Votes 列表可同时管理多个投票,支持「未开始 / 进行中 / 已结束」三状态。每个投票独立 URL。
②选项关键词匹配「选项名匹配」=观众输入 CATHY/KITTY 才计票(支持大小写不敏感、模糊匹配)。「数字匹配」=观众输入 1/2/3 即可,更易于操作但会误判。
③2-10 个选项选项过多观众难记忆。常用 2-4 个,最多 10 个。每个选项最多 12 字符。
④允许重复投票关闭:每用户仅记一票,结果更准但参与感弱。打开:可冲票数提升参与,但易被刷。
⑤实时预览右下角 Live Preview 看挂件最终呈现。改任何参数立即更新。
实现说明挂件页通过 WS 订阅评论事件,本地做关键词匹配 + 计数。每条评论的 user_id 用于"重复投票"判定。投票结束后结果落库。
防刷同一 user_id 在「不允许重复」模式下后续评论被忽略。机器人评论被基础风控过滤(评论速率异常 + 账号注册时间 <30 天)。
browser source · 380×280 · transparent
VOTE NEXT DANCER
01:24
发评论 CATHY / KITTY / MORA 参与投票 · 89 票
挂件最终呈现右上角倒计时跳动,进度条带动画推进。结束时自动锁定 + 显示最终结果 5 秒,然后淡出。
底部参与提示告诉观众输入哪些关键词。否则新观众进来不知道怎么投。
动画细节新票进来时对应进度条 0.4s 平滑增长 + 数字变化用 react-spring 做 tween。第一名进度条加 0.5px 紫色描边突出。
03 · LUCKY GAME
幸运转盘 · 抽题、抽任务、抽惩罚
2-18 个选项的可视化转盘,4 种皮肤可选,指针四向可调。10 套 Config 可一键切换,应对不同场景(暖场题库、惩罚题库、福利题库)。
Pawcast · Extras / Lucky Game
v0.1.0
Profile Border
Voting Tool
Lucky Game
Lucky Fans
Spin Operation
100
200
100
500
上次结果:500 · 21:24
Content Settings
Config Switch
选项内容(每行一个,2-18 项)
提示:选项名尽量短(≤6 字),让观众不需要侧着头读
链接尺寸建议:360×360
①转盘操作Start = 完整旋转 3-4 秒(戏剧效果)。Quick = 快速旋转 0.8 秒(场上节奏紧凑时用)。两者结果都是均等概率,可信赖。
②4 种 Spin Style1 = 简洁圆 / 2 = 金色边框(默认)/ 3 = 霓虹边框 / 4 = 节日限定(圣诞 / 新年)。
③Pointer Position4 个方向。在 OBS 里挂件位置变了要相应调整指针,否则视觉错乱。
④10 套 Config每套独立保存一组选项内容。常见用法:暖场题库 / 表情挑战 / 惩罚 / 福利金额 / 任务等。1 秒切换无需重新输入。
⑤选项 2-18 个2 = 二选一抽奖;4-8 = 标准抽题;12-18 = 抽奖盘(金额)。超过 18 个视觉太挤难辨识。
实现说明转盘用 SVG + CSS transform: rotate 实现。旋转角度用伪随机:先选目标选项,再算需要转多少度让指针落在该扇区。包含 5+ 圈基础旋转 + 缓出。
音效旋转音用 1 个 1.5s 滴答 loop,中奖鼓在停止瞬间播放(DING + 鼓震)。音频文件本地包含,不依赖 CDN。
04 · LUCKY FANS
观众抽奖 · 福利发放、中奖名单
从观众名单(关注者 / 送过礼者 / 评论过的) 中随机抽 1-5 位中奖。中奖记录可保留 + 导出。可设优先名单(VIP)/ 黑名单(已中奖过的)。
Pawcast · Extras / Lucky Fans
v0.1.0
Profile Border
Voting Tool
Lucky Game
Lucky Fans
Lucky Draw Operation
已抽 03 / 05
LUCKY DRAW · 03/05
@s0nna_a
@ju_ki_ki · @karen.j
中奖记录
03 · @s0nna_a21:30:14
02 · @ju_ki_ki21:28:42
01 · @karen.j21:26:18
List Settings
参与名单
186 人
✓ 关注者(112)
✓ 评论过的(68)
✓ 送过礼的(34)
✗ 已中奖过的(黑名单)
⚠ 提醒:抽完后请在直播间口播确认中奖人,避免争议
链接尺寸建议:320×240
①抽奖操作Start = 启动抽奖动画 + 滚动名字 2-3 秒 + 锁定中奖人。Pause = 暂停(可手动选)。Reset = 清空本场所有中奖记录重新开始。
②1-5 人/次1 = 重磅大奖;3-5 = 福利场常用。超过 5 个动画拥挤,建议拆多次抽。
③名单来源勾选哪些类型的观众可参与。每类相互独立累加。可叠加:"关注 + 送过礼" = AND。
④黑名单 / 已中奖已抽中的自动加入黑名单避免重复。手动可解除(重新参与)。
⑤导出 xlsx每场抽奖结束可一键导出 .xlsx,含中奖人 @username + 时间 + 奖品类型 + 备注。便于事后发奖记录。
实现说明名单数据来自直播间事件流:FollowEvent / ChatEvent / GiftEvent 实时聚合。抽奖时本地随机数生成(crypto.randomUUID 风格,而不是 Math.random,更公平)。
动画名字滚动用 CSS keyframes vertical scroll,每 100ms 切换一次显示名字(造成"快速滚动"视觉),最后一次 ease-out 慢下来停在中奖人。
05 · 共通操作
挂件 URL · Backup · 错误恢复
所有 Extras 挂件都有相同的 URL 复制 / 备用 URL / Backup 导出 / 错误恢复机制。
已复制挂件 URL
http://127.0.0.1:17777/widget/profile_border?id=1&skin=7&label=KING%20OF%20TODAY&avatar=https%3A%2F%2Fp16-sign.tiktok.com...
✓ 推荐尺寸:320×120(横版)。在 OBS Browser Source 中粘贴 → 设置宽高 → 拖拽到合适位置即可。
💡 如挂件无动作,可点击「备用 URL」获取替代地址。某些地区网络环境下需要切换 Route One。
URL 结构本地 17777 端口 + 挂件类型 + query 参数。所有配置 stateless 编码到 URL,主进程死了挂件也能继续工作(直到下次配置变化)。
OBS XML 导出v0.3 计划支持,可一键生成完整 OBS Scene XML,导入即用,省去手动配置。
本地端口17777 是默认端口,可在设置中改。冲突时自动 +1 试 17778、17779。改后所有已复制的 URL 失效,需重新复制。
Backup · 备份与恢复
导出当前 Extras 模块全部配置(4 个挂件 × 所有实例 / 模板)为 JSON 文件。换设备或重装系统时可一键恢复。
导出
生成 pawcast-extras-{date}.json 文件下载到本地
导入
从 .json 文件恢复(覆盖当前所有配置)
⚠ 导入会覆盖当前 Extras 配置(计票器 / 探索 / 私信 / 监控 不受影响)
JSON 格式开放格式,可手动编辑批量改配置。也可作为团队协作的"配置 commit",PR 风格管理。
覆盖策略导入默认全覆盖。后续可加 merge 模式(仅添加不冲突的)。
实现JSON schema 含 version 字段,跨大版本可能需要 migrator。文件加 .pawcast 后缀关联,双击直接导入。