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"
Open-source AI metadata layer for DIT workflows — Resolve-native, CJK-first.
🌐 English | 繁體中文
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, MIT license, no cloud dependency.
---
/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| 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 qwen3-vl:8b && 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 qwen3-vl:8b && 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 qwen3-vl:8b; ollama pull qwen2.5:14b $env:PYTHONUTF8=1; python health.py ```
```bash git clone https://github.com/vulture-s/arkiv.git cd arkiv docker compose up -d
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).

```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
python embed.py --rebuild # drop and rebuild from scratch
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 | qwen3-vl:8b | Vision model for frame descriptions |
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.
All /api/* endpoints require a Bearer token with the correct scope. Scope-based tokens let you split a fleet by machine role: read-only review stations can use videos_read or media_read, ingest machines can use ingest_write, and admin machines can manage tokens.
First-time bootstrap:
export ARKIV_ADMIN_BOOTSTRAP_TOKEN=$(openssl rand -base64 32)
python server.py
On first startup, the server seeds a single admin token from that env var. Use it once to create per-machine tokens, then unset it and revoke the bootstrap token.
Create and manage tokens directly with the CLI:
python arkiv_token.py create --name "PC-dev" --scopes videos_read,videos_write --ip-allowlist 127.0.0.1/32,100.64.0.0/10 --expires-in 90
python arkiv_token.py list
python arkiv_token.py show <token-id>
python arkiv_token.py revoke <token-id>
Use the token in requests:
curl -H "Authorization: Bearer <token>" http://localhost:8501/api/media
Available scopes: videos_read, videos_write, media_read, collections_read, collections_write, projects_read, projects_write, ingest_write, chat_read, chat_write, admin
Ask natural-language questions about your archive. The classifier routes each prompt to one of five handlers:
| Intent | Example | What it does |
|---|---|---|
compilation | "Give me all sunset shots from May" | Semantic search → ranked scene list |
refinement | "Only the indoor ones" | Filters the *previous* result, in-conversation |
similarity | "Similar to scene 42" | Vector nearest-neighbours to a reference clip |
analytics | "How many hours did I shoot this month?" | Aggregate query over the library |
general | "What can you help me with?" | Plain LLM chat, no search |
Conversation history (last 10 messages) is threaded into each follow-up, so refinement acts on what the previous turn returned.
Model requirement: chat uses ARKIV_CHAT_MODEL (default qwen2.5:14b) for both intent classification and answers — a single ollama pull qwen2.5:14b covers it. Only set ARKIV_INTENT_MODEL to a smaller model (e.g. qwen2.5:7b-instruct) if that model is actually installed on the Ollama host. If the model is missing, /api/chat returns a clear "run ollama pull …" message instead of a 500.
Prerequisite — ingest + index first: chat queries your indexed library, not a standalone chatbot. Ingest media (Step 1) and build the index with python embed.py (Step 2) before chatting. compilation / refinement / similarity need the vector index; analytics needs ingested media only; general is the only intent that works on an empty library. On an empty/unindexed library chat does not error — it just returns "0 results".
```bash
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 360: .insv (Insta360), .360 (GoPro Max) — indexed as raw fisheye 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 不对第三方内容的准确性作法律背书。