Arkiv媒体资产管理器 是 AI Skill Hub 本期精选AI工具之一。综合评分 7.8 分,整体质量较高。我们推荐使用将其纳入你的 AI 工具库,帮助提升工作效率。
本地优先的媒体资产管理工具,集成AI语义搜索和专业相机元数据读取功能。支持DaVinci Resolve集成,适合视频编辑、摄影师和内容创作者快速组织和检索海量媒体文件。
Arkiv媒体资产管理器 是一款基于 Python 开发的开源工具,专注于 媒体管理、AI搜索、元数据 等核心功能。作为 GitHub 开源项目,它拥有活跃的社区支持和持续的版本迭代,代码完全透明可审计,支持本地部署以保护数据隐私。无论是个人使用还是集成到企业工作流,都能提供稳定可靠的解决方案。
本地优先的媒体资产管理工具,集成AI语义搜索和专业相机元数据读取功能。支持DaVinci Resolve集成,适合视频编辑、摄影师和内容创作者快速组织和检索海量媒体文件。
Arkiv媒体资产管理器 是一款基于 Python 开发的开源工具,专注于 媒体管理、AI搜索、元数据 等核心功能。作为 GitHub 开源项目,它拥有活跃的社区支持和持续的版本迭代,代码完全透明可审计,支持本地部署以保护数据隐私。无论是个人使用还是集成到企业工作流,都能提供稳定可靠的解决方案。
# 方式一:pip 安装(推荐)
pip install arkiv
# 方式二:虚拟环境安装(推荐生产环境)
python -m venv .venv
source .venv/bin/activate # Windows: .venv\Scripts\activate
pip install arkiv
# 方式三:从源码安装(获取最新功能)
git clone https://github.com/vulture-s/arkiv
cd arkiv
pip install -e .
# 验证安装
python -c "import arkiv; print('安装成功')"
# 命令行使用
arkiv --help
# 基本用法
arkiv input_file -o output_file
# Python 代码中调用
import arkiv
# 示例
result = arkiv.process("input")
print(result)
# arkiv 配置文件示例(config.yml) app: name: "arkiv" debug: false log_level: "INFO" # 运行时指定配置文件 arkiv --config config.yml # 或通过环境变量配置 export ARKIV_API_KEY="your-key" export ARKIV_OUTPUT_DIR="./output"
Source-available AI metadata layer for DIT workflows — Resolve-native, CJK-first.
🌐 English | 繁體中文 📦 Looking for the application? → https://vulture-s.github.io/arkiv/ — downloads, capabilities, and licence terms on a single page. Free for any purpose, commercial use included.
arkiv sits between your media drive and DaVinci Resolve: it ingests your footage, attaches AI-generated metadata (transcript, vision tags, atmosphere, energy, edit position), and surfaces clips via semantic search in any language — Chinese, Japanese, or English. The Resolve plugin lets you search, import with clip color, and drop frame markers without leaving the NLE.
Designed for solo DITs and small crews who own their data: local-first, self-hosted, source-available (PolyForm Perimeter), no cloud dependency.
---
Find footage - Semantic search (Chinese / English / Japanese) — searches what's in the frame and the transcript, not filenames - Library Chat: compilation search, refine the previous result, find similar shots, analytics — with conversation memory - Ratings (GOOD / NG / Review) plus auto and manual tags with autocomplete
AI metadata - Whisper large-v3-turbo transcription + a 4-layer anti-hallucination guard (VAD silence filter → no_speech threshold → blank/repeat filter → LLM correction) - Frame vision analysis with brand/object recognition; 360 footage (Insta360 / GoPro Max) reprojected before indexing - Chinese transcripts stored as Taiwan Traditional (plus a batch converter for an existing library) - Full camera metadata: EXIF + Sony XAVC sidecar, so FX-series footage keeps its identity
On-set DIT - Card offload: parallel multi-destination copy + per-file hash verify + resumable, and it never deletes the source card - ASC MHL v2 hash manifests (interop-verified against the ASC reference implementation) - Camera report CSV, auto-offload on card insert, browser DIT console (/dit)
Into the edit - DaVinci Resolve plugin: search, import with clip color, add frame markers - Export SRT / VTT / TXT / EDL (DF/NDF) / FCPXML 1.8, plus metadata CSV straight into Resolve - Web UI, CLI and API all work on the same library
<details> <summary>Full feature list (including advanced options)</summary>
/api/export/metadata-csv endpoint exports clip metadata (Camera/Lens/ISO/Shutter/Aperture/GPS/CreateDate) ready for Resolve's File → Import Metadata from CSV. Plugin auto-prompts after import.XML, iPhone Keys group, Blackmagic Cam app per-vendor lens tags. Auto-detects exiftool binary on Windows (winget/scoop/chocolatey/Program Files)mhl.py create / verify CLI emits real urn:ASC:MHL:v2.0 with xxh3 / md5 / sha1 / sha256 / c4, directory + structure root hashes, chained ascmhl_chain.xml. Interop-verified with ASC reference impl 1.2 — drop-in for Silverstack / MediaVerify / Hedge / YoYotta workflowsoffload.py --src <SD> --dst <A> --dst <B> does chunked parallel copy + per-file hash verify + 3× retry on mismatch + atomic rename + sidecar-aware (XAVC / ARRI / RED / iPhone Live Photo). Resumable JSON state file — kill mid-copy and pending files pick up exactly where they stopped. Emits per-dst MHL v2camera_report.py writes 20-col DIT-spec CSV (Reel / TC / Camera / Lens / ISO / Shutter / Aperture / WB / FPS / Codec / ...) for Resolve's File → Import Metadata from CSV. Day-summary footer aggregates clip count + runtime by camera / by card/dit) — browser control panel for card→backup offload: preview the destination layout, run with live per-file progress streaming, multi-destination + xxh3 verify + ASC MHL v2. Never deletes the source cardoffload.py --organize "{date}/{camera}/{reel}" files footage into a date/camera/reel tree (tokens: {date}/{camera}/{reel}/{stem}/{ext}, fs-safe, path-traversal guarded) — or leave it empty to mirror the source structureoffload.py --watch auto-offloads on card insert (detects DCIM / media volumes), with re-insert / mount-flicker guard so a wobbling card never re-copies.insv / .360 clips are reprojected to equirectangular before vision tagging (FFmpeg v360), so on-frame text and events the raw fisheye hides become searchableingest.py --max-failures N / --skip-failed tolerate flaky per-frame vision on long unattended runs; failed frames are left empty for a later --vision-only resume (a whole-Ollama outage still halts fast)</details>
| Dependency | macOS (brew) | Linux (apt) | Windows |
|---|---|---|---|
| Python 3.9+ | brew install python | sudo apt install python3 python3-venv | [python.org](https://python.org) |
| FFmpeg 6.0+ | brew install ffmpeg | sudo apt install ffmpeg | [ffmpeg.org](https://ffmpeg.org/download.html) |
| Ollama | brew install ollama | [ollama.com/download](https://ollama.com/download) | [ollama.com/download](https://ollama.com/download) |
DaVinci Resolve Plugin extra (macOS): Resolve requires the official Python 3.10 Framework installer (.pkg) from python.org — Homebrew Python is not recognized. Install path: /Library/Frameworks/Python.framework/Versions/3.10/. Restart Resolve after install; Py3 should appear in Console and scripts load via Workspace > Scripts.
$env:PYTHONUTF8=1; uvicorn server:app --host 0.0.0.0 --port 8501
brew install python ffmpeg ollama
git clone https://github.com/vulture-s/arkiv.git
cd arkiv
python3 -m venv .venv && source .venv/bin/activate
pip install -r requirements.txt
pip install mlx-whisper # Apple Silicon (Metal GPU)
ollama pull bge-m3 && ollama pull qwen2.5vl:7b && ollama pull qwen2.5:14b
python health.py
```bash sudo apt install python3 python3-venv ffmpeg git clone https://github.com/vulture-s/arkiv.git cd arkiv python3 -m venv .venv && source .venv/bin/activate pip install -r requirements.txt pip install faster-whisper torch # NVIDIA CUDA GPU
ollama pull bge-m3 && ollama pull qwen2.5vl:7b && ollama pull qwen2.5:14b python health.py ```
```powershell
git clone https://github.com/vulture-s/arkiv.git cd arkiv python -m venv .venv .\.venv\Scripts\activate pip install -r requirements.txt pip install faster-whisper torch # NVIDIA CUDA GPU
ollama pull bge-m3; ollama pull qwen2.5vl:7b; ollama pull qwen2.5:14b $env:PYTHONUTF8=1; python health.py ```
```bash git clone https://github.com/vulture-s/arkiv.git cd arkiv
python embed.py
docker exec arkiv-arkiv-1 bash smoke-test.sh --platform docker ```
The test has two phases: Health Check (environment) and API Smoke Test (server endpoints).

<details> <summary>System architecture & data flow (for contributors / fork authors)</summary>
```bash
Both options use the same database. You can mix and match — ingest via CLI, then browse in Web UI, or vice versa. Note: Do not run CLI and Web UI ingest at the same time. SQLite does not support concurrent writes — run one at a time.
```bash
python ingest.py --dir ./media --limit 10 # process first 10 files only python ingest.py --dir ./media --skip-vision # skip AI frame descriptions python ingest.py --dir ./media --refresh # re-process already-indexed files (re-extracts frames) python ingest.py --dir ./media --skip-failed # tolerate flaky per-frame vision (overnight runs) python ingest.py --dir ./media --max-failures 20 # halt vision only after 20 cumulative frame failures python ingest.py --vision-only --dir ./media # resume: only re-run vision on frames left empty
python embed.py --rebuild # drop and rebuild from scratch
<details> <summary>All environment variables (.env) — defaults just work; open this to tune</summary>
Copy .env.example to .env and customize:
| Variable | Default | Description |
|---|---|---|
ARKIV_DB_PATH | ./media.db | SQLite database path |
ARKIV_CHROMA_PATH | ./chroma_db | ChromaDB vector store |
ARKIV_THUMBNAILS_DIR | ./thumbnails | Thumbnail output dir |
ARKIV_OLLAMA_URL | http://localhost:11434 | Ollama API endpoint |
ARKIV_EMBED_MODEL | bge-m3 | Embedding model — **do not change after indexing** (see note below) |
ARKIV_VISION_MODEL | qwen2.5vl:7b | Vision model for frame descriptions. **2.5-VL is the deliberate default over qwen3-vl:8b**: Qwen3-VL's vision path is ~10× slower under Ollama (measured ~60s/frame vs ~8s/frame) — 30h vs 3.5h across 2000 frames, at comparable tag quality. Set ARKIV_OLLAMA_VISION_MODEL=qwen3-vl:8b for the higher ceiling |
ARKIV_CHAT_MODEL | qwen2.5:14b | Chat model — answers and (by default) intent classification |
ARKIV_INTENT_MODEL | *(= ARKIV_CHAT_MODEL)* | Optional faster model for intent classification only; must be installed |
ARKIV_WHISPER_MODEL | mlx-community/whisper-large-v3-turbo (macOS) / large-v3-turbo (other) | Whisper model |
ARKIV_CUSTOM_VOCABULARY | *(empty)* | Comma-separated hotwords (names/jargon) fed to Whisper's initial_prompt |
ARKIV_VOCABULARY_FILE | *(empty → .arkiv/vocabulary.txt if present)* | Newline-delimited hotword file (one term/line, # comments); merged with the above |
ARKIV_EXIFTOOL_PATH | *(empty — auto-detect)* | Path to exiftool binary (optional) |
ARKIV_FFMPEG_PATH | *(empty — auto-detect)* | Path to ffmpeg binary (optional; set on headless Windows where only a WinGet alias shim is on PATH) |
ARKIV_FFPROBE_PATH | *(empty — auto-detect)* | Path to ffprobe binary (optional; same as above) |
ARKIV_HOST | 0.0.0.0 | Server bind address |
ARKIV_PORT | 8501 | Server port |
Embedding model is locked to your index. The vector store is built with one embedding model (bge-m3, 1024-dim). ChangingARKIV_EMBED_MODELafter you have indexed media makes new query vectors incompatible with stored ones — search results degrade silently. To switch models, re-index from scratch. Hardware floor for chat:qwen2.5:14bneeds ~9 GB and runs alongside the embedding model. Plan for ~12–16 GB free RAM/VRAM on the Ollama host. On tighter machines, setARKIV_CHAT_MODEL=qwen2.5:7b(~4.7 GB) for a lighter default.
</details>
Everything arkiv does is available over a REST API (/api/*, scope-based Bearer tokens) and a read-only MCP server — the Web UI is just one client. Script it, wire it into an automation, or let Claude/OpenClaw query your library.
→ API auth, token scopes, and the library Chat (RAG) endpoint: docs/api.md
arkiv isn't just another asset manager sitting beside your NLE — it runs inside it:
resolve_plugin/): search your arkiv library from within Resolve, import results with clip color onto the timeline, and drop frame markers — without leaving the NLE./api/export/metadata-csv emits exactly the columns Resolve's File → Import Metadata from CSV expects (Camera/Lens/ISO/Shutter/Aperture/GPS/CreateDate); the plugin prompts for it after import.On macOS, Resolve needs the official python.org Python 3.10 Framework (see Prerequisites below).
Q: Which Whisper backend should I use? - macOS with Apple Silicon: mlx-whisper (fastest, uses Metal GPU) - NVIDIA GPU: faster-whisper + torch (CUDA acceleration) - CPU only: faster-whisper (slower but works everywhere)
Q: Do I need Ollama running? Yes, for semantic search (embedding) and optional frame descriptions. Run ollama serve before starting arkiv.
Q: How do I add media? Use the + button in the Media Pool sidebar, or run python ingest.py --dir /path/to/media from CLI.
Q: Can I use this without Docker? Yes — the native Python install is the primary workflow. Docker is optional for deployment.
Q: What file formats are supported? Video: .mp4, .mov, .mkv, .avi, .webm, .m4v, .mts, .mxf (Sony FX6/FX9/Venice XAVC) 360: .insv (Insta360), .360 (GoPro Max) — dual-fisheye is reprojected to equirectangular before vision tagging (single-lens 360 footage is indexed as-is) Audio: .wav, .mp3, .m4a, .aac, .flac, .ogg Camera metadata (make/model/lens/timecode) is read from embedded EXIF and Sony XAVC NRT sidecar XML — so FX30/FX-series footage keeps its identity.
arkiv 是一个开源的 AI 元数据层,专为 DIT 工作流设计,支持中文、英文和日语的自然语言查询。它提供了语义搜索、聊天式 RAG、AI 语音识别和 4 层抗幻觉保护等功能。
arkiv 的主要功能包括语义搜索、聊天式 RAG、AI 语音识别和 4 层抗幻觉保护。语义搜索允许用户使用自然语言进行查询,聊天式 RAG 可以与视频库进行交互,AI 语音识别可以对视频进行语音识别,而 4 层抗幻觉保护可以防止 AI 生成的内容与真实内容混淆。
arkiv 需要 Python 3.9 或更高版本、FFmpeg 6.0 或更高版本以及 Ollama 运行环境。macOS 用户可以使用 Homebrew 安装这些依赖项,Linux 用户可以使用 apt 安装,Windows 用户需要手动下载和安装这些依赖项。
arkiv 可以通过 pip 安装,macOS 用户可以使用 brew 安装依赖项,然后使用 pip 安装 arkiv,Linux 用户可以使用 apt 安装依赖项,然后使用 pip 安装 arkiv,Windows 用户需要手动下载和安装依赖项,然后使用 pip 安装 arkiv。
arkiv 的使用方法包括通过 Web UI 浏览、搜索、评分和标记视频,或者通过 CLI 仅使用 ingest 和 search 功能。两种方法都可以使用同一个数据库,用户可以混合使用两种方法。
arkiv 的配置包括 Web UI 和 CLI 两种方式。Web UI 可以通过浏览器访问,CLI 可以通过命令行访问。配置包括 MCP、env 和关键参数等。
arkiv 的 API 包括 Chat API 和 API Authentication 两部分。Chat API 可以通过自然语言进行查询,API Authentication 需要 Bearer token 进行访问。
arkiv 的 FAQ 包括两个问题:哪个 Whisper 后端应该使用,以及是否需要 Ollama 运行环境。macOS 用户应该使用 mlx-whisper,NVIDIA GPU 用户应该使用 faster-whisper + torch,CPU 只用户应该使用 faster-whisper。所有用户都需要 Ollama 运行环境。
���新的本地媒体管理方案,AI语义搜索和专业元数据支持是亮点。架构清晰,FastAPI+ChromaDB组合成熟可靠,但社区规模小,文档完整度待提升。
AI Skill Hub 为第三方内容聚合平台,本页面信息基于公开数据整理,不对工具功能和质量作任何法律背书。
建议在沙箱或测试环境中充分验证后,再部署至生产环境,并做好必要的安全评估。
✅ MIT 协议 — 最宽松的开源协议之一,可自由商用、修改、分发,仅需保留版权声明。
经综合评估,Arkiv媒体资产管理器 在AI工具赛道中表现稳健,质量良好。如果你已有明确的使用需求,可以直接上手体验;如果还在评估阶段,建议对比同类工具后再做决策。
| 原始名称 | arkiv |
| 原始描述 | 开源AI工具:Local-first media asset manager with AI semantic search — reads pro-camera metad。⭐31 · Python |
| Topics | 媒体管理AI搜索元数据视频编辑本地优先 |
| GitHub | https://github.com/vulture-s/arkiv |
| License | MIT |
| 语言 | Python |
收录时间:2026-06-13 · 更新时间:2026-06-16 · License:MIT · AI Skill Hub 不对第三方内容的准确性作法律背书。