Repository navigation
Releases: anysda/torrcast
Release list
v1.1.4
Python 3.12 everywhere, a public CI, and everything that landed on master since 1.1.3.
torrcast now runs on Python 3.12 or newer, and the installer brings one where
the system has none. The floor is raised from 3.11 to 3.12 across the whole
project: the package promise, the linters and the type checker agree on it, and
the code uses the type syntax 3.12 introduced. On a system without a fitting
interpreter, Debian 12 among them, the installer fetches uv and lets it bring a
Python 3.12 of its own under the install prefix; where the system already has
3.12 or newer, uv is not touched at all. A venv built on an older interpreter is
rebuilt by the upgrade instead of being kept. On macOS the Homebrew list names
python@3.12. The install also stops making you wait for what it can defer.
Every push is checked in public. The full acceptance gate runs on GitHub
Actions for master and dev, pull requests get the quick gate, and a nightly
run catches whatever drifts on its own. The README opens with the CI, release,
license and HACS badges in all four languages. A guard makes sure
uv sync --frozen leaves the lock untouched.
Search reaches further and the menu is cleaner. A picture is found by its
name in the other language. A barely known namesake yields to the richer
franchise of the same name, a third name can hand the query over the same way,
and equally near franchises are ranked by weight rather than by the length of
their slug. A kinsman heads a numbered line only when it came earlier, and the
numbered and the subtitled names of one picture are glued into a single entry.
Games, sheet music and audiobooks are kept out of the menu, and the video marks
in a release name veto the audio tag when its kind is called. The second-wave
queries match their answers to releases by name instead of by position, and a
top-up the guard rejects is set aside and spent when no Russian track is proven.
Posters and descriptions. A poster the ready ones pushed out of the cache
is served from the shelf instead of going missing; a missed poster body is named
in the trace rather than swallowed, and a probe tells a byte miss from a
deferred one. Hatnote parsing is guarded and redirected article extracts are
cleaned before they reach the card.
The show and the host. The heap TorrServer grows above its cache is
bounded, so a long show no longer swells the host. When the warmup cannot take
a spot it gives up and says so out loud instead of spinning on it. The show
name is quoted in the language of the output.
Home Assistant. The integration is laid onto a stand straight from git, so
the acceptance runs against the same tree the release is cut from.
Install as before:
curl -fsSL https://torrcast.anysda.space | sh
Then add anysda/torrcast to HACS as a custom repository of the integration
category, download it, and restart Home Assistant.
Update in place: sudo cast --upgrade.
v1.1.3
A new README, a fresh demo, and everything that landed on master since 1.1.2.
The README is rewritten in four languages. English, Russian, Spanish and
Japanese each get a page that opens with what torrcast is for, names what you
need, and walks through installing, watching, the Home Assistant card, the
Telegram bot and the commands. The demo is recorded again on the current build:
from the install command to a picture on the TV.
The search menu no longer waits on one lagging indexer. The first circle of
indexers is capped, so a quorum member that is slow to answer cannot hold the
menu for everyone else. A typo in a title is corrected and the source is asked
again; a name the merged pool has lost is retried word by word, shortened from
the end, before torrcast gives up. An anime mark in brackets is still read as
one, a release kind missing from one entry is borrowed from its sibling in the
same answer, and a game marked PC at the very end of its name is sieved out.
A film pack or an anthology is no longer taken for a series. The episode
marker is read as a letter of its own, not as the tail of the word before it, so
Ice Age 1-5 is a pack of films rather than five episodes of a series that does
not exist. An anthology released by its novellas, carrying the same s1e1 a
series would, gets the poster of its own film: the article title decides the
kind, not the mark in the release name. A wordmark is refused as a poster and
the card is filled with a stream frame at once, and a cache row keyed by a
query is not trusted to describe a different picture.
The installer speaks your language and tests ffmpeg by deed. Every phase of
the install bar is named in the language of the run. ffmpeg is judged by its
measured seek pace, not by its version or by what its help text claims: the
system ffmpeg 8 prints readrate_initial_burst and ignores it, and used to pass
as fit while a seek on the real command hung. The configuration now belongs to
the code: an upgrade carries over only the human keys, your audio choices per
title and your bookmarks, and every raised default reaches an existing install.
A stalled show frees its own room. Warm shelves are keyed by the rules their
pieces were built with, so a change of encoding rules used to orphan the old
shelves and the show stalled against the free-space floor while they sat there.
Old shelves of a previous key form now give up their room before the floor
refuses. The head of a warm run is carried with the piece it shrank, the end of
a pack run is weighed instead of read off the exit code, and the stream level is
left to the encoder rather than nailed to a table row the receiver rejected.
The card and the console tell the truth. Play on the Home Assistant card
resumes the last show; the idle power button is gone. A refusal names the swarm
by its session window, not by the last reading taken after the show had already
given up, so a healthy source is no longer blamed. The fallback wait for a
picture compares against the real landing place, not the bookmark, so a show
that legitimately started a little earlier is not put down as dead. A flag
cast does not understand is named out loud and no show is started, the
receiver reconnect pace is set by torrcast instead of inherited from the
library, and a live LOAD retry is recorded after the attempt with its outcome.
The releases table says the same about a whole recode as the show does, HEVC or
any other codec the receiver cannot take.
Install as before:
curl -fsSL https://torrcast.anysda.space | sh
Then add anysda/torrcast to HACS as a custom repository of the integration
category, download it, and restart Home Assistant.
Update in place: sudo cast --upgrade.
v1.1.2
Everything that has piled up on master since 1.1.1, and the brand colours.
The Home Assistant card takes a typed command or a menu. The instant tab is
now a command field: type a title and the show starts, or open the menu and pick
the picture from a list. Found pictures open as a column, each with its poster,
so their names are read whole; the menu wears a clapperboard and the command
field a lightning glyph in the colour of the icons beside them. The next-episode
arrow is drawn only when there is a next episode.
A poster is found for far more pictures than before. The Wikipedia lookup no
longer insists on an exact title: it trusts the article under the original name
over a full-text guess, asks for a miniseries under the third word Wikipedia
uses for it, reads a Roman part number from the English section, lets a series
name its year by the start of the broadcast and a season belong to its series by
the run, and finds the article of a picture whose release carries the year of a
reissue. An article that never calls itself a picture is refused instead of
being trusted. The verdict is now the file address itself, and the Russian
infobox is read too. Where Wikipedia has no article at all, posters come from
IMDb.
The catalogue offers pictures, not everything that shares their name.
Soundtracks and other non-video releases are dropped by name, a format mark
written in Cyrillic twins is read as the Latin one, a film and a series that
share a bare Russian name and year are gathered together, and a found picture is
named in the tongue the product speaks and called a series the way the menu does.
A search no longer waits on a mirror that is blocked. Both AniLibria mirrors
are asked at once, its details are asked in parallel and a stall is retried
instead of dropping the release, and the adapter gets its own loopback address
so Prowlarr stops pacing it as one host. Both articles of the facts are asked at
once, so a silent hint costs no second wait. On macOS the local indexers bind on
the one loopback address the system keeps by default.
The card tells the truth about the show. It says playing only once a frame
has really arrived, keeps the seek slider from falling back on a live show,
moves the slider to the seeked place at once and its origin with the bookmark,
lets a stop out of a show that never came up, and carries a person's refusal
into the raise it interrupts. A power button is on the card.
The installer and the integration wear the brand colours. The installer
splash is the brand green instead of a turquoise, and the Home Assistant
integration wears the brand star.
Install as before:
curl -fsSL https://torrcast.anysda.space | sh
Then add anysda/torrcast to HACS as a custom repository of the integration
category, download it, and restart Home Assistant.
Update in place: sudo cast --upgrade.
v1.1.1
Two things the Home Assistant card got wrong are fixed.
The card now names a pause the second it happens, whoever pressed the button.
A Chromecast tells PAUSED only to the sender that owns the session, so the
bridge was blind to a pause made from the TV remote and guessed it from a
bookmark that had stopped moving: half a minute of the card saying "playing"
over a paused screen. The sender that owns the session is torrcast's own show
process, and it knew all along. It now writes the receiver's word into the show
record the moment it changes, and the card reads a fact instead of a guess.
Measured on the entity itself: a pause from the remote lands in 6 seconds, of
which 5 are Home Assistant's own polling interval; a resume after a pause made
from the card, 3 seconds instead of 25.
The card always has a picture while a show runs. A title that does not match a
Wikipedia article exactly, by a typo or by being the original latin name, used
to leave the card blank for the whole show, and the fallback frame grabber was
handed the stream base instead of its manifest and quietly returned nothing.
Both halves are fixed: the poster is looked up by everything the show knows
about the picture, and the frame grabber gets an address it can decode.
Install as before:
curl -fsSL https://torrcast.anysda.space | sh
Then add anysda/torrcast to HACS as a custom repository of the integration
category, download it, and restart Home Assistant.
v1.1.0
torrcast now reaches Home Assistant.
A bridge service, torrcast-ha, comes up with the install and announces itself
over mDNS, so Home Assistant finds the machine on its own with no address typed
in. The integration ships through HACS as a custom repository and adds a single
media player entity: type a title into the card and pick the picture from a
list, or hand it a bare name and get the one a console command would play. The
card shows the poster of what is on the screen, tells the next episode and the
volume of the TV, pauses, seeks, and replays the current show from the start.
A refusal from torrcast reaches Home Assistant as words, not as a status code:
if nothing was found, or a show is already running, the card says so.
A resume no longer stares at a black screen. torrcast used to name the receiver
the exact second the bookmark stood at, and on a flat keyframe grid there is
often no frame to start a picture from there: the receiver buffered until the
next one. It now starts from the nearest frame a picture can begin from, and
packs the stream from that same place.
Install as before:
curl -fsSL https://torrcast.anysda.space | sh
Then add anysda/torrcast to HACS as a custom repository of the integration
category, download it, and restart Home Assistant.
v1.0.3
macOS, natively: curl -fsSL https://torrcast.anysda.space | sh.
- torrcast installs natively on macOS with one command
- the installer takes root itself and installs Homebrew without asking
- the installer keeps its progress bar while it takes root
- a failed install shows the tail of its log instead of all of it
- cast with no query resumes the latest series
- the Telegram command retires together with the show it started
Update in place: sudo cast --upgrade.
v1.0.2
Update in place: sudo cast --upgrade.
cast --upgradeupdates torrcast in place, with no clone and no manual steps- the update refuses to interrupt a show that is running
- the receiver and the settings survive the update
- the Telegram bot reports progress and controls any show
- search reads a fansub episode pack as a range of episodes
- one more open indexer joins the catalog
Fresh install: curl -fsSL https://torrcast.anysda.space | sh