Skip to content
Video Assets Server

Video Assets Server CLI

The video-assets-server command searches every source from a terminal, downloads clips with their credits, turns a shot list into a b-roll sequence, runs the MCP server over stdio for desktop agents, and starts the HTTP server. It is the same code that runs https://video.shep.bot, and needs no API keys.

npx video-assets-server search "4k vertical drone ocean"

Commands

video-assets-server search <query> [--category nature.ocean] [--style timelapse] [--orientation portrait]
                     [--min-resolution 1080] [--min-duration 5] [--max-duration 30] [--commercial] [--free]
                     [--providers nasa,wikimediacommons] [--limit N]
video-assets-server download <id> [--height 1080] [--format mp4] [--dir ./footage]
video-assets-server sequence <shots.txt | "shot 1; shot 2; ..."> [--orientation portrait] [--size 1080x1920]
                     [--fps 30] [--total 30] [--download] [--dir ./footage/sequences/<name>] [--name promo]
video-assets-server mcp     # MCP server over stdio, with download_video writing to ./footage
video-assets-server serve   # HTTP API + website + MCP at /mcp on port 8787

Queries understand resolution, orientation, length and frame rate, so "4k vertical drone ocean 10s" filters exactly like --min-resolution 2160 --orientation portrait --min-duration 10. --commercial keeps only clips whose licence allows commercial use (verdict yes or yes-with-credit).

search prints the filters it read from your query, then ranked results (score, licence verdict and clip id; then the title with its category, resolution, orientation, length, frame rate and year; then the preview URL), followed by one status line per source. A * after the verdict marks editorial footage (people, insignia or brands without releases):

$ npx video-assets-server search "vertical ocean" --limit 3
Filters: {"orientations":["portrait"]}

0.94  yes-with-credit* nasa:GSFC_20111012_BF_m10849_Bottom_Ocean
      Meanwhile, At the Bottom of the Ocean (nature.ocean · 2011)
      https://images-assets.nasa.gov/video/GSFC_20111012_BF_m10849_Bottom_Ocean/GSFC_20111012_BF_m10849_Bottom_Ocean~preview.mp4
…

  * editorial: people, insignia or brands without releases; not for ads.

Sources:
  nasa               ok       3
  internetarchive    ok       3
  pexels             link     0  https://www.pexels.com/search/videos/ocean/

Clips whose frame size the source only reports on the clip’s own page (NASA search results, for example) stay in the list, ranked below clips known to match; open one with get_video or /v1/clips/{id} for its full facts.

Download

npx video-assets-server download "nasa:GSFC_20161212_Tidal_m12450_Magnetic" --height 1080

Saves the smallest file that reaches --height (a 1080p rendition rather than a 4K master) into ./footage/<category>/, and adds the clip to ATTRIBUTION.md and credits.json in that folder. It prints the licence and the credit line.

Sequence

cat > shots.txt <<'TXT'
City skyline at night (4s)
Coffee pour close-up (3s)
People walking in the rain
Clouds timelapse
TXT
npx video-assets-server sequence shots.txt --orientation portrait --total 20 --name promo
sh footage/sequences/promo/concat.sh

Picks one clip per shot (commercial-safe unless you pass --non-commercial), prints the plan with a note for each shot that is cropped, upscaled or shorter than planned, and writes timeline.otio, concat.sh, remotion.json, ATTRIBUTION.md and credits.json into ./footage/sequences/<name>/. With --download the picks are saved into its footage/ folder and the exports use those local files; without it they read the media straight from the sources.

Run it with Docker (no install)

docker run --rm ghcr.io/arielshad/video-assets-server node dist/cli.js search "rocket launch slow motion" --commercial

As a local MCP server that writes downloads into your project:

docker run -i --rm --user "$(id -u):$(id -g)" -v "$PWD/footage:/app/footage" \
  ghcr.io/arielshad/video-assets-server node dist/cli.js mcp

Run it from source

git clone https://github.com/arielshad/video-assets-server
cd video-assets-server && npm ci && npm run build:server
node dist/cli.js search "clouds timelapse" --min-resolution 1080 --commercial

Environment

Variable Purpose
VIDEO_SERVER_PROVIDERS Comma list to search only some sources (e.g. nasa,nasasvs).
VIDEO_DOWNLOAD_DIR Where download, sequence and mcp downloads go (default ./footage).
VIDEO_SERVER_USER_AGENT User-Agent sent to sources. Wikimedia requires contact details in it.
NODE_USE_ENV_PROXY Set to 1 so Node honours HTTPS_PROXY.

See Self-hosting for every server setting.

AI agent? This page is also available as markdown.