Skip to content

2.100.26

Choose a tag to compare

@ttlequals0 ttlequals0 released this 28 Oct 21:14
· 11 commits to main since this release
f3c3c1b

New features

  • Cue templates can cut every match on their own, with no ad next to it. A global "Cut matched cue audio" setting (off by default), a per-feed override and a per-template value decide it, explicit beating inherited. Each match becomes a marker with the cue type's category, so the feed's segment category actions decide whether it is removed, beeped, kept or marked. A feed whose templates all cut their own matches can run cue-only without start and end templates. (#889) (#874)
  • The auto-process window is a setting with a per-feed override: default 48 hours, up to 720, for instances that run only occasionally. (#889) (#895)
  • The local upload size limit is a setting (Settings > Audio > Max upload size, or localUploadMaxMb in the API; default 1 GB, range 1 to 4096 MB). The server's 413 response names the limit, and the docs explain the Cloudflare and nginx body-size caps that can sit in front of it. (#916) (#920)
  • Stats show cache read and write tokens and a cache hit rate across the stats page: model usage, per-run totals and phase breakdown, contributing calls and the LLM token tile. (#901) (#897)
  • Pricing stores a cache read rate (from OpenRouter or LiteLLM), operator overrides accept cacheReadCostPerMtok, and the Settings pricing form has an optional cached input field. Estimated costs on OpenAI-compatible and OpenRouter rows bill cached input at that rate. (#901) (#897)
  • On the episode page, cut markers that the audio processor merges into one span show as one block in Detected Ads, with a play button for the whole span and a segments toggle. The transcript viewer groups lines into paragraphs, with a Paragraphs / Lines toggle that remembers the choice. (#889) (#887)
  • Per-feed detection notes reach the detector, the verification pass and the reviewer as their own prompt block marked as operator instructions that override general guidance. They no longer count against the 800-character description budget. (#889)
  • Nine short videos (UI tour, pipeline walkthrough and seven feature deep dives), and a shorter README that links to the topic docs. (#873) (#880) (#901)

Fixes

  • A known ad always cuts. A marker backed by a fingerprint match, a text or defined pattern, a sponsor with an active pattern, a confirmation or a reviewer verdict owns any audio it shares with a keep-category marker, and a verification catch naming a known sponsor is no longer dropped for lying inside a kept span. The per-category keep still applies to markers of that category. (#916)
  • The JSON schema response format toggle applies to Ollama, which sends the detection schema as the native /api/chat format. In plain JSON mode some models returned one bare ad object per window or their own key, so a window's second and later ads, or all of them, were lost. The schemas now also require start_text, the reviewer's is_ad and reason, and both trim-recovery edges. (#916)
  • An Ollama call whose prompt was silently truncated to fit num_ctx now fails instead of returning an answer written without the instructions. The error names num_ctx, the lost detection window is counted under a new context_overflow loss class, and a chapter run degraded by it says so. (#901) (#893)
  • A stage routed to an OpenAI-compatible Provider B gets the opted-in JSON schema response format, and both provider slots are probed at startup and when either changes. (#915) (#892)
  • A stage routed to Provider B sends that provider's reasoning field. Previously an OpenRouter Provider B behind a different Provider A got no reasoning field, reasoning models spent the whole output budget, and chapter generation failed. (#914) (#892)
  • Transcript text built from word timings no longer renders split Whisper tokens as "AT &T .com"; words are normalized as soon as a backend returns them. (#901) (#899)
  • A CHAP frame of 128 bytes or more (a long chapter title) no longer fails the chapter restore with "Invalid ID3 synchsafe integer" and marks the episode permanently failed. The parser accepts both encodings, and a chapter tag that still cannot be read is logged and skipped. (#889) (#888)
  • A cue-only feed with transcription skipped no longer refuses "Apply confirmed and recut" and "Recut Audio" with "No saved transcript segments". (#889) (#891)
  • A same-sponsor merge can no longer shrink a marker, and a cross-fetch differential span keeps its tail instead of losing it to the last transcribed word, which left a few seconds of ad music at an episode start and before the credits. (#889)
  • The reviewer can no longer move an ad start inward past an ad-break stinger inside the span, and no longer pulls a cut back to the last spoken word across wordless audio at the file head or tail or at a differential-measured edge. (#889)
  • MP3 stream copy: a final cut ending inside the two-frame warm-up before the stream end is extended to the end instead of falling back to a re-encode, and validation no longer writes about 3 GB of temporary files per 70-minute episode. (#889)
  • In the ad review editor, dragging the current-position pin follows the "Play audio while dragging pin" setting. (#889) (#875)
  • The Podcast link on pattern details goes to the feed page instead of returning Not Found. (#889) (#876)
  • The feed's cue pair override is labelled "Create ads from cue pairs", matching the global setting. (#889) (#879)
  • The Podping listener keeps one HTTP session for block polling instead of resolving and reconnecting to the Hive node on every call. (#889)
  • Web UI on phones and foldables: safe-area padding on folded outer displays, two-column grids at 600 px and up, dialogs kept to the right half on a two-segment viewport, a consistent UI pass (sentence case, "Needs review", "Confirm" and "Not ad", whole-percent scores, "2m 5s" durations), dialogs that keep header and footer on screen, and review action rows that fit on one line. (#889)
  • whisper.cpp needs --no-flash-attn alongside --dtw on Apple Silicon (Metal) as well as CUDA. (#889) (#894)
  • The Ollama context window advice recommends 32768 or higher, since chapter prompts with default windows run 18k to 23k tokens. (#901) (#893)
  • Parakeet is the recommended local transcription backend in the docs. (#916)
  • Dependency bumps: pillow 13.0.0, certifi 2026.10.19, brotli 1.2.1, filelock 4.2.4 and frontend dependency bumps (vite 8.3.4, zod 4.6.7, fast-uri, serialize-javascript) close the open advisories. (#881)

Upgrade notes

  • Ollama users: set the context window (num_ctx) to 32768 or higher. Calls whose prompt Ollama would truncate fail and are counted as context_overflow instead of returning degraded answers. (#901) (#893)
  • Ollama users on plain JSON mode: enable the JSON schema response format toggle to get per-window ad lists that cannot be dropped. (#916)
  • Default prompts that were never customized are refreshed on upgrade to the minimal-timestamp form ([987.6-1023.4]) and now mark pauses of 1.5 s or longer with a gap cue. Customized prompts are left alone. (#886) (#884) (#883)
  • Ads backed by a fingerprint, pattern, confirmation or reviewer verdict now cut even when they overlap a kept category. Check feeds that keep intros or outros adjacent to sponsor reads. (#916)
  • The local upload limit is configurable. If uploads fail behind a reverse proxy, raise the proxy body-size cap as well (Cloudflare, nginx client_max_body_size). (#916) (#920)