Skip to content

Repository files navigation

B站 4K 竖屏音乐伴侣

把 B 站音乐视频变成适合 4K 竖置副屏的沉浸式播放器:中央始终保留 B 站原始 <video>,本地 SDXL Inpainting 只为上下空白区域联合扩图。

A local-first portrait companion for Bilibili music videos. The original video stays untouched in the center while an offline SDXL inpainting workflow extends the scene above and below.

亮点

  • 中央原画不重绘:不对原视频使用 AI、滤镜、Canvas 重绘或裁切,也不会创建第二路声音。
  • 上下联合扩图:一次生成完整 576×1024 背景,通过 48px 羽化衔接中央原视频。
  • 完全本地运行:Chrome/Edge 扩展、本地伴侣服务和 ComfyUI 都只在本机通信,不调用在线生成服务。
  • 自动跟随视频:默认每 2 秒分析一次 96×54 场景签名;画面变化时先显示普通模糊背景,再异步替换为 AI 背景。
  • 两种性能模式:A“快速生成”直接提交最新画面;C“性能优先”会在 NVIDIA GPU 繁忙时暂停新任务,并只保留最新待执行任务。
  • 安全配对:首次连接使用短时一次性配对码;之后扩展自动恢复,不需要每次刷新页面或重启服务都重新输入。

工作方式

B站原始 video ────────────────> 中央画面与唯一音频
       │
       └─ 当前帧 ─> 本地伴侣服务 ─> ComfyUI / SDXL Inpainting
                                      │
                                      └─> 上下 AI 背景

AI 结果永远只放在原视频背后。生成失败、服务离线或显卡繁忙时,中央视频仍可继续播放,并回退到普通模糊背景。

环境要求

  • Windows 10/11
  • Chrome 或 Edge
  • Node.js 20 或更高版本
  • 7-Zip(用于解压 ComfyUI portable)
  • 当前版本按 NVIDIA CUDA 显卡实现并验证;Intel/AMD 核显尚未接入当前性能策略
  • 建议至少 16 GB 内存和 12 GB NVIDIA 显存

模型和 ComfyUI 不会随仓库发布,也不会被脚本自动下载。

安装

1. 获取项目

git clone https://github.com/shechuan1220/bilibili-portrait-companion.git
cd bilibili-portrait-companion

项目自身没有运行时 npm 依赖;安装 Node.js 后即可运行测试和本地服务。

2. 准备 ComfyUI

ComfyUI 官方仓库 下载 Windows Portable 版本,用 7-Zip 解压到:

.local/ComfyUI_windows_portable/

解压后应存在:

.local/ComfyUI_windows_portable/python_embeded/python.exe
.local/ComfyUI_windows_portable/ComfyUI/main.py

3. 准备 SDXL Inpainting

从 Hugging Face 官方模型页手动下载 diffusers/stable-diffusion-xl-1.0-inpainting-0.1,使用 FP16 变体并保留 Diffusers 目录结构,放到:

.local/ComfyUI_windows_portable/ComfyUI/models/diffusers/
└─ stable-diffusion-xl-1.0-inpainting-0.1/
   ├─ model_index.json
   ├─ scheduler/
   ├─ text_encoder/
   ├─ text_encoder_2/
   ├─ tokenizer/
   ├─ tokenizer_2/
   ├─ unet/
   └─ vae/

当前版本使用 ComfyUI 内置 DiffusersLoader 和标准 DPM++ 采样,不再要求 LCM-LoRA。

4. 安装扩展

双击:

安装B站竖屏扩展.bat

也可以在 chrome://extensions/edge://extensions/ 打开开发者模式,选择“加载已解压的扩展程序”,然后选择项目内的 extension 文件夹。

使用

  1. 双击 启动离线AI.bat,保留打开的 PowerShell 窗口。
  2. 打开或刷新一个 B 站视频页面并开始播放。
  3. Alt+P,或点击扩展图标,进入竖屏模式。
  4. 打开工具栏中的“AI 开关”。
  5. 首次使用时,把 PowerShell 中显示的一次性配对码填入页面。
  6. F11 进入浏览器全屏。

配对成功后,原始令牌只保存在 chrome.storage.local;服务端只保存扩展 Origin 和令牌的 SHA-256 哈希。正常刷新页面或重启服务都会自动恢复。只有撤销配对、状态文件损坏或扩展 ID 改变时才需要重新配对。

如需主动撤销并重新配对,请先关闭正在运行的离线 AI 窗口,再执行:

powershell.exe -NoProfile -ExecutionPolicy Bypass -File .\scripts\start-offline-ai.ps1 -ResetPairing

A / C 模式

模式 行为 适合场景
A 快速生成 场景稳定后立即提交最新画面 独占显卡、优先更新背景
C 性能优先 GPU 利用率达到 80% 时暂停新任务,降到 70% 以下并持续 10 秒后恢复 同时玩游戏或运行其他 GPU 程序

C 模式不会中断已经开始的生成。连续高负载 30 秒后才会卸载模型,完整卸载与重载之间至少间隔 120 秒。

隐私与安全

  • 扩展只注入 https://www.bilibili.com/*
  • 扩展只请求 activeTabstorage 和本机 http://127.0.0.1:32145/* 权限。
  • 本地服务只监听 127.0.0.1,未配对时只能访问非敏感健康检查。
  • 生成请求同时校验 chrome-extension:// Origin 和高熵令牌。
  • 原始令牌不会写入 DOM、URL、日志、ComfyUI 工作流或模型文件。
  • 捕获帧、生成结果、模型和配对状态都位于被 Git 忽略的 .local/,不会上传到本仓库。

常见问题

页面显示“AI 暂不可用”

确认 启动离线AI.bat 打开的窗口仍在运行。若窗口已关闭,重新启动后刷新 B 站页面;持久配对通常会自动恢复。

页面仍显示旧背景

把 AI 开关关闭再打开一次,或等待下一次明显的场景变化。生成期间会先显示普通模糊背景。

显存不足或影响其他程序

切换到 C“性能优先”。当前标准工作流使用 20 步;性能档使用 12 步。若仍不足,需要降低其他程序的显存占用。

DiffusersLoader 不存在

本项目首版固定使用 ComfyUI 内置但已标记 deprecated 的 DiffusersLoader。ComfyUI 升级后如果该节点被移除,需要切回项目验证过的 ComfyUI 版本,或等待项目迁移工作流。

独立播放器(不使用扩展)

仓库仍保留基于标签页采集的独立播放器:双击 启动播放器.bat,选择正在播放的 B 站标签页并勾选“分享标签页音频”。该入口主要用于测试中央原视频、列表连播和普通模糊背景;推荐的离线 AI 使用方式仍是浏览器扩展。

开发与验证

npm test
node --check .\src\player.js

当前测试覆盖扩展权限、场景检测、任务队列、GPU 性能策略、ComfyUI 客户端、上下联合扩图工作流、配对有效期、失败限流、Origin、令牌哈希持久化与撤销。

项目结构:

extension/   Chrome/Edge Manifest V3 扩展
companion/   本地配对、任务调度、GPU 策略和 ComfyUI 客户端
scripts/     播放器与统一离线 AI 启动入口
src/         独立标签页采集播放器
tests/       Node.js 自动测试
docs/        设计与实施记录

许可证与声明

项目代码使用 MIT License。SDXL Inpainting、ComfyUI、B 站内容及相关商标分别受其自身许可证和条款约束。

本项目是非官方个人项目,与哔哩哔哩、ComfyUI 或模型发布方不存在隶属、合作或背书关系。请仅处理你有权播放和生成的内容。

About

B站 4K 竖屏音乐伴侣:保留中央原视频,使用本地 SDXL 为上下区域联合扩图。

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages