# ben0724-ace/mini-cut architecture

> Architecture diagram of the GitHub repository ben0724-ace/mini-cut, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-28). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/ben0724-ace/mini-cut
- Repository: https://github.com/ben0724-ace/mini-cut

## Overview

MiniCut 是本地优先的视频精选与粗剪工作台。用户从 Web 工作台或 CLI 管理项目、导入素材并转录；随后生成 AI 候选、人工审阅和精修，最后渲染预览并导出视频或字幕。领域阶段包括项目/素材管理、转录、选材、版本化编辑和导出。图中保留了 README 所述的字幕翻译、任务与结果管理等能力。部分后端路由和未采样实现仅按文档概括，未推断其内部调用链。

Main entry points: [`src/minicut/api.py`](https://github.com/ben0724-ace/mini-cut/blob/main/src/minicut/api.py) (本地 HTTP API), [`web/src/App.tsx`](https://github.com/ben0724-ace/mini-cut/blob/main/web/src/App.tsx) (Web 工作台), [`src/minicut/highlight_workflow.py`](https://github.com/ben0724-ace/mini-cut/blob/main/src/minicut/highlight_workflow.py) (精选工作流), [`src/minicut/application.py`](https://github.com/ben0724-ace/mini-cut/blob/main/src/minicut/application.py) (转录用例)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_interface["用户入口"]
  node_webapp["Web 工作台<br/>[App.tsx]"]
  node_webapi["前端 API 客户端<br/>[api.ts]"]
  node_httpapi["本地 HTTP API<br/>[api.py]"]
  node_cli["命令行<br/>[cli.py]"]
end

subgraph group_media["素材与转录"]
  node_projects["项目与素材<br/>[project.py]"]
  node_importer["媒体导入<br/>[importer.py]"]
  node_transcribe["转录用例<br/>[application.py]"]
  node_transcription["转录任务与后端"]
  node_transcript["转录文本<br/>[transcript.py]"]
end

subgraph group_selection["AI 选材"]
  node_highlight["精选工作流"]
  node_planner["精选规划"]
  node_model["DeepSeek 服务"]
  node_translation["字幕翻译"]
end

subgraph group_editing["编辑与交付"]
  node_human["候选审阅与编辑"]
  node_outputplan["作品计划<br/>[output_plan.py]"]
  node_render["作品渲染<br/>[output_render.py]"]
  node_export["导出任务<br/>[output_export.py]"]
  node_results["导出结果<br/>[ExportResults.tsx]"]
end

subgraph group_state["项目状态"]
  node_outputrepo[("作品与版本存储")]
  node_draft["生成草稿"]
  node_journal[("模型调用记录<br/>[model_journal.py]")]
end

node_user(("剪辑者"))

node_user -->|"操作"| node_webapp
node_user -->|"调用"| node_cli
node_webapp -->|"请求"| node_webapi
node_webapi -->|"HTTP 调用"| node_httpapi
node_cli -->|"执行用例"| node_transcribe
node_httpapi -->|"项目操作"| node_projects
node_httpapi -->|"导入请求"| node_importer
node_importer -->|"登记素材"| node_projects
node_httpapi -->|"转录请求"| node_transcribe
node_transcribe -->|"导入素材"| node_importer
node_transcribe -->|"转录素材"| node_transcription
node_transcription -->|"生成文本"| node_transcript
node_httpapi -->|"精选请求"| node_highlight
node_highlight -->|"读取文本"| node_transcript
node_highlight -->|"生成候选"| node_planner
node_planner -.->|"发送文本"| node_model
node_highlight -.->|"翻译候选"| node_translation
node_highlight -->|"记录调用"| node_journal
node_webapp -->|"呈现编辑"| node_human
node_human -->|"保存修改"| node_webapi
node_httpapi -->|"计划操作"| node_outputplan
node_human -->|"审阅作品"| node_outputplan
node_httpapi -->|"持久化作品"| node_outputrepo
node_outputplan -->|"保存版本"| node_outputrepo
node_httpapi -->|"渲染请求"| node_render
node_render -->|"读取计划"| node_outputrepo
node_httpapi -->|"导出请求"| node_export
node_export -->|"读取作品版本"| node_outputrepo
node_webapp -->|"查看结果"| node_results
node_webapp -->|"维护草稿"| node_draft
node_draft -->|"读写草稿"| node_webapi

click node_webapp "https://github.com/ben0724-ace/mini-cut/blob/main/web/src/App.tsx"
click node_webapi "https://github.com/ben0724-ace/mini-cut/blob/main/web/src/api.ts"
click node_httpapi "https://github.com/ben0724-ace/mini-cut/blob/main/src/minicut/api.py"
click node_cli "https://github.com/ben0724-ace/mini-cut/blob/main/src/minicut/cli.py"
click node_projects "https://github.com/ben0724-ace/mini-cut/blob/main/src/minicut/project.py"
click node_importer "https://github.com/ben0724-ace/mini-cut/blob/main/src/minicut/importer.py"
click node_transcribe "https://github.com/ben0724-ace/mini-cut/blob/main/src/minicut/application.py"
click node_transcription "https://github.com/ben0724-ace/mini-cut/blob/main/src/minicut/transcription_task.py"
click node_transcript "https://github.com/ben0724-ace/mini-cut/blob/main/src/minicut/transcript.py"
click node_highlight "https://github.com/ben0724-ace/mini-cut/blob/main/src/minicut/highlight_workflow.py"
click node_planner "https://github.com/ben0724-ace/mini-cut/blob/main/src/minicut/highlight_planner.py"
click node_model "https://github.com/ben0724-ace/mini-cut/blob/main/src/minicut/deepseek_provider.py"
click node_translation "https://github.com/ben0724-ace/mini-cut/blob/main/src/minicut/subtitle_translation.py"
click node_human "https://github.com/ben0724-ace/mini-cut/blob/main/web/src/OutputWorkspace.tsx"
click node_outputplan "https://github.com/ben0724-ace/mini-cut/blob/main/src/minicut/output_plan.py"
click node_outputrepo "https://github.com/ben0724-ace/mini-cut/blob/main/src/minicut/output_repository.py"
click node_render "https://github.com/ben0724-ace/mini-cut/blob/main/src/minicut/output_render.py"
click node_export "https://github.com/ben0724-ace/mini-cut/blob/main/src/minicut/output_export.py"
click node_results "https://github.com/ben0724-ace/mini-cut/blob/main/web/src/ExportResults.tsx"
click node_draft "https://github.com/ben0724-ace/mini-cut/blob/main/web/src/useGenerationDraft.ts"
click node_journal "https://github.com/ben0724-ace/mini-cut/blob/main/src/minicut/model_journal.py"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_webapp,node_webapi,node_httpapi,node_cli toneBlue
class node_projects,node_importer,node_transcribe,node_transcription,node_transcript toneAmber
class node_highlight,node_planner,node_model,node_translation toneMint
class node_human,node_outputplan,node_render,node_export,node_results toneRose
class node_outputrepo,node_draft,node_journal,node_user toneIndigo
```

## Components

### 用户入口

- [Web 工作台](https://github.com/ben0724-ace/mini-cut/blob/main/web/src/App.tsx): `web/src/App.tsx`
- [前端 API 客户端](https://github.com/ben0724-ace/mini-cut/blob/main/web/src/api.ts): `web/src/api.ts`
- [本地 HTTP API](https://github.com/ben0724-ace/mini-cut/blob/main/src/minicut/api.py): `src/minicut/api.py`
- [命令行](https://github.com/ben0724-ace/mini-cut/blob/main/src/minicut/cli.py): `src/minicut/cli.py`

### 素材与转录

- [项目与素材](https://github.com/ben0724-ace/mini-cut/blob/main/src/minicut/project.py): `src/minicut/project.py`
- [媒体导入](https://github.com/ben0724-ace/mini-cut/blob/main/src/minicut/importer.py): `src/minicut/importer.py`
- [转录用例](https://github.com/ben0724-ace/mini-cut/blob/main/src/minicut/application.py): `src/minicut/application.py`
- [转录任务与后端](https://github.com/ben0724-ace/mini-cut/blob/main/src/minicut/transcription_task.py): `src/minicut/transcription_task.py`
- [转录文本](https://github.com/ben0724-ace/mini-cut/blob/main/src/minicut/transcript.py): `src/minicut/transcript.py`

### AI 选材

- [精选工作流](https://github.com/ben0724-ace/mini-cut/blob/main/src/minicut/highlight_workflow.py): `src/minicut/highlight_workflow.py`
- [精选规划](https://github.com/ben0724-ace/mini-cut/blob/main/src/minicut/highlight_planner.py): `src/minicut/highlight_planner.py`
- [DeepSeek 服务](https://github.com/ben0724-ace/mini-cut/blob/main/src/minicut/deepseek_provider.py): `src/minicut/deepseek_provider.py`
- [字幕翻译](https://github.com/ben0724-ace/mini-cut/blob/main/src/minicut/subtitle_translation.py): `src/minicut/subtitle_translation.py`

### 编辑与交付

- [候选审阅与编辑](https://github.com/ben0724-ace/mini-cut/blob/main/web/src/OutputWorkspace.tsx): `web/src/OutputWorkspace.tsx`
- [作品计划](https://github.com/ben0724-ace/mini-cut/blob/main/src/minicut/output_plan.py): `src/minicut/output_plan.py`
- [作品渲染](https://github.com/ben0724-ace/mini-cut/blob/main/src/minicut/output_render.py): `src/minicut/output_render.py`
- [导出任务](https://github.com/ben0724-ace/mini-cut/blob/main/src/minicut/output_export.py): `src/minicut/output_export.py`
- [导出结果](https://github.com/ben0724-ace/mini-cut/blob/main/web/src/ExportResults.tsx): `web/src/ExportResults.tsx`

### 项目状态

- [作品与版本存储](https://github.com/ben0724-ace/mini-cut/blob/main/src/minicut/output_repository.py): `src/minicut/output_repository.py`
- [生成草稿](https://github.com/ben0724-ace/mini-cut/blob/main/web/src/useGenerationDraft.ts): `web/src/useGenerationDraft.ts`
- [模型调用记录](https://github.com/ben0724-ace/mini-cut/blob/main/src/minicut/model_journal.py): `src/minicut/model_journal.py`

### Other components

- **剪辑者**

## Connections

- 剪辑者 → Web 工作台: 操作
- 剪辑者 → 命令行: 调用
- Web 工作台 → 前端 API 客户端: 请求
- 前端 API 客户端 → 本地 HTTP API: HTTP 调用
- 命令行 → 转录用例: 执行用例
- 本地 HTTP API → 项目与素材: 项目操作
- 本地 HTTP API → 媒体导入: 导入请求
- 媒体导入 → 项目与素材: 登记素材
- 本地 HTTP API → 转录用例: 转录请求
- 转录用例 → 媒体导入: 导入素材
- 转录用例 → 转录任务与后端: 转录素材
- 转录任务与后端 → 转录文本: 生成文本
- 本地 HTTP API → 精选工作流: 精选请求
- 精选工作流 → 转录文本: 读取文本
- 精选工作流 → 精选规划: 生成候选
- 精选规划 → DeepSeek 服务: 发送文本
- 精选工作流 → 字幕翻译: 翻译候选
- 精选工作流 → 模型调用记录: 记录调用
- Web 工作台 → 候选审阅与编辑: 呈现编辑
- 候选审阅与编辑 → 前端 API 客户端: 保存修改
- 本地 HTTP API → 作品计划: 计划操作
- 候选审阅与编辑 → 作品计划: 审阅作品
- 本地 HTTP API → 作品与版本存储: 持久化作品
- 作品计划 → 作品与版本存储: 保存版本
- 本地 HTTP API → 作品渲染: 渲染请求
- 作品渲染 → 作品与版本存储: 读取计划
- 本地 HTTP API → 导出任务: 导出请求
- 导出任务 → 作品与版本存储: 读取作品版本
- Web 工作台 → 导出结果: 查看结果
- Web 工作台 → 生成草稿: 维护草稿
- 生成草稿 → 前端 API 客户端: 读写草稿
