Skip to content

Repository files navigation

Broccoli Logo

🥦 Broccoli

视频 → 简介.md 智能总结 · 多用户自部署版

把一段视频自动变成一份图文速览 Markdown —— 整体框架、关键时间轴、关键画面截图、语音转写,一次生成,随时回看

GitHub Stars GitHub Forks License Version Python

抖音 B站 YouTube 直链 本地视频

FastAPI FunASR 豆包视觉 DeepSeek Docker AI问答

简体中文 | English


把一段视频(本地文件或 抖音/B站/YouTube/直链 网址)自动变成一份图文速览 Markdown: 整体框架、关键时间轴、关键画面截图、语音转写,一次生成,随时回看。

本项目是可自部署的多用户 Web 应用:下载后自己配 API Key、自己跑,注册账号登录, 每个账号都有独立的历史记录(历史里的每一份总结都能在线查看 / 下载 / 删除)。 你的视频只经过你自己的机器,数据不出门。


✨ 功能特性

  • 🎞️ 本地视频拖拽上传,或粘贴视频网址(抖音零配置解析、B站、YouTube、直链)
  • 🧠 三级智能流水线:FunASR 中文转写 → 豆包视觉看图 → DeepSeek 成稿
  • 📚 账号密码登录(开放注册),每用户独立历史记录,SQLite 持久化、重启不丢
  • 🔒 文件按用户隔离,所有接口做属主校验,跨账号访问一律 403
  • 📄 结果支持:在线预览(左源码右渲染)、下载 .md、下载 zip 打包(含截图,离线可看)
  • 💬 对视频 AI 提问:生成后可直接问「男主有没有唱歌?」「男女主最后亲吻了吗?」—— 以转写稿+截图作上下文,默认走你自带的 Key(DeepSeek 文本 / 豆包看图),智谱免费模型兜底,问答历史可回看
  • 🐳 Docker 一条命令跑通;也可原生 Python 直接跑

🚀 快速开始

方式一:Docker(推荐,最省心)

需要先装 Docker完全没装过 Docker 的 Windows 用户,请先看 docs/Docker部署教程.md(从装 Docker 到跑通,逐步图解)。

git clone https://github.com/tobyberry666/Broccoli
cd Broccoli
cp .env.example .env        # 然后编辑 .env 填入你的 API Key(见下节)
docker compose up -d --build

🇨🇳 国内网络加速:默认 pip 直连 pypi.org 很慢。在 .env 加一行 PIP_INDEX_URL=https://pypi.tuna.tsinghua.edu.cn/simple 再用清华源构建,能省一大半时间。 项目会挂载宿主机 modelscope_cache/hf_cache/ 复用已下载的模型,不会在容器里重复下载。

浏览器打开 http://localhost:8000 → 注册账号 → 开用。 数据保存在 ./data,容器重建/升级不丢。

方式二:原生 Python

  • 需要 Python 3.10 ~ 3.14,Windows / Linux / macOS 均可
  • ffmpeg 无需单独安装(imageio-ffmpeg 自带二进制)
git clone https://github.com/tobyberry666/Broccoli
cd Broccoli
python -m venv venv && source venv/bin/activate   # Windows: venv\Scripts\activate
pip install -r requirements.txt
cp .env.example .env        # 编辑填入 API Key
python -m uvicorn main:app --host 0.0.0.0 --port 8000

Windows 也可以直接双击 start.bat;Linux/macOS 可 ./start.sh

⚠️ 首次运行会自动下载 ASR 模型(FunASR 约 2.1G,faster-whisper 备用约 240M), 之后命中缓存不再下载。模型缓存目录:modelscope_cache/hf_cache/

🔑 获取 API Key

填 Key 有两种方式(通用,下面拿 Key 的步骤两种填法都一样):

  • 方式 A · .env(全局默认):把 Key 写进 .env,所有账号在网页没单独配时自动共用。 适合运维给一台服务器统一配好、全员开箱即用。
  • 方式 B · 网页「⚙️ 设置」页(每用户独立):登录后给自己填 Key,仅对自己生效、多人互不干扰。 个人玩家完全可以不碰 .env,注册登录后直接去设置页填,填完立即生效、无需重启。
