idwts/Crayotter

GitHub: idwts/Crayotter

Crayotter 是一个基于多模态大模型和 LangGraph 的 AI 视频剪辑智能体,通过三阶段可追溯工作流实现从文本需求到成品视频的端到端全自动生产。

Stars: 164 | Forks: 10

# Crayotter

English | 中文

Crayotter Logo

Interactive Demo Star Crayotter on GitHub Research Blog arXiv Paper

如果 Crayotter 对您的研究或演示有帮助,请在 GitHub 上给本仓库点个 Star。

Crayotter 是一个多模态、agent 驱动的视频编辑系统,能将单条文本请求转化为完整的编辑后视频。它将**规划**、**深度编辑研究**和**基于工具的执行**结合为一个三阶段的工作流,并提供完整的日志和可视化轨迹分析,方便调试与迭代。 ## 📽️ 演示

Crayotter demo video preview

在线观看操作演示

一次完整的端到端运行:从一行文本请求开始,Crayotter 会准备素材、研究编辑蓝图,并输出最终剪辑好的视频。在线播放器中还包含三个已完成的案例视频。 ## 目录 - [新闻](#news) - [核心亮点](#highlights) - [概述](#overview) - [工作流](#workflow) - [快速开始](#quick-start) - [Windows 独立发行版](#windows-standalone-release) - [前置条件](#prerequisites) - [1) 环境](#1-environment) - [2) 安装依赖](#2-install-dependencies) - [3) 配置 API 端点和运行时选项](#3-configure-api-endpoints-and-runtime-options) - [4) 运行 Agent](#4-run-the-agent) - [5) 运行工作台 GUI](#5-run-the-workbench-gui) - [日志轨迹可视化](#log-trace-visualization) - [引用](#citation) - [仓库结构](#repository-layout) ## 新闻 - **2026.6.27** — Crayotter 1.0.0 新增多源素材导入、统一的下载清理功能,并更新了 Windows 发行版的打包。 - **2026.6.15** — 异步调度升级使整体视频生成工作流提速约 1.6 倍。 - **2026.5.31** — 我们的论文现已上线:[Crayotter: Traceable Multi-Agent Workflows for Long-Form Video Editing](https://arxiv.org/abs/2606.07636)。 - **2026.5.23** — 获得 100 个 Star! - **2026.5.11** — 论文页面现已上线,访问 [Crayotter 论文页面](https://idwts.github.io/Crayotter/paper/)。 - **2026.4.10** — 发行版已更新。 - **2026.3.30** — 首个发行版本现已上线。详见 [v0.1.0-demo](https://github.com/idwts/Crayotter/releases/tag/v0.1.0-demo)。 ## 核心亮点 - **一次请求生成一个视频** — 单条自然语言 prompt 即可驱动从获取素材到导出的整个 pipeline。 - **三阶段、可追溯的工作流** — 显式规划、纯逻辑推理的编辑研究以及受控的工具执行,所有过程均被记录以便重放。 - **多模态素材理解** — 每个源视频都由多模态模型进行分析,为叙事和节奏提供依据。 - **资源感知的 DAG 调度** — 为搜索、下载、分析、LLM、FFmpeg、TTS 和导出提供有限的并发支持,并具备重试、冲突键和检查点/恢复功能。 - **多源素材导入** — 支持 Bilibili、Douyin、Xiaohongshu/Rednote、Kuaishou、YouTube 或通用 URL(通过 `yt-dlp`)。 - **内置解说、字幕和音频混音** — 分段 TTS、响度归一化、背景闪避和字幕嵌入。 - **本地工作台 + 桌面模式** — 提供 Web UI 用于任务管理、与 `.env` 同步的配置、结构化日志、产出物预览以及中断任务恢复。 - **可视化轨迹分析** — 本地服务器 + 静态 HTML 导出,用于检查阶段进度和工具调用轨迹。 ## 概述

Crayotter framework overview

