APP

Adom Video โ€” Hydrogen-webview video player

Frame-accurate video player for Adom containers. Plays .webm/.mp4 with native HTML5 controls + custom toolbar. Path rows click-to-reveal in VS Code Explorer; extract/trim outputs auto-reveal too. CLI- and HTTP-drivable so Claude can seek and extract frames without simulating clicks.

v0.1.4 demo: 6-section feature tour, captured with foreground-rebump pattern at high frame rate

๐Ÿ’ฌ Sample prompts Paste any of these into Claude Code to use this app
Play a recording Open /tmp/recording.webm in adom-video so I can scrub through it
Gallery Open my /tmp/videolib folder in adom-video gallery view
Extract a frame Use adom-video to extract the frame at t=2.0s from /tmp/recording.webm
Trim a clip Use adom-video to trim /tmp/recording.webm from 1.0s to 5.0s
Drive the open player Seek the open adom-video player to t=12.5s and pause it
Probe a file Run adom-video probe on /tmp/recording.webm and show me the codec and FPS
โšก Install this app

Paste this into Claude Code (VS Code panel, Adom editor, or terminal) to install:

I want to install the "Adom Video โ€” Hydrogen-webview video player" app from the Adom Wiki (https://wiki-ufypy5dpx93o.adom.cloud/wiki/apps/adom-video). For the Docker CLI: curl -fsSL https://wiki-ufypy5dpx93o.adom.cloud/static/apps/adom-video/adom-video -o /usr/local/bin/adom-video && chmod +x /usr/local/bin/adom-video && adom-video install Then verify the install works.

Download latest

โŠž Windows coming soon
macOS coming soon
๐Ÿง Linux coming soon
๐Ÿณ Adom Docker CLI adom-video ยท

See all releases on GitHub (private repo โ€” access required)

adom-video

Hydrogen-webview video player. Plays .webm / .mp4 from disk with frame-accurate scrub, A-B loop, pixel zoom up to 8ร—, gallery thumbnails, and frame-extract / trim.

CLI- and HTTP-drivable so Claude can seek, pause, extract-frame, and trim without simulating clicks.

Demo

Player + native controls + custom toolbar

Watch the 6-section feature tour: final.webm

The tour covers:

  1. Player + native controls + custom toolbar โ€” a clip plays with the full HTML5 controls bar (timeline, volume, speed menu, fullscreen, picture-in-picture) AND the custom toolbar for everything the native bar doesn't give you.
  2. Folder gallery โ€” every clip auto-probed for codec, resolution, frame count, recorded-at time parsed from the filename.
  3. Scrub + A-B loop โ€” frame-step with , ., set markers with I O, instant loop fires.
  4. Pixel zoom + pan โ€” zoom up to 8ร— with pixel-perfect rendering, drag to pan.
  5. Extract frame โ†’ reveal in VS Code โ€” files land next to the source clip in extracts/ and auto-reveal in the VS Code Explorer.
  6. CLI + HTTP โ€” every action exposed as a CLI subcommand and an HTTP endpoint.

Why this exists

adom-desktop produces screen and tab recordings as WebM. Until this tool, every demo round-tripped through the desktop ("send the file home, open it manually, scrub manually, screenshot a frame manually"). adom-video play <file> opens a tab next to VS Code, plays in a loop, and exposes every action as a CLI/HTTP call.

Quick use

adom-video play /tmp/recording.webm        # one-clip player
adom-video play /tmp/recordings/           # gallery for the directory
adom-video gallery /tmp/recordings/        # explicit gallery view
adom-video probe /tmp/recording.webm       # ffprobe โ†’ JSON
adom-video extract-frame v.webm 3.5 -o frame.png
adom-video trim v.webm 1.0 5.0 -o clip.webm

Extracts and trims land in <clip-folder>/extracts/<stem>-frame-<MMmSSsMMM>.png and <clip-folder>/trims/<stem>-trim-<in>-<out>.<ext> โ€” sortable filenames, sane location, auto-revealed in the VS Code Explorer sidebar (sidebar is forced visible too).

Drive an open player from outside (port auto-discovered via /tmp/adom-video.port)

adom-video seek 12.5      # jump to t=12.5s in the open tab
adom-video pause
adom-video resume
adom-video set-rate 0.5   # half speed
adom-video status         # current state JSON
adom-video stop           # close tab + shut down server

HTTP API

Method ยท PathPurpose
GET /api/libraryList clips with metadata + filename hints (rec-desktop-*, rec-tab-*)
GET /api/stateCurrent player state (file, currentTime, paused, rate, in/out points, zoom)
POST /api/seek {t}Jump to time
POST /api/pause {} ยท POST /api/resume {}
POST /api/rate {rate}0.25 โ†’ 4.0
POST /api/zoom {zoom}1.0 โ†’ 8.0
POST /api/loop {t_in, t_out}Set A-B loop range
POST /api/load {path}Load a different clip into the open player
POST /api/extract-frame {path, t, out?}Write PNG, auto-reveal, return path
POST /api/trim {path, t_in, t_out, output?}Stream-copy webm/mp4, auto-reveal
POST /api/reveal {path}Reveal any path in the VS Code Explorer (forces sidebar visible)
GET /api/consoleRecent JS console output (forwarded from the UI)
GET /api/thumb?path=&t=&w=JPEG thumbnail (cached)

Keyboard shortcuts

KeyAction
Space / KPlay / pause
J / LSlow down / speed up (0.25ร— โ†’ 4ร—)
โ† / โ†’โˆ’5s / +5s ยท Shift = ยฑ1s ยท Alt = ยฑ0.1s
, / .Previous / next frame (uses fps from probe)
0โ€“9Jump to 0%, 10% โ€ฆ 90%
I / OSet A / B loop point ยท Shift+I/O = clear
+ / โˆ’Zoom in/out (1ร— โ†’ 8ร—) ยท 0 = reset ยท drag to pan when zoomed
FFullscreen
MMute
GToggle gallery view
?Show shortcut help

Filename hints

Recordings produced by adom-desktop are auto-detected:

  • rec-desktop-<unix-ms>.webm โ†’ tagged desktop, recorded-at parsed from filename
  • rec-tab-<session>-<tab>-<unix-ms>.webm โ†’ tagged tab

The Inspector panel surfaces this plus codec / dimensions / FPS / frame count / duration / bit rate / file size / encoder / clickable Folder + Path rows that reveal in the VS Code Explorer.

How the FPS is computed

Chrome MediaRecorder writes r_frame_rate=1000/1 and avg_frame_rate=1000/1 as placeholder values โ€” both useless. adom-video probe falls back to ffprobe -count_packets and divides by duration when the reported FPS is implausible (>120 fps). For typical desktop screen recordings this gives the real capture rate (15โ€“30 fps).

Architecture

  • Rust + tiny_http. Single static binary, ~1.6 MB.
  • HTTP byte-range support โ€” required for <video> element seek (the native scrubber works because of this).
  • ffprobe + ffmpeg must be on PATH.
  • Server writes /tmp/adom-video.port so subcommands find a running instance.
  • Always opens on a non-VS-Code Hydrogen pane โ€” never covers Claude Code chat.
  • Container webview URL uses $VSCODE_PROXY_URI substitution (no localhost: baked in).
  • HTML uses <base href="./"> so relative URLs work in the proxied iframe.
  • Reveal-in-VS-Code via adom-vscode reveal + adom-vscode sidebar show (sidebar forced visible so the highlighted entry is in view).

Brand

Adom dark + teal. Familjen Grotesk (headlines), Satoshi (body), JetBrains Mono (timecode + paths). Monochrome white SVG icons. No emoji.

License

AGPL-3.0-or-later.

ADOM
adom-video 1 month ago
v0.1.2 โ€” extract/trim land in <dir>/extracts and <dir>/trims with sortable filenames + auto-reveal in VS Code Explorer
1.6 MB

Install notes

Adom Docker CLI install steps
curl -fsSL https://wiki-ufypy5dpx93o.adom.cloud/static/apps/adom-video/adom-video -o /usr/local/bin/adom-video && chmod +x /usr/local/bin/adom-video && adom-video install

Videos

v0.1.3 demo: 6-section feature tour with TTS narration

AI Skill โ€” how Claude uses this app

Edit AI Skill

name: adom-video description: Hydrogen-webview video player. Plays .webm/.mp4 with frame-accurate scrub, A-B loop, pixel zoom up to 8ร—, gallery thumbnails, frame-extract to PNG, trim & export. CLI- and HTTP-drivable so Claude can seek/pause/extract without simulating clicks. Use when the user wants to view a video clip, review a screen recording, scrub through frames, extract a specific frame as PNG, trim a clip, compare clips in a gallery, or play recordings produced by adom-desktop. Trigger words โ€” play video, open video, video player, view recording, show me a video, watch clip, scrub video, extract frame, trim video, compare videos, gallery of videos, open recording, view webm, view mp4, screen recording playback, demo recording playback, frame-by-frame.

adom-video

Thin Rust CLI + Hydrogen webview video player. One file or a whole folder, Hydrogen tab opens automatically (always on a non-VS-Code pane). Brand-themed (Adom dark + teal + Familjen Grotesk + Satoshi + JetBrains Mono).

Quick use

adom-video play /tmp/recording.webm        # opens Player tab
adom-video play /tmp/recordings/           # opens Gallery for the directory
adom-video gallery /tmp/recordings/        # explicit gallery view
adom-video probe /tmp/recording.webm       # ffprobe โ†’ JSON
adom-video extract-frame video.webm 3.5 -o frame.png
adom-video trim video.webm 1.0 5.0 -o clip.webm

Drive an open player from outside (useful for AI)

The server writes its port to /tmp/adom-video.port. Subcommands auto-discover it:

adom-video seek 12.5     # jump to t=12.5s in the open player
adom-video pause
adom-video resume
adom-video set-rate 0.5  # half speed
adom-video status        # current state JSON
adom-video stop          # close the tab + shut down the server

Or hit the HTTP API directly (port from the lock file):

GET  /api/library        โ€” list of clips with metadata + filename hints (rec-desktop-*, rec-tab-*)
GET  /api/state          โ€” current player state
POST /api/seek    {t}
POST /api/pause   {}
POST /api/resume  {}
POST /api/rate    {rate}
POST /api/zoom    {zoom}
POST /api/loop    {t_in, t_out}
POST /api/load    {path}            โ€” load another clip into the open player
POST /api/extract-frame {path, t, out?}  โ€” writes PNG, returns path
POST /api/trim    {path, t_in, t_out, output?}  โ€” stream-copy webm/mp4
GET  /api/console        โ€” recent JS console for inspection
GET  /api/thumb?path=&t=&w=  โ€” JPEG thumbnail (cached)

Keyboard shortcuts (in the player tab)

KeyAction
Space / KPlay / pause
J / LSlow down / speed up (0.25ร— โ†’ 0.5ร— โ†’ 1ร— โ†’ 1.5ร— โ†’ 2ร— โ†’ 4ร—)
โ† / โ†’โˆ’5s / +5s ยท Shift = ยฑ1s ยท Alt = ยฑ0.1s
, / .Previous / next frame (uses fps from probe)
0โ€“9Jump to 0%, 10% โ€ฆ 90%
I / OSet A / B loop point ยท Shift+I/O = clear
+ / โˆ’Zoom in/out (1ร— โ†’ 8ร—) ยท 0 = reset
DragPan when zoomed
FFullscreen
MMute
GToggle gallery view
?Show shortcut help

Filename hints

Recordings produced by adom-desktop are auto-detected:

  • rec-desktop-<unix-ms>.webm โ†’ tagged "desktop", recorded-at parsed from filename
  • rec-tab-<session>-<tab>-<unix-ms>.webm โ†’ tagged "tab"

The Inspector panel surfaces this plus codec/dimensions/FPS/frame-count/duration/bit rate/file size/encoder.

Install

adom-video install   # writes ~/.claude/skills/adom-video/SKILL.md

The wiki publish flow uses tool-publisher. Auto-discovery hook reads the wiki every 30 min and prompts to upgrade when a newer pub_version is available.

Notes

  • Uses tiny_http with HTTP byte-range support (required for <video> seek).
  • ffprobe + ffmpeg must be on PATH. Probe is non-fatal โ€” players load even if probe fails.
  • Always opens on a non-VS-Code pane in Hydrogen โ€” never covers Claude Code chat.
  • Container webview URL uses $VSCODE_PROXY_URI substitution (no localhost).

Sub-Skills
?
What are Sub-Skills?

Sub-skills are community-contributed AI skill extensions for this component. They teach AI assistants about specific tools, configurators, or workflows.

Examples:

  • A manufacturer’s configuration tool for a motor controller
  • A community-written design guide for an amplifier circuit
  • An automated test/validation script for a sensor module

How to add one: Click Add Sub-Skill, provide the URL to your skill and a brief description. Submissions are reviewed by the Adom team before going live.

No sub-skills yet. Be the first to contribute one!

๐Ÿ”Ž How Claude finds this page (discovery snippet)

This page opts into Adom Wiki auto-discovery. When a user working in Claude Code mentions any of the trigger phrases below, Claude can proactively suggest this page. The pitch is exactly what Claude will say.

Pitch
"Hydrogen-webview video player with frame-accurate scrub, A-B loop, pixel zoom, gallery thumbnails, and frame-extract / trim โ€” every action CLI- and HTTP-drivable so Claude can seek and extract frames without simulating clicks."
Triggers
"play video", "open video", "video player", "view recording", "watch clip", "scrub video", "frame by frame", "extract frame", "trim video", "gallery of videos", "view webm", "view mp4", "screen recording playback", "demo recording playback", "scrub through frames", "A-B loop", "pixel zoom video"