Skip to content

Commit a37ad4d

Browse files
committed
Add DiscoPosse-style Argus blog draft
1 parent 8487e45 commit a37ad4d

1 file changed

Lines changed: 153 additions & 0 deletions

File tree

docs/ARGUS_DISCO_POSSE_POST.md

Lines changed: 153 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,153 @@
1+
# Why I Built Argus for Local-First Video Search
2+
3+
I run a video agency, and one of the most annoying problems in the workflow has nothing to do with cameras, editing, or rendering. It is the simple fact that B-roll piles up fast and the value of that footage drops the moment it becomes hard to search.
4+
5+
We all know the pattern. A project wraps up, the footage gets copied to a share or NAS, and then later on someone asks:
6+
7+
- do we have more warehouse footage?
8+
- where is that wide shot of the product press?
9+
- didn’t we already shoot a clean establishing clip for this client?
10+
11+
At that point, someone ends up scrubbing through folders of MP4 files by hand and hoping the filename tells enough of the story. It usually does not.
12+
13+
That is the reason Argus exists.
14+
15+
Argus is a local-first tool that scans a video folder, samples frames, runs local captioning and tagging, and builds a searchable SQLite database and browser UI. The key part for me was keeping it simple and private. I did not want to ship footage off to a cloud API just to figure out whether a clip contains a warehouse aisle, a person at a heat press, or a product close-up.
16+
17+
## Why I Built It This Way
18+
19+
There are lots of AI workflows that look impressive in a diagram and become miserable the minute you try to use them with real media libraries.
20+
21+
I wanted a few things:
22+
23+
1. It had to run locally on a Mac.
24+
2. It had to work with silent clips because a lot of B-roll has no useful audio anyway.
25+
3. It had to be cheap enough to run whenever I wanted.
26+
4. It had to be easy to open source.
27+
5. It had to give me results I could inspect instead of burying everything in a black box.
28+
29+
So the current Argus flow is intentionally straightforward:
30+
31+
1. Point it at a source folder.
32+
2. Let it scan the clips.
33+
3. Extract a few representative frames from each video.
34+
4. Caption those frames locally with Ollama.
35+
5. Store the results in JSON plus a local SQLite index.
36+
6. Search the library in a browser on `localhost`.
37+
38+
That may not be the fanciest architecture in the world, but it is practical and easy to reason about.
39+
40+
## What Argus Does Right Now
41+
42+
The current version is focused on the first usable workflow:
43+
44+
- scans folders recursively for video files
45+
- extracts media metadata with `ffprobe`
46+
- samples frames with `ffmpeg`
47+
- captions frames locally with Ollama
48+
- builds a SQLite index for search
49+
- exposes a simple local browser UI
50+
51+
It also works well with mounted network shares. If your footage lives on a NAS over SMB, you can mount the share in macOS and point Argus at the mounted path under `/Volumes/...`.
52+
53+
## Quick Install Guide
54+
55+
If you want the shortest path from zero to a working local search experience, this is it.
56+
57+
### Prerequisites
58+
59+
You will need:
60+
61+
- macOS
62+
- Python 3.11 or newer
63+
- [FFmpeg](https://ffmpeg.org/)
64+
- [Ollama](https://ollama.com/)
65+
- the `gemma3` vision model pulled locally
66+
67+
### Install Argus
68+
69+
From the repository root:
70+
71+
```bash
72+
git clone https://github.com/discoposse/argus.git
73+
cd argus
74+
python3 -m venv .venv
75+
source .venv/bin/activate
76+
python3 -m pip install -e .
77+
brew install ffmpeg
78+
ollama pull gemma3
79+
```
80+
81+
### Verify Your Local Dependencies
82+
83+
Before the first run, do a quick dependency check:
84+
85+
```bash
86+
argus doctor --model gemma3
87+
```
88+
89+
You should see `ffprobe`, the Ollama API, and the `gemma3` model all come back as available.
90+
91+
## First Run
92+
93+
The easiest path is the one-command pipeline:
94+
95+
```bash
96+
argus run /path/to/source/folder --output-dir ~/ArgusOutput
97+
```
98+
99+
If your source footage is on a mounted NAS share, it looks like this:
100+
101+
```bash
102+
argus run /Volumes/StudioNAS/Footage --output-dir ~/ArgusOutput
103+
```
104+
105+
A quick note here because it matters: use the mounted filesystem path, not the raw `smb://` URL. Argus expects normal filesystem paths.
106+
107+
Once the run completes, launch the local browser UI:
108+
109+
```bash
110+
argus serve --output-dir ~/ArgusOutput --open-browser
111+
```
112+
113+
That gives you a simple local search interface where you can:
114+
115+
- search by clip content
116+
- search by tags
117+
- search by visible on-screen text
118+
- copy the source path
119+
- reveal the source file in Finder
120+
121+
## Why This Is Useful Even in the Early Version
122+
123+
The main value is not that Argus magically understands everything in a clip. The value is that it removes the blank space between “I know we shot this somewhere” and “here is the actual file path.”
124+
125+
That changes the workflow a lot when you have a large archive.
126+
127+
Instead of searching by memory, you can search by likely content.
128+
Instead of opening random folders, you can search for visual descriptions.
129+
Instead of relying on naming conventions that fell apart six projects ago, you can search the actual clips.
130+
131+
That is a much better starting point for building a real internal footage library.
132+
133+
## What Is Next
134+
135+
There is still plenty to do.
136+
137+
The current roadmap includes:
138+
139+
- improving clip summaries and tag quality
140+
- making the browser workflow more useful for review
141+
- refining search and filtering
142+
- exploring native Blackmagic RAW support through a dedicated adapter
143+
144+
For now, though, the important thing is that the first real workflow already works. I can point Argus at a folder of footage, let it grind away locally, and come back to a searchable library without sending any of that media to a cloud service.
145+
146+
That is exactly the kind of tool I wanted to exist, so I built it.
147+
148+
## Project Links
149+
150+
- Github repo: [https://github.com/discoposse/argus](https://github.com/discoposse/argus)
151+
- Usage guide: [https://github.com/discoposse/argus/blob/main/docs/USAGE.md](https://github.com/discoposse/argus/blob/main/docs/USAGE.md)
152+
153+
If you give it a try and have ideas for where it should go next, open an issue or a PR. This is one of those projects that gets better the more real-world footage libraries it gets tested against.

0 commit comments

Comments
 (0)