Skip to content

The web interface

Bryan Speelman edited this page Sep 12, 2026 · 3 revisions

Starting it

ripdoctor serve

On first run it generates a login and prints it once:

  first run - a login was generated
    user:     ripdoctor
    password: <shown once>
  Store it now; it is not recoverable.

The password is hashed on the way to disk, so that is the only time it is readable. --user sets a different login name on first run.

The login lives in ~/.config/ripdoctor/auth.json. If the password is lost, delete that file and start the server again to generate a new one.

Reaching it from another machine

By default it listens on 127.0.0.1:8080 — that machine only. To reach it from a laptop, change the address in the configuration file:

bind = "0.0.0.0"
port = 8080      # any free port

or pass --bind and --port to try it once. Then open http://<the machine>:8080.

It asks for the login however it is bound. There is no TLS; put it behind a reverse proxy if it leaves your own network.

Recording runs on the server, not in the browser, so a capture survives closing the laptop lid. You can leave and come back to it.

Running it as a service

To keep it running across reboots, install it as a systemd unit. packaging/ripdoctor.service in the repository is one to copy and edit — the paths in it are examples and the comments say what each is for.

Two things it needs that a plain unit does not have: access to the sound card, and BEETSDIR if beets keeps its configuration somewhere non-default.

The layout

The header, left to right:

  • Cut / Rip / Punch / Upload — which panel is showing. Rip and Upload are two ways to do one job, so they share a column and the record's name fields; only Rip and Punch show the capture device and meter.
  • The filter box and the record selector — which record the whole page is about. Every record is in the list, archived ones marked as such; the filter box narrows it. The first entry, — new album —, is where you start a record that does not exist yet. This is the only control that answers "which record", and every panel follows it.
  • The side tabs — one per side the record has. A side still recording is marked and cannot be opened.
  • The action buttons — First pass, Revert, Save, Cut tracks, Import, Archive rip. Align from archive appears only when it applies (see Re-ripping a side).

The strip above the header is the pipeline: rip › first pass › cut › import › archive. Finished steps are ticked, and the next one is highlighted. Hover a step that is not done and it says what is missing.

The waveform fills the middle in Cut mode. In Rip and Punch it is replaced by the capture controls.

Below are the track table, the album panel (artist, album, year, cover art) and the side panel.

The console at the bottom holds raw output from the tools. It is worth opening when something fails.

Keyboard

Press ? for this list in the interface.

Key Does
space play or pause from the playhead, or 3 s before the selected marker
A audition the selected marker — plays across it with a 1400 Hz tick landing on it
nudge the selected marker 0.05 s; hold shift for 0.5 s
S split the track under the playhead
F or 0 zoom to the whole side
Z zoom to the selected track
esc stop playback

With the mouse: click sets the playhead (and seeks there if audio is playing), dragging a marker moves it, dragging the background pans, the wheel zooms about the cursor, and the bar under the waveform is the whole side — click or drag it to jump.

Clone this wiki locally