Skip to main content

Marlin — video understanding on your Mac

Try it live Hugging Face PyPI

The command-line tool for Marlin-2B — a 2B video VLM for the two questions you actually ask a video: what is happening, and when. Runs free and local on Apple Silicon — no API key, no Hugging Face account.

  • marlin caption → a Scene description + a <start>–<end> event timeline
  • marlin find → locate when a query happens (supports auto-chunking for long videos)

Install

Apple Silicon (M-series Mac) only for now. NVIDIA / other platforms are coming as a separate optimized build.

uv tool install nemostation      # 1. install   (or: pipx install nemostation)
marlin setup                     # 2. set up    (sign in, build engine, download weights)
marlin caption clip.mp4          # describe what's in a video
marlin find clip.mp4 "a deer crossing"   # locate when it happens → start → end
marlin find clip.mp4 "a deer crossing" --view # same as above but with a visualizer

Two commands and you're done — setup does everything: a one-time browser sign-in (two questions, then Google), builds the local MLX engine, and downloads the weights. After it finishes, caption and find just work. The 8-bit weights are public — nothing gated, no API key. Add --json to any command for parseable output, or --view to generate and open an interactive browser visualizer.

The engine stays warm between calls so responses are fast. To shut it down and free the RAM (~16 GB): marlin stop. It auto-starts again on the next call.

What it produces

marlin caption "video.mp4" — what's in it marlin find "video.mp4", "gunfight" — when it happens
Marlin caption example Marlin find example

Each call runs one model pass on one bounded clip (~2 min at 2 fps) — the same contract as the inference server. For longer videos, Marlin automatically segments the input into overlapping ~30 s windows (5 s overlap by default, tunable via --chunk-seconds / --overlap), grounds each chunk independently, and merges the spans back to global timestamps.

Clips are auto-downscaled to the model's ~200K-pixel budget before inference (faster, far less memory, no accuracy loss) — tune with --max-pixels (lower on weak machines) or --full-res to opt out.

ffmpeg / ffprobe are required for long-video chunking (clip extraction) and for auto-downscaling. A single short clip that needs no downscaling runs without them.

Interactive Visualizer

By adding the --view flag to either find or caption, Marlin compiles the detected events into a self-contained HTML dashboard and opens it in your default browser.

Marlin Interactive Visualizer Dashboard

Why Marlin

At 2B params it's the strongest open model in its weight class on dense captioning (DREAM-1K, CaReBench) and natural-language temporal grounding (TimeLens-Bench) — competitive with Gemini-2.5 at a fraction of the cost. See the benchmarks on the model card.

Use it from an agent

marlin skills install        # → .claude/skills/ + .agents/skills/

Installs the video-understanding skill so Claude Code / Codex use marlin as "eyes on a video" — clip-length and single-find limits baked in. Every verb honors --json (stdout parseable, progress on stderr).

Contributing

Marlin is meant to be extended — and adding a skill is the easiest way in. A skill is a folder under skills/ with a SKILL.md that teaches an agent to use caption / find for one job — clip scoring, b-roll search, highlight reels, footage catalogs, whatever you build.

skills/
  video-understanding/SKILL.md   # ships today — the reference
  your-skill/SKILL.md            # ← add yours

Add one:

  1. Copy the format from video-understanding/SKILL.md — frontmatter (name, description, requires.bins) + a short recipe.
  2. Keep it honest about the limits (one bounded clip per call; find returns one span).
  3. Open a PR. New skill ideas, issues, and docs fixes are all welcome too.

Hack on the CLI:

git clone https://github.com/shu-bamma/marlin-cli
cd marlin-cli
uv tool install --editable .     # or: pip install -e .
pytest                           # contract tests

New verbs, engine support, and bug fixes are all fair game — open an issue to chat about anything bigger. Licensed under Apache-2.0.

Links

Metadata

Release files for nemostation 0.1.24

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for nemostation 0.1.24
File Size Uploaded Provenance Actions
nemostation-0.1.24.tar.gz 866.7 kB Without provenance Details for nemostation-0.1.24.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for nemostation 0.1.24
File Interpreter ABI Platform Actions
nemostation-0.1.24-py3-none-any.whl Python 3 none any Details for nemostation-0.1.24-py3-none-any.whl

Total release size: 938.0 kB

Release files / nemostation-0.1.24.tar.gz

Download URL nemostation-0.1.24.tar.gz
Size 866.7 kB
Tags Source
SHA-256 checksum
How to use checksums
3d24458350ebb55cbe04e766b67d785728d75bbb0bd5b99b1fd45638fde01a43
BLAKE2b-256 checksum
How to use checksums
404763879416d8dfd00a5631702354a2b8f315ca4d6b45436237179606034648
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.8.13

Release files / nemostation-0.1.24-py3-none-any.whl

Download URL nemostation-0.1.24-py3-none-any.whl
Size 71.3 kB
Tags Python 3
SHA-256 checksum
How to use checksums
ef368107edc660a88194ba9affe401a2ccd6b57c1875f546922fa228ced94daa
BLAKE2b-256 checksum
How to use checksums
31f2241312e1f3b00e1fe7ac99f1c505946bb946053b4781bd1b7a9652c911d7
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.8.13

Security for nemostation 0.1.24

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page