Repository navigation
v0.1.0
The first release of the front end.
tsdec-gui is a local web interface for
TSDEC, the offline decrypter for recorded
DVB transport streams. TSDEC does the work as a child process; this is only the
interface around it. There is no decoding code here and nothing links against
any, so the two can be released and debugged independently.
What it does
One job at a time, because that is the honest scope for a first release.
- Pick a
.tsrecording and a.cwlcontrol word log, choose an output, and
run it. - Watch it happen: a real progress bar with a percentage, a throughput and an
estimate, fed by the decoder's progress events rather than a timer. - Stop a long recording. The stop is a request, not a kill, so whatever was
already decrypted is kept, packet aligned and playable, and the result says
how far it got rather than claiming the run finished. - Survey the PIDs in a recording, with how much of each is scrambled, and
narrow the run down to the ones wanted when a transponder carries several
services. - Thread count, CW blocker in bytes, and resync past corrupt packets.
- Light and dark, following the system preference.
- A log pane, for when a run ends oddly.
Running it
python tsdec_gui.pyNo build step and nothing outside the Python standard library, so it runs
wherever Python 3 does. It prints the address to open.
The server binds to 127.0.0.1 and refuses anything else, and it serves only
the three files under web/, so a browser cannot be used to read the disk
through it. There is no authentication because there is nothing to
authenticate against beyond the local machine, and a password would only make
it look safer than it is.
Requirements
TSDEC 2.2 or later, which is where --json landed. It is found on PATH, next
to this checkout, or wherever you point it:
python tsdec_gui.py --tsdec /path/to/tsdecThe binaries are on the tsdec releases
page.
How it drives the decoder
Through tsdec --json, which writes one JSON object per line: progress
events while it works, then a single result event with the counts, the status
code and a sentence saying what happened. That is a documented contract, not
scraped log text.
Building this on top of the decoder is what turned up four bugs in it, all
fixed in 2.2.0: log lines that ran together so a pipe could not parse them,
Ctrl+C that did nothing under Windows when the process was started in its own
group, a throughput figure that counted processor time instead of elapsed
time, and a total missing from the result so a stopped run had no honest
percentage to show.
Tests
python test_gui.pyBuilds a recording, runs it through a real tsdec, compares the output byte
for byte against the plaintext, and checks that a stop stops rather than kills.
33 checks. It ran in CI for this release against a decoder built in the same
job.
Licence
GPL v3, matching TSDEC.