本仓库围绕四个核心组件构建: - **`script/agent.py`** — 主入口。初始化运行时,运行任务(交互式或单次请求),执行工作区清理,并写入日志/经验记忆。 - **`script/graph.py`** — 编排层(LangGraph `StateGraph`)。定义了三阶段工作流和路由。 - **`script/tools/`** — 用于搜索、下载、分析、裁切、转场、解说、字幕和导出的模块化工具集。 - **`script/visualize.py`** — 日志解析器 + 本地轨迹服务器,用于检查阶段进度和工具调用。 辅助文件夹: - **`temp/`** — 执行期间的中间产物和输出文件。 - **`user_temp/`** — 用户提供的本地源资产。 - **`logs/`** — 运行时日志(`video_agent_*.log`)。 - **`memory_experience/`** — 仅保留用于参考的简明历史案例记录;它们绝不能覆盖当前的任务目标。 - **`website/`** — 静态发布站点和 GitHub Pages 资产。 ## 工作流 Crayotter 采用三阶段架构: ``` START -> planner -> phase1_scheduler -> material_gap_evaluator material_gap_evaluator -> planner (supplement) | editing_research | react_editor editing_research -> react_editor -> END ``` 1. **阶段 1 — 素材准备(Planner + Executor)** - Planner 生成一个显式的依赖 DAG。 - 确定性调度器会验证依赖关系、资源池、重试机制和写入冲突。 - 当资源可用时,搜索、逐个视频下载以及逐个视频分析任务会并发执行。 - Material Gap Evaluator 决定是继续进行还是运行一轮增量素材获取(最多进行两轮补充,复用已成功的任务)。 - 通过平台无关的素材源层搜索候选视频。 - 只要 `yt-dlp` 支持,即可从 Bilibili、Douyin、Xiaohongshu/Rednote、Kuaishou、YouTube 导入用户提供的 URL 或通用 URL。 - 排序/筛选高质量候选视频(目标朝向是评分因素:默认为横屏,如有要求则为竖屏)。 - 下载选定的视频,并将其标准化为兼容剪辑的 MP4/H.264/AAC 资产。 - 对每个源视频进行多模态分析。 2. **阶段 2 — 编辑研究** - 并发研究源视频分析结果。 - 并发构建叙事、画面、节奏和解说策略。 - 将其整合为一个结构化的编辑蓝图(JSON + 兼容的 Markdown)。 - 本阶段不会调用任何编辑工具——这是纯粹的推理过程。 可以在运行时的 `.env` 中设置 `CRAYOTTER_ENABLE_PHASE2_RESEARCH=false` 来禁用此阶段,以节省 token。禁用后,工作流将变为:阶段 1 → 阶段 3。 3. **阶段 3 — ReAct 编辑执行** - 优先采用受控的编辑 DAG,支持并行片段裁切和分段 TTS。 - 保持时间线合并、混音、字幕、质量评估和导出的串行执行。 - 当结构化规划或验证失败时,回退到现有的 ReAct 编辑器。 - 记录完整的工具调用轨迹,供后续进行轨迹可视化。 ## 快速开始 ### Windows 独立发行版 Windows 10/11 x64 用户可从发行版页面下载 `Crayotter-Windows-x64.zip`: 1. 解压完整的压缩包。 2. 双击 `Crayotter.exe`。 3. 在工作台中输入 API 密钥和模型设置。 该发行版包含 Python、FFmpeg 和 yt-dlp,因此用户无需安装 Python。当 Microsoft Edge WebView2 可用时,它会在原生桌面窗口中打开,否则将回退到默认浏览器。 如果可执行文件所在目录可写,则运行时数据会存储在该目录旁边;否则存储在 `%LOCALAPPDATA%\Crayotter` 下。该发行版绝不包含 `.env`、API 密钥、上传的媒体、日志或生成的视频。 使用 Python 3.12 构建 Windows x64 发行版: ``` powershell -ExecutionPolicy Bypass -File packaging\build_windows.ps1 ``` 构建将生成: - `dist/Crayotter/` - `Crayotter-Windows-x64.zip` ### 前置条件 确保 `ffmpeg` 可以通过您的 `PATH` 访问,以便可以直接在终端中调用它。从 下载,并使用 `ffmpeg -version` 进行验证。在 Windows 上,`script/dep/windows`(`ffmpeg.exe`、`ffprobe.cmd`、`yt-dlp.exe`)下的打包二进制文件也会被自动添加到 `PATH` 的最前面。 ### 1) 环境 使用 Python 3.10+。 ``` python -m venv .venv .venv\Scripts\activate ``` ### 2) 安装依赖 ``` pip install -r requirements.txt ``` ### 3) 配置 API 端点和运行时选项 将 `.env.example` 复制到 `.env`,然后在其中编辑各项值: ``` copy .env.example .env ``` 常用选项: ``` CRAYOTTER_API_KEY=your-key CRAYOTTER_BASE_URL=https://dashscope.aliyuncs.com/compatible-mode/v1 CRAYOTTER_MODEL_NAME=qwen-plus CRAYOTTER_VIDEO_MODEL_NAME=qwen-vl-max-latest CRAYOTTER_TTS_MODEL_NAME=qwen-tts-latest CRAYOTTER_ENABLE_PHASE2_RESEARCH=true CRAYOTTER_ENABLE_PLAN_REVIEW=true CRAYOTTER_DIRECT_PHASE3_EXECUTION=false CRAYOTTER_PREFER_LOCAL_MATERIALS=false CRAYOTTER_SEARCH_POOL_SIZE=4 CRAYOTTER_DOWNLOAD_POOL_SIZE=2 CRAYOTTER_VIDEO_ANALYSIS_POOL_SIZE=2 CRAYOTTER_LLM_POOL_SIZE=2 CRAYOTTER_FFMPEG_POOL_SIZE=2 CRAYOTTER_TTS_POOL_SIZE=2 CRAYOTTER_EXPORT_POOL_SIZE=1 CRAYOTTER_STANDARDIZE_TARGET_FPS=30 CRAYOTTER_AUDIO_LOUDNORM_TARGET=0 CRAYOTTER_AGENT_STALL_TIMEOUT_SECONDS=150 ``` 注意事项: - `CRAYOTTER_DIRECT_PHASE3_EXECUTION=true` 会跳过素材搜索/下载,直接进入现有素材分析 + 阶段 3 的执行路径。 - `CRAYOTTER_ENABLE_PLAN_REVIEW=true` 会在编辑前生成一个可视化的 EditingPlan,并等待用户批准或自然语言修改后再进入阶段 3。 - `CRAYOTTER_PREFER_LOCAL_MATERIALS=true` 会优先分析本地素材,只有当前素材不足时才去线上搜索。 - 资源池变量约束了搜索、下载、视频分析、LLM、FFmpeg、TTS 以及最终导出工作。 - 素材下载通过 `download_material_video` 路由;Bilibili 仍是默认的关键词搜索源,而支持的第三方 URL 可以通过相同的 pipeline 导入和清理。 - `CRAYOTTER_STANDARDIZE_TARGET_FPS` 控制下载清理的帧率。`CRAYOTTER_AUDIO_LOUDNORM_TARGET=0` 会禁用响度归一化;设置一个负的 LUFS 值(如 `-16`)可启用两遍 EBU R128 loudnorm。 - `CRAYOTTER_AGENT_STALL_TIMEOUT_SECONDS` 控制运行中作业的“无新进度”看门狗阈值。 - 工作台 UI 会将 API 设置、阶段 2、直接进入阶段 3、本地优先模式和超时更改写回同一个 `.env` 文件中。 - 候选排序将目标朝向视为评分因素:默认为横屏,当用户明确要求时为竖屏。合并/导出使用缩放覆盖加居中裁剪,而不是直接拉伸。 - 对于 `user_temp` 下的视频,Crayotter 会将匹配的 `*_analysis.json` 写回 `user_temp`,在后续运行中复用,并且当该上传文件从工作台删除时,会移除配对的 JSON。 - `memory_experience/latest_skills.md` 会自动压缩为有限的、仅供参考的案例记录,因此它不会无限增长,也不会重新定义未来的任务目标。 ### 4) 运行 Agent 交互式模式: ``` python script\agent.py ``` 单次任务模式: ``` python script\agent.py "Create a 1-minute campus-themed promo video" ``` ### 5) 运行工作台 GUI 桌面模式会启动后端并打开独立窗口: ``` python script\run_desktop.py ``` 或者,仅启动本地后端服务: ``` python script\run_backend.py --host 127.0.0.1 --port 8765 ``` 然后在浏览器中打开本地工作台: ``` http://127.0.0.1:8765/ui/ ``` ## 日志轨迹可视化 使用最新日志启动轨迹 UI: ``` python script\visualize.py ``` 使用特定日志: ``` python script\visualize.py logs\video_agent_20260321_045836.log ``` 自定义端口: ``` python script\visualize.py --port 8080 ``` `script\visualize.py` 还会在输入日志旁边导出一个静态轨迹 HTML 文件(例如 `*_trace.html`)。 ## 引用 如果 Crayotter 对您的研究或工作有帮助,请引用: ``` @misc{yan2026crayottertraceablemultiagentworkflows, title={Crayotter: Traceable Multi-Agent Workflows for Long-Form Video Editing}, author={Lecheng Yan and Yichong Zhang and Ben Pan and Xiaoyu Zheng and Jiawei Qian and Anqi Wu and Wenxi Li and Chenyang Lyu}, year={2026}, eprint={2606.07636}, archivePrefix={arXiv}, primaryClass={cs.CV}, url={https://arxiv.org/abs/2606.07636}, } ``` ## 仓库结构 ``` Crayotter/ ├─ script/ │ ├─ agent.py │ ├─ graph.py │ ├─ visualize.py │ └─ tools/ ├─ app/ # backend server, frontend, runtime paths ├─ packaging/ # Windows release build scripts ├─ phase3_rl/ # experimental RL smoke pipeline (not the main runtime) ├─ demo/ # showcase media ├─ logs/ ├─ temp/ ├─ user_temp/ ├─ memory_experience/ ├─ website/ # static site + GitHub Pages assets ├─ logo.png ├─ crayottor_framework.jpg └─ requirements.txt ```
标签:AI智能体, 多模态大模型, 文生视频, 视频剪辑, 逆向工具