Archilyzer · Source

archilyzer

Archilyzer
git clone https://archilyzer.pages.dev/source/archilyzer.git
Log | Files | Refs | README | LICENSE

commit 011916ab287f5a9d908db01d236855fd5df5ea6a
parent de00b4517ad4bc7740cfe6a89369f5be197e1973
Author: I Mean I'm Just Saying <imeanimjustsaying@kiwifarms.st>
Date:   Thu, 24 Sep 2026 19:40:47 -0400

plans: Rumble's embed endpoint 403s every download — upstream #17496, impersonation as step 0 of the Rumble slice

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>

Diffstat:
Mplans/rumble-sweep-pacing.md | 25+++++++++++++++++++++++++
1 file changed, 25 insertions(+), 0 deletions(-)

diff --git a/plans/rumble-sweep-pacing.md b/plans/rumble-sweep-pacing.md @@ -50,5 +50,30 @@ file set, so it lands after W merges): the override) and watch one paced sweep complete; the first complete listing after 44 days may legitimately shrink — the two-observation guard handles that as designed. +## Found next, 2026-09-24 19:36 — Rumble's embed endpoint answers 403 to every download + +Step 1 worked: job `01M3AWDQ4RZD6CV93BJPREQVPX` ran the paged walk (`--lazy-playlist -I 1:50`), +listed the newest page and found new videos. The first download died on +`[RumbleEmbed] … Unable to download JSON metadata: HTTP Error 403: Forbidden` +(`https://rumble.com/embedJS/u3/`, `rumble.py:168`), the managed download aborted as "network", +and the sync failed on that one video. **It is not that video and not the patch:** the +`leaflit-rumble` and `rekietalaw-rumble` syncs at 16:05 UTC hit the same 403, and no retained +job log holds a successful Rumble archive line. Upstream: yt-dlp issue #17496 (opened 2026-08-20, +same error, same `2026.08.19`, labelled *impersonation* + *site-bug*, no fix), after #15089 / +#15148 / #15129 (Rumble behind Cloudflare, browser-only fingerprints); a June report says +`--impersonate chrome` worked for a while. The editor never passes `--impersonate` +(`grep -rn impersonate common editor` is empty) although the pipx venv has `curl_cffi` targets +(Chrome-133/136, Safari-18). + +**Step 0 for the slice, ahead of pacing:** a per-platform yt-dlp args table (Rumble → +`--impersonate chrome`, and the pacing from step 2) applied in `configArgs` +(`common/ytdlp/runYtdlp.ts:221`) so every Rumble spawn — enumeration, metadata probe, download — +carries it; `downloadQueueKey` (`common/lib/queueKeys.ts:69`) already resolves the platform. +Verify first by hand, ONCE, metadata only (operator's rule: fetches go through Archilyzer; +this is the ask-first exception): +`yt-dlp --impersonate chrome --skip-download --print title https://rumble.com/v7fxzsc-lindsay-clancy-insane-twist-on-the-view-these-people-are-nuts.html`. +If that also 403s, Rumble is closed to this client until upstream moves and the slice waits; +the channels then need a "source unreachable" outcome rather than a failed sync per cadence. + Out of scope: tolerating exit 1 generally; changing the shrink guard; anything in the patched extractor (the pagination fix is in and working; the 429 is Rumble's rate limit, not a bug).