From f014d3153118b1ba4195cdda819ec5e3548f649b Mon Sep 17 00:00:00 2001 From: Timothy Date: Tue, 21 Jul 2026 02:01:43 +0200 Subject: [PATCH] docs(511): correct the stale "external logo URL can't drive the bug" claim MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Found by sweeping the subject (external logo URL) while closing out #511, not by reading the diff — docs/channels.md and the channel editor both still documented the PRE-#502 behavior as a current limitation. #502 fixed exactly this: an external-URL logo now passes through to the graphics engine instead of being File.Exists-checked into oblivion. The SPA help text was the user-visible half — it told operators to "upload an image instead" for something that works today. No test pinned the string, and the toggle was never actually disabled for external URLs, so this is copy-only. The preview is still suppressed for external URLs, which remains correct, so the new text says why. Also documents #511's limits where an operator would look for them: the 10s deadline, 10 MiB wire cap, 3 redirects, 50 MP / 600 frame decode budget and 200 MP retention budget, plus the practical effects (a full-1080p animated overlay is limited to ~96 frames; an 8K still is fine) and the fact that busting a limit disables the bug, never the stream. refs #511 #502 --- docs/channels.md | 18 ++++++++++++++---- web/src/screens/ChannelEditScreen.tsx | 2 +- 2 files changed, 15 insertions(+), 5 deletions(-) diff --git a/docs/channels.md b/docs/channels.md index de4ab94d0..c06a9fe16 100644 --- a/docs/channels.md +++ b/docs/channels.md @@ -164,10 +164,20 @@ the system channel templates it creates, so the library-to-lineup builder (which are left alone, so builder-created and auto-tuned channels there inherit whatever the template already specifies. -**Limitation:** a logo set via **External logo URL** cannot drive the bug. `WatermarkSelector` -resolves it to the URL and then `File.Exists`-checks it, which is never true, so the watermark is -silently dropped — the URL wins for the guide listing but disables the on-screen bug. Tracked as -**#502**; the editor does not offer a bug preview in that case. +**External logo URLs drive the bug too, since #502.** `WatermarkSelector` used to resolve the URL +and then `File.Exists`-check it — never true for an `http(s)` path — so the watermark was silently +dropped and the URL won only the guide listing. It now passes through to the graphics engine, which +fetches and composites it. (The editor still offers no bug preview in that case.) + +**A remote logo is fetched under bounds, and exceeding any of them disables the bug rather than the +stream** (#511). The fetch gets a **10s** deadline covering headers *and* body, a **10 MiB** wire +cap, and at most **3 redirects**; the decode is capped at **50 MP total** (`width x height x +frames`) and **600 frames**, and the scaled frames retained for compositing at **200 MP** +(`frames x scaledWidth x scaledHeight`). A logo that busts a limit — or a host that is slow, dead or +serves a non-image — logs a warning and renders the channel with no bug; it never kills the stream. +Practical effects: an animated overlay scaled to full 1080p is limited to ~96 frames (~3.2s at +30fps), and an 8K still (~33 MP) is fine. The image is re-fetched per playout item, not cached; the +rationale for each limit is in `docs/decisions.md`. Note: `ChannelLogoGenerator.GenerateChannelLogoUrl()` hardcodes `localhost` for watermark logo fetching — see issue #1 for details. diff --git a/web/src/screens/ChannelEditScreen.tsx b/web/src/screens/ChannelEditScreen.tsx index f4e9831c9..5b743b721 100644 --- a/web/src/screens/ChannelEditScreen.tsx +++ b/web/src/screens/ChannelEditScreen.tsx @@ -798,7 +798,7 @@ function BrandingPane({ logoBugTarget == null ? 'No logo-driven watermark preset exists yet.' : externalUrlLogo - ? 'An external logo URL cannot be used as the on-screen bug — upload an image instead.' + ? 'Overlays this channel’s own logo on the stream. An external URL is fetched at render time, so no preview is shown here.' : 'Overlays this channel’s own logo on the stream, using the shared preset’s position and size.' } label="Use logo as on-screen bug" -- 2.47.3