Argus is a local-first tool for indexing video files, extracting representative frames, generating local captions and tags, building a SQLite search index, and browsing the results in a local web UI.
This guide covers the full workflow from installation to browsing search results.
Argus processes a folder of supported video files and produces:
- file and media metadata
- representative sampled frames
- local vision-model captions
- clip summaries
- suggested tags
- a searchable SQLite database
- a local browser UI for searching and revealing source files
Argus is designed to work locally. It does not require cloud APIs.
Recommended environment:
- macOS
- Python 3.11 or newer
- FFmpeg installed
- Ollama installed for captioning
- a local vision-capable Ollama model such as
gemma3
From the repository root:
python3 -m venv .venv
source .venv/bin/activate
python3 -m pip install -e .If you prefer not to repeat those steps each shell session, use the repo wrapper script:
./scripts/argus statusThe script creates .venv when missing, installs Argus in editable mode when needed, and then runs the CLI command you pass.
To set up the Python environment and editable install only (without running a scan or other argus subcommand), run:
./scripts/argus installThen use the script for normal commands, for example:
./scripts/argus doctor --model gemma3
./scripts/argus scan /path/to/source --output-dir /path/to/output
./scripts/argus serve --output-dir /path/to/outputIf you have make installed, the repository includes a Makefile with targets that call ./scripts/argus, so the virtualenv and editable install behave the same as running the script directly.
make install
make help
make status
make doctor MODEL=gemma3
make run SOURCE=/path/to/footage OUTPUT_DIR=~/ArgusOut
make search QUERY=boat
make serve ARGS=--open-browserFor arbitrary argus invocations, use the cli target:
make cli ARGS="index --pretty"Common variables: SOURCE, OUTPUT_DIR, MODEL, OLLAMA_HOST, QUERY (required for search), HOST and PORT (for serve), and ARGS (extra flags for the subcommand). See the Makefile comment block for a full list.
Install FFmpeg if it is not already available:
brew install ffmpegInstall Ollama if you want local captioning:
- Download and install from ollama.com/download
Pull the default vision model:
ollama pull gemma3Argus ships with convenient defaults, but they are not required:
ingest/Optional default source folder for quick local tests.output/Default location for generated JSON, frames, database, and progress state.
Important:
- you can point Argus at any readable source folder, not just
ingest/ - source media in repo-local
ingest/is ignored by git - generated output in repo-local
output/is ignored by git - you can write output to a different local folder with
--output-dir
Current first-pass support is intended for formats readable by ffmpeg, especially:
mp4movm4vmpgmpeg
Native Blackmagic RAW is not part of the base install yet.
Before running the pipeline, verify local dependencies:
argus doctor --model gemma3This checks:
- Python runtime
ffmpegffprobe- Ollama binary
- Ollama API availability
- whether the requested vision model is installed
The typical workflow is:
- Choose a source folder
- Scan the folder and optionally sample frames
- Caption sampled frames locally
- Build the SQLite index
- Search from the CLI or local browser UI
Important:
- the source folder does not need to live inside this repository
- any readable path is valid, including mounted external drives and mounted network volumes
- for SMB shares, mount the share in macOS and use the mounted path under
/Volumes/... - do not use raw
smb://URLs as Argus source paths - the generated output can be written to a separate local folder if you prefer
- local output is recommended even when the source media is on a network share
Example source folders:
/Users/you/Videos/Project-A/Volumes/ExternalDrive/Footage/Volumes/SharedMedia/Client-Library/Volumes/StudioNAS/Footage
You can scan any readable folder path:
argus scan /Volumes/SharedMedia/Client-Library --output-dir ~/ArgusOutputMounted NAS example:
argus scan /Volumes/StudioNAS/Footage --output-dir ~/ArgusOutputBasic scan:
argus scanThis writes:
output/manifest.jsonoutput/items/*.json
Scan and sample frames:
argus scan --sample-frames --frame-count 4Useful flags:
--sample-framesExtract representative JPEG frames per clip--frame-countNumber of sample frames per video--output-dirUse a non-default output location--prettyPrint JSON to stdout
To monitor pipeline state from another terminal:
argus status --watchThis shows:
- ingest totals
- probing status
- frame extraction counts
- caption progress
- model readiness
- recent indexed items
- SQLite index presence
During captioning, Argus also writes a progress file at:
output/progress.json
If you are working outside the repo-local defaults, point status at the same source and output directories:
argus status /Volumes/SharedMedia/Client-Library --output-dir ~/ArgusOutput --watchRun local captioning:
argus caption --model gemma3This reads sampled frames from output/items/*.json and writes back:
- per-frame captions
- per-frame tags
- visible on-screen text when detected
- clip summary
- suggested tags
Useful flags:
--modelChoose a different Ollama model--forceRe-run captioning even if captions already exist--prettyPrint the summary report as JSON
Example forced re-caption:
argus caption --model gemma3 --forceBuild or refresh the local database:
argus indexBy default, the database is stored at:
output/argus.db
Useful flags:
--db-pathWrite to a custom SQLite file--prettyPrint the indexing report as JSON
Search by filename, summary, tags, captions, or visible text:
argus search "<query>"Examples:
argus search "outdoor scene"
argus search "close up"
argus search "person at desk"Useful flags:
--limitControl how many results are returned--db-pathSearch a non-default database--prettyPrint JSON results
Start the local web server:
argus serve --open-browserDefaults:
- host:
127.0.0.1 - port:
8765
You can change them:
argus serve --host 127.0.0.1 --port 9000The browser UI supports:
- text search
- classification-status filtering
- result cards with metadata
- copy path to clipboard
- reveal file in Finder
The UI is local-only by default.
If you want a shorter path for non-technical users, you can run the full pipeline in one command:
argus run /Volumes/SharedMedia/Client-Library --output-dir ~/ArgusOutputMounted SMB/NAS example:
argus run /Volumes/StudioNAS/Footage --output-dir ~/ArgusOutputThis performs:
- scan
- frame sampling
- captioning
- SQLite indexing
You can then open the browser UI against that output directory:
argus serve --output-dir ~/ArgusOutput --open-browserFrom the browser UI, the Reveal in Finder action uses the indexed file path and calls macOS Finder reveal locally.
This does not move or rename the source file.
Argus commonly writes:
output/manifest.jsonoutput/items/*.jsonoutput/frames/<video-id>/*.jpgoutput/argus.dboutput/progress.json
If you add more files to your source folder, a common refresh cycle is:
argus scan /path/to/source/folder --output-dir /path/to/argus-output --sample-frames --frame-count 4
argus caption --output-dir /path/to/argus-output --model gemma3
argus index --output-dir /path/to/argus-outputThen browse:
argus serve --output-dir /path/to/argus-output --open-browserUse the mounted filesystem path, not the raw SMB URL.
Use this:
argus run /Volumes/StudioNAS/Footage --output-dir ~/ArgusOutputDo not use this:
argus run smb://studio-nas.local/Footage --output-dir smb://studio-nas.local/ArgusOutputRecommendation:
- source media can be on a mounted network share
- Argus output should stay on local disk when possible
Install FFmpeg:
brew install ffmpegMake sure:
- Ollama is installed
- the local Ollama app or service is running
- the selected model has been pulled
Then retry:
argus doctor --model gemma3Make sure the index exists and is current:
argus indexThen rerun the search.
Make sure:
output/argus.dbexistsargus indexhas been run- the UI is pointing at the expected
outputdirectory
No-install development run:
PYTHONPATH=src python3 -m argus statusRun tests:
.venv/bin/python -m unittest discover -s testsArgus is released under the MIT License. See LICENSE.