docs: rename yt-offline → Catacomb across README, ROADMAP, guides, packaging
Prose + commands updated to the new name: brand reads "Catacomb", while binary/path/package references are the lowercase `catacomb` (commands, deb/rpm names, ~/.local/share/catacomb, catacomb.db, catacomb.desktop). Codeberg repo URLs left pointing at the existing repo. Also folds in the pending doc edits from earlier in the session. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
parent
404362bfb0
commit
3f611849af
72 changed files with 1513 additions and 293 deletions
|
|
@ -1,4 +1,4 @@
|
|||
# Packaging yt-offline
|
||||
# Packaging Catacomb
|
||||
|
||||
This document covers building distributable packages. The one-liner:
|
||||
|
||||
|
|
@ -23,7 +23,7 @@ on demand. Runtime deps declared: `yt-dlp`, `ffmpeg`, `mpv`, `xdg-utils`,
|
|||
|
||||
```sh
|
||||
scripts/package.sh deb
|
||||
sudo apt install ./dist/yt-offline_*_amd64.deb
|
||||
sudo apt install ./dist/catacomb_*_amd64.deb
|
||||
```
|
||||
|
||||
### .rpm (Fedora / RHEL / openSUSE)
|
||||
|
|
@ -34,7 +34,7 @@ already-built (and release-profile-stripped) binary.
|
|||
|
||||
```sh
|
||||
scripts/package.sh rpm
|
||||
sudo dnf install ./dist/yt-offline-*.x86_64.rpm
|
||||
sudo dnf install ./dist/catacomb-*.x86_64.rpm
|
||||
```
|
||||
|
||||
Note: `ffmpeg` on Fedora lives in [RPM Fusion](https://rpmfusion.org/);
|
||||
|
|
@ -50,8 +50,8 @@ would balloon the image and tangle the licensing.
|
|||
|
||||
```sh
|
||||
scripts/package.sh appimage
|
||||
chmod +x dist/yt-offline-*-x86_64.AppImage
|
||||
./dist/yt-offline-*-x86_64.AppImage
|
||||
chmod +x dist/catacomb-*-x86_64.AppImage
|
||||
./dist/catacomb-*-x86_64.AppImage
|
||||
```
|
||||
|
||||
## Arch Linux
|
||||
|
|
@ -82,11 +82,11 @@ sudo apt install mingw-w64 zip # or your distro's equivalent
|
|||
scripts/package.sh win
|
||||
```
|
||||
|
||||
This produces `dist/yt-offline-<ver>-x86_64-windows.zip` containing
|
||||
`yt-offline.exe`, `LICENSE.txt`, and a `README.txt` listing the runtime
|
||||
This produces `dist/catacomb-<ver>-x86_64-windows.zip` containing
|
||||
`catacomb.exe`, `LICENSE.txt`, and a `README.txt` listing the runtime
|
||||
PATH deps (yt-dlp / ffmpeg / mpv). Release builds link as a GUI-subsystem
|
||||
app (no console window); the binary reattaches to the launching terminal
|
||||
at runtime (`attach_windows_console` in `main.rs`) so `yt-offline.exe
|
||||
at runtime (`attach_windows_console` in `main.rs`) so `catacomb.exe
|
||||
--web 8080` from PowerShell prints its logs, while a double-click stays
|
||||
windowless.
|
||||
|
||||
|
|
@ -110,12 +110,12 @@ rustup target add aarch64-apple-darwin # or x86_64-apple-darwin
|
|||
MAC_ARCH=arm64 scripts/package.sh mac # arm64 (default) | x86_64
|
||||
```
|
||||
|
||||
This cross-compiles, assembles an unsigned `yt-offline.app`
|
||||
This cross-compiles, assembles an unsigned `catacomb.app`
|
||||
(`Info.plist` + the Mach-O binary; an `.icns` icon too if `png2icns` is
|
||||
available), and zips it to `dist/yt-offline-<ver>-<arch>-macos.zip`. The
|
||||
available), and zips it to `dist/catacomb-<ver>-<arch>-macos.zip`. The
|
||||
`.app` is **not codesigned or notarized**, so on the target Mac it must be
|
||||
opened the first time via right-click → Open, or cleared with `xattr -dr
|
||||
com.apple.quarantine yt-offline.app`. Runtime deps (yt-dlp / ffmpeg / mpv)
|
||||
com.apple.quarantine catacomb.app`. Runtime deps (yt-dlp / ffmpeg / mpv)
|
||||
are expected on PATH as on the other platforms.
|
||||
|
||||
A `.dmg` and codesigning/notarization (and a `tray-icon`-based macOS tray)
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
[book]
|
||||
title = "yt-offline"
|
||||
title = "Catacomb"
|
||||
description = "Self-hosted archive for YouTube, TikTok, Twitch and more. Setup, usage, anti-bot, troubleshooting, and architecture."
|
||||
authors = ["InannaBeloved"]
|
||||
language = "en"
|
||||
|
|
@ -8,5 +8,5 @@ src = "src"
|
|||
[output.html]
|
||||
default-theme = "navy"
|
||||
preferred-dark-theme = "navy"
|
||||
git-repository-url = "https://codeberg.org/anassaeneroi/yt-offline"
|
||||
edit-url-template = "https://codeberg.org/anassaeneroi/yt-offline/_edit/main/docs/{path}"
|
||||
git-repository-url = "https://codeberg.org/anassaeneroi/catacomb"
|
||||
edit-url-template = "https://codeberg.org/anassaeneroi/catacomb/_edit/main/docs/{path}"
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
[Introduction](./introduction.md)
|
||||
|
||||
# Using yt-offline
|
||||
# Using catacomb
|
||||
|
||||
- [Installation](./installation.md)
|
||||
- [First run & configuration](./first-run.md)
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
# Staying ahead of YouTube's bot detection
|
||||
|
||||
YouTube increasingly fingerprints and rate-limits automated clients.
|
||||
yt-offline ships a layered defense; understanding the layers makes the
|
||||
catacomb ships a layered defense; understanding the layers makes the
|
||||
difference between "everything downloads" and "constant captchas."
|
||||
|
||||
In rough order of impact:
|
||||
|
|
@ -10,13 +10,13 @@ In rough order of impact:
|
|||
|
||||
This is the single biggest factor. **Anonymous requests get captcha-
|
||||
walled the hardest.** Provide a `cookies.txt` exported from a browser
|
||||
where you are **signed in to YouTube**, or point yt-offline at the
|
||||
where you are **signed in to YouTube**, or point catacomb at the
|
||||
browser profile directly.
|
||||
|
||||
A *valid* logged-in jar contains the auth cookies `SID`, `SAPISID`,
|
||||
`__Secure-1PSID`, `__Secure-3PSID`, `LOGIN_INFO`, etc. A jar with only
|
||||
`VISITOR_INFO1_LIVE`, `PREF`, `YSC` is **anonymous** — it's not signed in
|
||||
and actually makes detection *worse* than no cookies. yt-offline's
|
||||
and actually makes detection *worse* than no cookies. catacomb's
|
||||
Settings → Cookies panel warns you when your jar is anonymous or expired.
|
||||
|
||||
Two ways to supply cookies:
|
||||
|
|
@ -37,7 +37,7 @@ Two ways to supply cookies:
|
|||
subdirectory itself). The advantage: cookies are read fresh from the
|
||||
live session each download, so they never go stale.
|
||||
|
||||
> Cookies are session credentials — yt-offline never commits or transmits
|
||||
> Cookies are session credentials — catacomb never commits or transmits
|
||||
> `cookies.txt` unprompted, and redacts the cookie path out of any log
|
||||
> line shown in the UI.
|
||||
|
||||
|
|
@ -45,7 +45,7 @@ Two ways to supply cookies:
|
|||
|
||||
yt-dlp's `--impersonate` makes requests carry a real browser's TLS
|
||||
fingerprint (via `curl_cffi`), so the connection doesn't *look* like a
|
||||
script. The bundled install sets this up automatically and yt-offline
|
||||
script. The bundled install sets this up automatically and catacomb
|
||||
picks an impersonation target per platform.
|
||||
|
||||
If impersonation silently does nothing, it's almost always a
|
||||
|
|
@ -58,7 +58,7 @@ is present). See
|
|||
## 3. POT tokens (Proof-of-Origin)
|
||||
|
||||
YouTube increasingly binds a per-video **Proof-of-Origin token** to
|
||||
playback; without one, format URLs come back empty. yt-offline can run
|
||||
playback; without one, format URLs come back empty. catacomb can run
|
||||
[bgutil-pot](https://github.com/jim60105/bgutil-ytdlp-pot-provider-rs), a
|
||||
loopback HTTP server that mints these tokens, and point yt-dlp at it.
|
||||
|
||||
|
|
@ -68,14 +68,14 @@ yt-dlp; the matching plugin installs into its venv) and click **Install**.
|
|||
> **Version-skew footgun:** the yt-dlp plugin must come from the *same
|
||||
> release* as the bgutil-pot server binary — **not** the PyPI package,
|
||||
> which versions independently and silently produces no tokens on a
|
||||
> mismatch. yt-offline's installer handles this by unpacking the
|
||||
> mismatch. catacomb's installer handles this by unpacking the
|
||||
> version-matched plugin zip from the server's release.
|
||||
|
||||
## 4. Player-client selection
|
||||
|
||||
YouTube cracks down on different internal "player clients" over time —
|
||||
the `web` client is currently the most captcha-prone, while `tv` and
|
||||
`mweb` are the least. yt-offline no longer forces `web`; it lets yt-dlp
|
||||
`mweb` are the least. catacomb no longer forces `web`; it lets yt-dlp
|
||||
pick good defaults. If a specific channel keeps hitting captchas, set a
|
||||
client override (global or per-channel):
|
||||
|
||||
|
|
@ -85,7 +85,7 @@ tv,mweb
|
|||
|
||||
## 5. Throttling
|
||||
|
||||
A burst of ~30 rapid requests is a classic trip-wire. yt-offline inserts
|
||||
A burst of ~30 rapid requests is a classic trip-wire. catacomb inserts
|
||||
a small jittered pause between videos (a fixed cadence looks robotic; a
|
||||
random one looks human) and, after any rate-limit hit, triples the
|
||||
sleeps for the rest of the batch before recovering.
|
||||
|
|
|
|||
|
|
@ -80,7 +80,7 @@ fallback.
|
|||
## Anti-bot subsystems
|
||||
|
||||
`ytdlp_bin.rs` manages the optional self-contained venv at
|
||||
`~/.local/share/yt-offline/` (nightly `yt-dlp[default]` + `curl_cffi` +
|
||||
`~/.local/share/catacomb/` (nightly `yt-dlp[default]` + `curl_cffi` +
|
||||
bundled `deno`). `pot_provider.rs` runs `bgutil-pot` for Proof-of-Origin
|
||||
tokens — its yt-dlp plugin must come from the same release as the server
|
||||
binary. `error_class.rs` pattern-matches yt-dlp stderr into actionable
|
||||
|
|
@ -95,7 +95,7 @@ wall is RateLimited, not NotFound).
|
|||
and drives the HTTP API with curl — genuine end-to-end coverage of the
|
||||
axum + SQLite + config stack.
|
||||
|
||||
`cargo test` runs both. (A `.forgejo/workflows/test.yml` CI definition
|
||||
`cargo test --release` runs both. (A `.forgejo/workflows/test.yml` CI definition
|
||||
exists, but Codeberg runs Woodpecker rather than Forgejo Actions, so it
|
||||
doesn't execute there without a self-hosted runner — run the suite
|
||||
locally.)
|
||||
|
|
@ -103,8 +103,9 @@ locally.)
|
|||
## Platform support
|
||||
|
||||
Tray (`ksni`) and file dialogs (`rfd` xdg-portal) are Linux-only / no-GTK
|
||||
by design — that's why packaging avoids a GTK dependency. Windows/macOS
|
||||
aren't first-class yet: the tray needs a per-OS backend before a clean
|
||||
cross-build. The rest (eframe/wgpu, axum, rusqlite-bundled) already
|
||||
compiles cross-platform, and `ytdlp_bin` already has `cfg!(windows)`
|
||||
branches.
|
||||
by design — that's why packaging avoids a GTK dependency. Those Linux-only
|
||||
pieces are target-gated: Windows builds use native file dialogs and a no-op
|
||||
tray stub, and the repo now ships a cross-compiled Windows zip. macOS has a
|
||||
local osxcross packaging path, but still needs on-hardware validation,
|
||||
codesigning/notarization, and a real tray backend before it is a normal
|
||||
release artifact.
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@
|
|||
## Starting a download
|
||||
|
||||
Paste any supported URL into the download bar (desktop) or the ⬇
|
||||
Downloads modal (web). yt-offline classifies the URL by platform, routes
|
||||
Downloads modal (web). catacomb classifies the URL by platform, routes
|
||||
it to the right folder, and starts yt-dlp. A channel/playlist URL pulls
|
||||
the whole thing; a single-video URL pulls just that one.
|
||||
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
## The config file
|
||||
|
||||
yt-offline reads `config.toml` **from its working directory** (the
|
||||
catacomb reads `config.toml` **from its working directory** (the
|
||||
directory you launch it from), not a fixed path. The same goes for
|
||||
`cookies.txt`. Everything in `config.toml` is also editable in Settings;
|
||||
edits there are written back to the file.
|
||||
|
|
@ -61,7 +61,7 @@ Everything nests under the one `backup.directory`:
|
|||
music/ ← audio-only "Music mode" downloads, by artist
|
||||
archive.txt ← yt-dlp's global download archive
|
||||
cookies.txt ← optional, if you set one
|
||||
yt-offline.db ← watched/positions/flags/folders/notes/cache + password hash
|
||||
catacomb.db ← plain SQLite app state (watched/positions/flags/notes, password hash, sessions, caches)
|
||||
```
|
||||
|
||||
Each creator folder gets a hidden `.source-url` sidecar so re-checks
|
||||
|
|
@ -72,8 +72,8 @@ always know the exact URL to refresh from.
|
|||
In **Settings → yt-dlp binary** you choose:
|
||||
|
||||
- **System** — uses whatever `yt-dlp` is on your `PATH`.
|
||||
- **Bundled** — click **Install** and yt-offline builds a self-contained
|
||||
venv at `~/.local/share/yt-offline/`: nightly `yt-dlp[default]` +
|
||||
- **Bundled** — click **Install** and catacomb builds a self-contained
|
||||
venv at `~/.local/share/catacomb/`: nightly `yt-dlp[default]` +
|
||||
`curl_cffi` (TLS impersonation) + a bundled `deno` (player-JS). The
|
||||
same button updates it later.
|
||||
|
||||
|
|
@ -83,8 +83,8 @@ also required for the [POT token provider](./anti-bot.md#3-pot-tokens-proof-of-o
|
|||
|
||||
## The two front-ends
|
||||
|
||||
- `yt-offline` — desktop GUI (eframe/egui).
|
||||
- `yt-offline --web [PORT]` — headless web server. Bind to `127.0.0.1`
|
||||
- `catacomb` — desktop GUI (eframe/egui).
|
||||
- `catacomb --web [PORT]` — headless web server. Bind to `127.0.0.1`
|
||||
(default) for localhost-only, a Tailscale address for your tailnet, or
|
||||
`0.0.0.0` for the LAN. **Set a password** (Settings) before exposing it
|
||||
beyond localhost — the UI and all `/api` routes are then gated behind an
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
# Installation
|
||||
|
||||
yt-offline is a single Rust binary. You can install a prebuilt package,
|
||||
Catacomb is a single Rust binary. You can install a prebuilt package,
|
||||
build from source, or grab the AppImage.
|
||||
|
||||
## Runtime dependencies
|
||||
|
|
@ -8,7 +8,7 @@ build from source, or grab the AppImage.
|
|||
Whichever way you install, these are invoked as subprocesses at runtime:
|
||||
|
||||
- **yt-dlp** — the download engine. You can use the system one *or* let
|
||||
yt-offline manage a bundled copy (see [First run](./first-run.md)).
|
||||
catacomb manage a bundled copy (see [First run](./first-run.md)).
|
||||
- **ffmpeg** — muxing, format conversion, on-the-fly transcode for the
|
||||
web player.
|
||||
- **mpv** — the default desktop player (any player taking a file path
|
||||
|
|
@ -21,14 +21,14 @@ Releases attach `.deb`, `.rpm`, and `.AppImage` artifacts.
|
|||
|
||||
```sh
|
||||
# Debian / Ubuntu / Mint
|
||||
sudo apt install ./yt-offline_*_amd64.deb
|
||||
sudo apt install ./catacomb_*_amd64.deb
|
||||
|
||||
# Fedora / RHEL / openSUSE (ffmpeg via RPM Fusion)
|
||||
sudo dnf install ./yt-offline-*.x86_64.rpm
|
||||
sudo dnf install ./catacomb-*.x86_64.rpm
|
||||
|
||||
# Any Linux — AppImage
|
||||
chmod +x yt-offline-*-x86_64.AppImage
|
||||
./yt-offline-*-x86_64.AppImage
|
||||
chmod +x catacomb-*-x86_64.AppImage
|
||||
./catacomb-*-x86_64.AppImage
|
||||
```
|
||||
|
||||
## Arch / CachyOS / Manjaro
|
||||
|
|
@ -55,11 +55,11 @@ sudo apt install build-essential pkg-config curl git python3-venv \
|
|||
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
|
||||
source "$HOME/.cargo/env"
|
||||
|
||||
git clone https://codeberg.org/anassaeneroi/yt-offline
|
||||
cd yt-offline
|
||||
git clone https://codeberg.org/anassaeneroi/catacomb
|
||||
cd catacomb
|
||||
cargo build --release
|
||||
./target/release/yt-offline # desktop GUI
|
||||
./target/release/yt-offline --web 8080 # headless web server
|
||||
./target/release/catacomb # desktop GUI
|
||||
./target/release/catacomb --web 8080 # headless web server
|
||||
```
|
||||
|
||||
`python3-venv` is only needed for the bundled-yt-dlp install path; skip
|
||||
|
|
@ -67,7 +67,13 @@ it if you'll always use system yt-dlp.
|
|||
|
||||
## Windows / macOS
|
||||
|
||||
Not first-class yet. The Linux-only system tray (`ksni`) and file dialog
|
||||
(`rfd` xdg-portal) need per-OS backends before a clean cross-build; the
|
||||
rest of the stack already compiles. See the
|
||||
[architecture notes](./architecture.md#platform-support).
|
||||
Windows is available as a release zip when built through
|
||||
`scripts/package.sh win` or tag-release CI. It includes `catacomb.exe`,
|
||||
the license, and a short runtime-dependency README; install `yt-dlp`,
|
||||
`ffmpeg`, and `mpv` / `mpv.net` on PATH.
|
||||
|
||||
macOS has a local osxcross packaging path (`scripts/package.sh mac`) that
|
||||
assembles an unsigned `.app` zip when you provide an Apple SDK locally.
|
||||
It is not built in public CI because the SDK cannot be redistributed, and
|
||||
codesigning/notarization remain follow-ups. See
|
||||
[packaging](./packaging.md) and the [architecture notes](./architecture.md#platform-support).
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
# yt-offline
|
||||
# Catacomb
|
||||
|
||||
A self-hosted media archive for YouTube and friends. Paste any URL, it
|
||||
routes the download to the right folder by source, tracks what you've
|
||||
|
|
@ -24,7 +24,7 @@ single binary that is **both** a desktop app and a headless web server.
|
|||
## Why it exists
|
||||
|
||||
Tartube is the mature open-source yt-dlp GUI and the benchmark in this
|
||||
space. yt-offline matches its feature set while adding things Tartube
|
||||
space. catacomb matches its feature set while adding things Tartube
|
||||
doesn't have: a real web UI reachable from any device, a single-binary
|
||||
distribution with a bundled toolchain, a modern security model
|
||||
(password-gated UI, Argon2, rate-limited login), a built-in anti-bot
|
||||
|
|
|
|||
|
|
@ -3,17 +3,20 @@
|
|||
Build distributable Linux packages with one script:
|
||||
|
||||
```sh
|
||||
scripts/package.sh all # .deb + .rpm + .AppImage → dist/
|
||||
scripts/package.sh all # Linux packages + Windows zip when toolchains exist
|
||||
scripts/package.sh deb # just the .deb
|
||||
scripts/package.sh rpm
|
||||
scripts/package.sh appimage
|
||||
scripts/package.sh win # Windows .zip via mingw-w64
|
||||
scripts/package.sh mac # unsigned macOS .app .zip via local osxcross SDK
|
||||
```
|
||||
|
||||
It builds the release binary once and reuses it for every format,
|
||||
installing `cargo-deb` / `cargo-generate-rpm` on demand and downloading
|
||||
`appimagetool` to `dist/tools/` on first AppImage build. Per-format
|
||||
failures are isolated and summarized at the end. Output (gitignored)
|
||||
lands in `dist/`.
|
||||
`appimagetool` to `dist/tools/` on first AppImage build. Windows is included
|
||||
when the mingw target/toolchain is present; macOS is local-only because
|
||||
osxcross needs an Apple SDK. Per-format failures are isolated and summarized
|
||||
at the end. Output (gitignored) lands in `dist/`.
|
||||
|
||||
## Formats
|
||||
|
||||
|
|
@ -37,5 +40,5 @@ Actions — so they don't run there without a self-hosted runner. Until
|
|||
then, build packages locally with `scripts/package.sh` and publish docs
|
||||
with `scripts/publish-docs.sh`.
|
||||
|
||||
The repo's [`docs/PACKAGING.md`](https://codeberg.org/anassaeneroi/yt-offline/src/branch/main/docs/PACKAGING.md)
|
||||
The repo's [`docs/PACKAGING.md`](https://codeberg.org/anassaeneroi/catacomb/src/branch/main/docs/PACKAGING.md)
|
||||
has the per-distro install commands and the Windows/macOS status in full.
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
# Troubleshooting
|
||||
|
||||
yt-offline classifies failed downloads into one of nine classes and shows
|
||||
catacomb classifies failed downloads into one of nine classes and shows
|
||||
a one-line suggested fix next to the failed job. This page expands on the
|
||||
most common ones, plus a few non-download issues.
|
||||
|
||||
|
|
@ -15,7 +15,7 @@ wall. In order of effectiveness:
|
|||
2. **Switch to bundled (nightly) yt-dlp** if you're on system stable.
|
||||
3. **Enable the POT token provider.**
|
||||
4. **Try a player-client override** of `tv,mweb` for that channel.
|
||||
5. If it's a one-off, just wait — yt-offline auto-retries transient
|
||||
5. If it's a one-off, just wait — catacomb auto-retries transient
|
||||
rate-limits after a cooldown.
|
||||
|
||||
## Impersonate targets show "(unavailable)"
|
||||
|
|
@ -40,7 +40,7 @@ major versions are mismatched"* warning.
|
|||
**Cause:** the yt-dlp plugin came from PyPI (Brainicism's package, which
|
||||
versions independently) instead of the jim60105 Rust server's release.
|
||||
|
||||
**Fix:** re-run the POT **Install/Update** button — yt-offline installs
|
||||
**Fix:** re-run the POT **Install/Update** button — catacomb installs
|
||||
the version-matched plugin zip from the same release as the server
|
||||
binary. Don't `pip install bgutil-ytdlp-pot-provider` yourself.
|
||||
|
||||
|
|
@ -68,14 +68,14 @@ see [Anti-bot](./anti-bot.md).
|
|||
|
||||
## Downloads stall forever
|
||||
|
||||
A job sits running with no progress. yt-offline's **hang watchdog**
|
||||
A job sits running with no progress. catacomb's **hang watchdog**
|
||||
auto-kills any job silent for 5 minutes and re-queues it, so this should
|
||||
self-heal. If it recurs on a specific URL, it's usually a server-side
|
||||
issue with that source; check the job log in the Downloads panel.
|
||||
|
||||
## Disk fills up / downloads fail with ENOSPC
|
||||
|
||||
yt-offline runs a **disk-full preflight** and refuses to start a download
|
||||
catacomb runs a **disk-full preflight** and refuses to start a download
|
||||
when the target filesystem has less than ~500 MB free, surfacing it as a
|
||||
clear "disk full" failure rather than a half-written file. Free space and
|
||||
retry.
|
||||
|
|
@ -103,13 +103,13 @@ broken Vulkan stack, the OS can create the window while wgpu never
|
|||
presents a frame. Try the OpenGL renderer:
|
||||
|
||||
```bash
|
||||
YT_OFFLINE_RENDERER=glow yt-offline
|
||||
YT_OFFLINE_RENDERER=glow catacomb
|
||||
```
|
||||
|
||||
or:
|
||||
|
||||
```bash
|
||||
yt-offline --renderer glow
|
||||
catacomb --renderer glow
|
||||
```
|
||||
|
||||
If that works, update/reinstall your Vulkan driver later and switch back
|
||||
|
|
@ -129,6 +129,6 @@ UI until restarted.
|
|||
|
||||
- **The job log** — every download/transcode job keeps its full yt-dlp /
|
||||
ffmpeg output in the Downloads panel (expand the job).
|
||||
- **`yt-offline.crash.log`** — next to your `yt-offline.db`. A panic in
|
||||
- **`catacomb.crash.log`** — next to your `catacomb.db`. A panic in
|
||||
any thread (UI, web worker, download) is appended here with a
|
||||
timestamp, so it survives a GUI launched without a terminal.
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
A structured analysis of [Tartube v2.5.231](https://github.com/axcore/tartube)
|
||||
(2026-05-24), our project's primary feature benchmark. Written to give
|
||||
yt-offline a concrete target to work toward — every section ends with a
|
||||
catacomb a concrete target to work toward — every section ends with a
|
||||
"What we can do" note about whether to adopt, adapt, or skip.
|
||||
|
||||
Tartube codebase: ~146,000 lines of Python 3 across 19 modules under
|
||||
|
|
@ -452,7 +452,7 @@ The 791 boolean flags in `mainapp.py` cover all of these plus their
|
|||
**What we can do:** A handful of these tabs map to features we
|
||||
literally don't have (FFmpeg presets, comments, profiles, scheduling
|
||||
calendar). They're roadmap items, not config surface. The actual
|
||||
*configuration surface* of yt-offline is currently:
|
||||
*configuration surface* of Catacomb is currently:
|
||||
|
||||
- backup dir, max concurrent, bundled-or-system yt-dlp
|
||||
- player command, browser (for `--cookies-from-browser`)
|
||||
|
|
@ -568,7 +568,7 @@ For the record (to keep momentum honest):
|
|||
|
||||
## 12. Specification for "Tartube parity" milestone
|
||||
|
||||
Working definition: a yt-offline release is "at Tartube parity" when
|
||||
Working definition: a catacomb release is "at Tartube parity" when
|
||||
the following are all true.
|
||||
|
||||
- [x] **Per-target download options** with cascade resolution and a
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue