staticstream's README, made a man page by copal-readme-man
| SSTR(1) | Copal: the programs in ~/code | SSTR(1) |
NAME
sstr, sstr-workspace, ytq - Static Stream: a stream stopped in a file, and let go again
DESCRIPTION
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.
Getting a folder of captures back out
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.
Settings
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.
The Workspace’s words
| 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 |