staticstream's README, made a man page by copal-readme-man

SSTR(1) Copal: the programs in ~/code SSTR(1)

sstr, sstr-workspace, ytq - Static Stream: a stream stopped in a file, and let go again

Light can be slowed until it seems to stand still, and released. What the experiments keep is the pulse’s state, written into matter and read back out as light. A static stream does that with bytes. A stream is written into a .sstr file with its order, its pace and its tolerance for damage intact, and later let go again as a stream:

  • into a new file;

  • to a player at the pace it was recorded;

  • to VLC or mpv as clients, while it is still being recorded.

Every record is protected by Reed–Solomon codes and parity, about 21 % more bytes, and checkpoints are signed with your SSH key. Nothing is encrypted, and nothing is decoded, so no codec is involved.

This repository is the Rust home of the format, of the sstr command, of ytq, Copal’s download queue that watches the clipboard, and of sstr-workspace, the terminal Workspace over both. ytq archives what it downloads as Static Stream by default, so the two belong together. ytq was a Python program in copal; phase 2 moved every line of it here, and retired that one.

sstr export is the bulk half of sstr play IN -o FILE: a folder in, the files the captures hold out.

sstr export DIR                  every .sstr in DIR
sstr export DIR -r               and every folder under it
sstr export DIR -n               what it would do, writing nothing
sstr export DIR --into ELSEWHERE write the files somewhere else
sstr export DIR --remove         delete each capture once its file is

written and verified sstr export A.sstr B.sstr named captures, as well as folders

The name comes from the capture’s own header — its content_type decides .mp4, .webm, .mkv, .m4a, .txt — which is the same answer the Workspace’s Export key gives, because it is the same function. A file already there is skipped and counted, never overwritten and never quietly renamed to a -1 name. Nothing is renamed to the real name until the capture has verified: a damaged capture’s recovered bytes stay as NAME.part with the damage counts printed under them, and the exit status is 1.

In the Workspace, X on a folder is that command line, printed into the Transcript before it runs.

docs/clipboard-to-share.md is the short guide to the workflow this exists for: a URL copied on the Mac, through the SPICE clipboard, into ytq’s queue, and out as a file on the folder the Mac shares with the guest.

sstr config is the settings of all three programs: what each one is, which file said so, and how to change it.

sstr config                      every setting, its value, and where it came from
sstr config get OUTPUT
sstr config set OUTPUT mp4
sstr config unset SSTR_KEY
sstr config --file ytq set OUTPUT sstr     ~/.config/ytq/config instead

~/.config/copal/media.conf is written by default: it is read by sstr, ytq and the Workspace alike. ~/.config/ytq/config is read after it, so a key set in both is a key changed in the first with no effect — and sstr config says so, with the line that closes the gap, rather than leaving you to find out.

A change is a line edit: the line that sets the key is replaced where there is one and appended where there is not, and every other byte of the file — which for media.conf as Copal installs it is three quarters explanation — is the byte it already was.

In the Workspace, , opens the same thing as a screen: the settings, the value in force, and which file set it. Space walks a value with a short list of choices (OUTPUT, AUTOSTART, SSTR_DEFLATE), e types one, u takes the line out, w aims the next change at the other file.

The screen writes no config file. It builds sstr config set KEY VALUE, says that line into the Transcript, runs it, and says back what it printed — the rule every Service follows, so a change made with one key can be read out of the Transcript and pasted into a setup script.

Word Is From
Workspace the whole window NeXTSTEP’s Workspace Manager
Browser Miller columns over any folder the File Viewer’s Browser view
Shelf items picked for later the File Viewer’s Shelf
Inspector the selection’s header, notes, license and verification Tools > Inspector
Transcript the running log Smalltalk-80
Services verbs sent to the selection NeXTSTEP Services

A file is an object and a verb is a message sent to it. sstr play cap.sstr and Play picked from Services are the same message.

2026-09-18 staticstream