Docs
Describe and sort a library of photos, videos, audio and documents from the terminal, the browser, DiskPush, or your own code.
CLI quickstart
Install, sign in once in your browser, then scan a folder. Big libraries are what the CLI is for.
curl -fsSL https://mediaanalyzer.pro/install.sh | shOr with npm: npm i -g @profullstack/mediaanalyzer
mediaanalyzer login # opens your browser; approve, and you're signed in mediaanalyzer scan ~/Pictures # previews, uploads, live dashboard, results saved locally mediaanalyzer search "insurance coverage" --category insurance mediaanalyzer apply ~/Pictures # shows the plan; add --yes to write descriptions and move files mediaanalyzer undo ~/Pictures # puts every moved file back
scan shrinks each file on your machine (videos become one contact sheet of frames, using ffmpeg if it is installed) and uploads only those previews. Re-running a scan skips files already done. Pick a tier with --tier standard|premium|byok. Every file size is included: ffmpeg ships with the CLI and samples a 2 GB video in about a second. To leave big files out, add --max-size 500MB or --max-size 2GB.
search searches indexed file names, paths, descriptions, extracted document text, categories, and tags across all your scans. Narrow it with --category or --scan, or omit the terms to list a category. Search reads the index only; it does not upload files or use model credit.
Applying results
apply writes <file>.description.txt next to each file and moves both into <folder>/<category>/. It prints the plan and changes nothing until you pass --yes. Every move is recorded in .mediaanalyzer/undo-*.json inside the scanned folder, and undo reverses the last apply. Use --no-move to only write descriptions, or --out <dir> to sort into another folder.
Folders
The model picks exactly one folder per file from your list. Edit it under Folders or pass --folders pets,travel,receipts for one scan. Nested names like kids/soccer become nested directories. other is always included.
Your own model
Under Providers, connect an Anthropic key, or any OpenAI-compatible endpoint: OpenAI, OpenRouter, Together, or your own Ollama or vLLM. Keys are sealed in your key vault under a passphrase only you hold; BYOK scans run while you have the vault unlocked (on the Providers page, or mediaanalyzer unlock) and wait with “locked: unlock to resume” while it is locked. BYOK scans cost $0.20 per 1,000 files on our side; your provider bills the model.
DiskPush
In DiskPush, enable the MediaAnalyzer plugin, select files or folders in the local pane, and choose Analyze media. It signs in with the same browser flow as the CLI.
API reference
Base URL https://mediaanalyzer.pro. Authenticate with an API key from API keys as Authorization: Bearer ma_key_.... Errors are { "error": { "code", "message" } }; a 402 means not enough credit.
| GET | /api/v1/me | Account, balance, folders, tiers, connected providers |
| GET | /api/v1/scans | Your scans, newest first |
| POST | /api/v1/scans | Create a scan: { name, tier, provider_key_id?, categories? }; byok uses your default provider |
| GET | /api/v1/scans/:id | One scan with per-folder counts |
| POST | /api/v1/scans/:id/files | Queue up to 50 files (multipart: meta + file0..fileN) |
| GET | /api/v1/scans/:id/files | Results, paged: ?after=<id>&limit=500&status=done |
| GET | /api/v1/search | Full-text search across indexed files, or list one category: ?q=insurance+coverage&category=insurance&limit=25 |
| GET | /api/v1/scans/:id/export | All results as CSV, or ?format=json |
| POST | /api/v1/scans/:id/cancel | Stop files that have not started |
| DELETE | /api/v1/scans/:id | Delete a scan and its results |
| GET / PUT | /api/v1/folders | Read or replace your folder list |
curl -s https://mediaanalyzer.pro/api/v1/scans \
-H "Authorization: Bearer $MEDIAANALYZER_KEY" \
-H "content-type: application/json" \
-d '{"name":"Holiday","tier":"standard"}'
curl -s https://mediaanalyzer.pro/api/v1/scans/$SCAN/files \
-H "Authorization: Bearer $MEDIAANALYZER_KEY" \
-F 'meta=[{"client_ref":"a1","name":"IMG_1.jpg","rel_path":"2024/IMG_1.jpg"}]' \
-F file0=@IMG_1.jpgThe CLI and DiskPush sign in with OAuth 2.1 (authorization code + PKCE, loopback redirect) at /oauth/authorize and /api/v1/oauth/token; refresh tokens rotate on every use.