用途 服务 是否必填 说明
写总结文档 DeepSeek ✅ 必填 https://platform.deepseek.com 创建 Key
看画面截图 火山方舟·豆包 建议 不配则产出无截图版 md
语音转写兜底 OpenAI Whisper API 可选 本地模型下载失败时自动回退

DeepSeek(必填)

  1. 注册 https://platform.deepseek.com → API Keys → 创建
  2. 填入 .envDEEPSEEK_API_KEY

火山方舟·豆包视觉(强烈建议)

  1. 打开火山方舟控制台 https://console.volcengine.com/ark
  2. 「API Key 管理」创建 Key → 填 ARK_API_KEY
  3. 「在线推理 → 创建推理端点」,选 doubao-seed-2-1 系列模型,得到 ep- 开头的端点 ID
  4. ARK_VISION_MODEL=ep-xxxx⚠️ 必须填端点 ID,直接填模型名会 404)

智谱 · AI 问答兜底(可选,免费)

  1. 打开 https://open.bigmodel.cn 注册并实名认证 → 「API Keys」创建 Key
  2. 填入 .envZHIPU_API_KEY
  3. 这是兜底模型:文本问答默认走 DeepSeek、看图默认走豆包;它们没配时才用智谱免费模型 (文本 GLM-4.7-Flash、看图 GLM-4V-Flash;免费档高峰期限流会逐个降级,最后仍失败会明确报错)
  4. 不配也完全能用:提问直接走 DeepSeek(文本)+ 豆包(看图)

⚙️ 每用户 API Key(网页设置页)

不想动手改 .env?登录后直接在网页里填自己的 Key 就行,每个账号独立、互不干扰:

  1. 登录后点右上角 ⚙️ 设置(或直接访问 /settings)。
  2. 页面顶部状态条实时显示 DeepSeek / 豆包视觉 / 智谱问答 / OpenAI 兜底 各自是否「已就绪」(绿)/「未配置」(红)。
  3. 每组卡片填对应字段(如火山方舟的 ARK_API_KEY + ARK_VISION_MODEL 端点 ID、 DeepSeek 的 DEEPSEEK_API_KEY),点「👁」可临时显示/隐藏明文;改完点 保存全部改动,立即生效、无需重启。
  4. 每张卡有 测试连接 按钮:会真实发一个极小的探针请求验证 Key 是否有效 (用一张 14×14 的测试图,不消耗真实额度),结果直接回显在卡片上。
  5. 单字段 清除 只清当前账号该字段的自定义值、回退到 .env清空我的全部自定义配置 一键还原到全局默认。

优先级(高 → 低):用户设置页填的 > .env 全局默认 > 内置默认。 也就是说:你填了就用自己的,没填就用服务器 .env 的,.env 也没有就提示去设置页。

落库安全:用户级 Key 用标准库实现的对称加密(secretbox, Encrypt-then-MAC + SHA256-CTR)存储,数据库文件里搜不到明文 Key; 非敏感字段(如端点 ID)明文存,便于排查。主密钥取 APP_SECRET_KEY, 没设则首次启动自动生成 data/.secret_key

📖 使用

  1. 注册/登录:打开页面即见登录框,注册后自动登录

  2. 配置 API Key(可选):若服务器没配 .env,首次点「开始总结」会提示去 「⚙️ 设置」填自己的 DeepSeek / 火山方舟 Key(详见上节),填完立即可用。 服务器已配 .env 则跳过这步。

  3. 生成总结:拖入视频文件,或粘贴视频网址 → 点「开始总结」

    • 页面实时显示各阶段进度(下载→分析→抽帧→转写→看图→成稿)
    • 抖音链接:自动解析无水印直链下载,无需登录
    • 腾讯会议回放需登录态,请先用浏览器下载 mp4 再上传
  4. 历史记录:每次生成自动归档。可在线查看、下载 .md、下载 zip 打包、删除

  5. AI 问答:任务完成后,在结果区或历史详情页输入问题(如「中国人到底会不会飞?」「小帅到底是不是凶手?」) → 回车即得基于转写稿+截图的回答。问答记录自动保存,随时回看。

⚙️ 配置项(.env)

变量 默认 说明
DEEPSEEK_API_KEY - DeepSeek Key(必填)
ARK_API_KEY / ARK_VISION_MODEL - 豆包视觉 Key / 推理端点 ID
ASR_ENGINE funasr 转写引擎:funasr / whisper
ZHIPU_API_KEY - 智谱免费 Key,问答兜底(DeepSeek/豆包没配时用)
QA_TEXT_MODEL glm-4.7-flash 文本问答兜底模型(智谱免费;主路径是 DeepSeek)
QA_VISION_MODEL glm-4v-flash 画面问答兜底模型(智谱免费;主路径是豆包)
REGISTER_OPEN true 是否开放注册,公网部署建议 false
MAX_UPLOAD_MB 0 上传大小上限(MB),0 = 不限
MAX_CONCURRENT_JOBS 2 同时处理的任务数
MAX_JOBS_PER_USER 100 每用户历史条数上限,超出自动删最旧
KEEP_SOURCE_VIDEO false 处理完自动删源视频/音频(省磁盘);true 则保留
BLOCK_PRIVATE_URLS true 网址下载屏蔽内网地址(SSRF 防护)

🐛 常见问题

启动报端口占用([Errno 10048] 旧进程没退。Windows:PowerShell 执行 Get-Process -Id (Get-NetTCPConnection -LocalPort 8000).OwningProcess | Stop-Process -Force 再启动。

模型下载报 SSL 证书错误 代码已默认关闭证书校验([SSL-FIX-v3] 日志)。若仍失败,确认 HF_ENDPOINT 指向 https://hf-mirror.comHF_HUB_DISABLE_XET=1;彻底绕开的办法是配 OPENAI_API_KEY 走 API 回退。

抖音链接解析失败 抖音反爬策略会变。稍后重试;仍失败就从 Evil0ctal/Douyin_TikTok_Download_API 同步 douyin_api/crawlers 目录;终极兜底:手机 App 下载 mp4 后拖入上传。

视觉显示「未启用」 检查 .envARK_VISION_MODEL 是否为 ep- 开头的推理端点 ID(不是模型名); 确认方舟控制台该模型已开通。

🔒 安全提示

  • 默认开放注册:仅建议在内网/可信环境使用。若部署到公网,请设 REGISTER_OPEN=false 并自行加访问白名单(如反代鉴权),且保持 BLOCK_PRIVATE_URLS=true 防 SSRF。
  • 用户级 Key 加密存储:在网页设置页填的 Key 经 secretbox(标准库对称加密 + Encrypt-then-MAC)落库,明文不进 SQLite;主密钥来自 APP_SECRET_KEY,未设则自动生成 data/.secret_key.env 里的 Key 仍按原样读取,建议 .env 文件权限收紧、不要外泄。
  • 上传视频、生成截图与总结会占用磁盘,超出 MAX_JOBS_PER_USER 会自动清理最旧记录, 也可在历史记录里手动删除。

🧱 技术架构

FastAPI (main.py)
├── auth.py        账号密码 + HttpOnly Cookie 会话(pbkdf2 哈希,纯标准库)
├── db.py          SQLite 持久化:users / sessions / jobs(标准库 sqlite3)
├── pipeline.py    流水线:ffmpeg 抽音频+抽帧 → FunASR(→whisper→OpenAI 回退)
│                  → 豆包视觉逐帧辨认(可降级) → DeepSeek 成稿
│                  并发上限信号量;网址下载带 SSRF 防护
└── static/        纯 HTML/JS 前端(零构建):登录页 / 新建总结 / 历史记录
数据目录 data/:app.db、uploads/、frames/、output/(按用户隔离)

产物路径规则:data/frames/{user_id}/{job_id}/frame_NNNN.jpg, 总结全文同时入库(历史记录不依赖文件是否被清理)。

📜 说明

  • 本项目所有大模型调用均走外部 API(DeepSeek / 火山方舟),本地只做转码、抽帧与编排。
  • 密钥只存在于你自己的 .env,已被 gitignore,不会进仓库。
  • 仅供学习与个人使用,请遵守各视频平台条款与相关法律法规。

简体中文 | English

用爱发电 ❤️ 觉得好用就 Star 一下

About

视频 → 简介.md 智能总结 · 多用户自部署版(FastAPI + FunASR 转写 + 豆包视觉 + DeepSeek 成稿,支持对视频 AI 提问)

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages