Changelog
Changelog
[0.5.1] - 2026-07-02
- The default look is back to the original clean, neutral theme. Public sites now open in the neutral Base theme — the crisp white/zinc palette (near-black ink in dark mode) with a blue accent that the site had before the themed redesign — instead of the warm brass "Archive" reading room. The wordmark and headings are all-sans to match, so the default site reads the way it used to. The Archive, Selenized, and Swiss themes are all still one click away in the theme picker, and any theme you'd previously chosen is remembered. Sites that set their own brand accent keep it. (The installable-app manifest's colors follow the new default too.)
[0.5.0] - 2026-07-01
- Fixed: some Odysee/Rumble/Twitch videos opened in a YouTube player. A video you'd opened before multi-platform support was added could get stuck playing in the YouTube embed even after its data was corrected, because the browser's local transcript cache (IndexedDB) held an old record with no platform and was never invalidated. The cache now self-heals — stale records are discarded on load — so every video plays in its correct platform's player. As a safeguard, a video whose platform somehow can't be determined now shows an "Open on source site" link instead of silently loading the wrong player.
- Instant offline word-search, powered by a background FlexSearch index. On the Offline page, each channel now has a Build index action: it constructs a FlexSearch full-text index for that channel in a Web Worker — entirely off the main thread, so indexing a large channel never freezes the page (a live progress % shows the work). Once built, a search box does instant word/prefix search across your indexed channels and returns the matching transcript lines (with channel + timestamp) — and because the index is built from the same shards the offline download caches, it works with no connection. The worker bundles into the static site (no server needed). This is a first, self-contained surface; the main search box will gain the same acceleration next.
- Install the archive as an app, and search it offline. Each public site is now a PWA: it ships a web app manifest (named + themed with the site's accent color) and an icon set, so your browser can install it to your home screen or desktop and open it in its own window. A service worker caches the app so it loads instantly on repeat visits and still opens without a connection. A new Offline page (linked in the footer) lists the site's channels with a Download button each — pick the channels you want and their transcripts are saved to your device so you can search them with no connection; a live Online/Offline indicator and per-channel "Available offline" state show what's ready, and you can remove a channel to free space. Downloads are opt-in (a channel's transcripts can be large) and refresh automatically when the site is rebuilt. Everything still works online-only in browsers without service-worker support.
- Two more themes + a theme picker, and the themes now feel genuinely distinct. A palette menu next to the light/dark toggle lets you switch the whole site's look between Archive (the warm reading room), Selenized (the Solarized successor — teal-slate on warm tan, with the calibrated Selenized accents), Swiss (red/black/white editorial), and Base (neutral) — each in light or dark, and your choice is remembered. Beyond color, each theme now carries its own corner shape and typeface: Swiss goes hard-cornered in a neo-grotesque, Selenized adopts a code voice (JetBrains Mono headings + IBM Plex Sans), and Archive keeps its soft-cornered serif reading room. Switching is instant and never changes the layout. (If you'd picked the old "Terminal" theme, it becomes "Selenized" automatically.)
- Optional per-site brand accent. A site can set its own accent color (a hex, in the editor's site config) to replace the family brass everywhere on its public build — the wordmark mark, links, badges, and highlights. It's baked onto the page at build time so it's correct on the very first paint, and applies in both light and dark. Sites that don't set one keep the family brass.
- New look: the "Archive / Reading Room" identity. The public site adopts the family design system — a serif display face (Source Serif 4) for headings/counts, clean sans for body, and mono for the query/power layer, over a warm paper (light) / ink (dark) palette with a brass accent. A light/dark/system theme toggle in the header replaces OS-only dark mode and persists your choice. Header, footer, and the whole search UI (query builder, filters, scopes, charts) are rebuilt on a shared component kit for a calmer, more consistent feel — the simple one-box search is unchanged; the power tools just read better.
- "New since your last visit." A dismissible banner on the home page tells you how many transcripts were added since you were last here, and first-time visitors get a one-line nudge toward the power tools (layered queries, scopes, filters, charts). Entirely client-side — nothing about your visit leaves your browser.
- Family navigation. The header gains a "Sites" switcher to hop between sibling sites in the pool, plus an optional link back to the family hub (set the hub URL once in the editor's Settings).
- Fixed: flash of giant social icons on first load. Footer social icons now carry an intrinsic size, so they render correctly before the stylesheet loads on a static host instead of briefly ballooning.
- Transcript coverage is now a chart metric. Each video's stats record carries a
coveragefraction (transcript's last cue end ÷ video duration), selectable as a Y-axis metric ("Transcript coverage") in the chart options — e.g. average coverage by channel surfaces channels with truncated/partial transcripts. Coverage isnullfor videos with no transcript or no usable duration. (Requires the one-timebuild:index+build:statsrebuild on the bumped stats schema; the field is back-filled for every transcribed video from itstranscript.cues.json.)
[0.4.1] - 2026-06-22
- New "Content added" charts: track when videos joined the library, not just when they were uploaded. The time axis of any chart can now bin on when we downloaded or transcribed a video, in addition to its upload date — pick the Date field in the chart options. The dashboard ships a cumulative Library growth (added) chart by default (grouped by channel), and the chart gallery gains a Content added group with cumulative download/transcription curves and a per-month stacked-by-channel breakdown. Like every chart, these filter by channel and export to CSV/PNG. (Populating acquisition dates for existing videos requires a one-time data rebuild —
build:index+build:statsre-extract on the bumped stats schema; videos added before this release fall back to file timestamps.)
[0.4.0] - 2026-06-14
- Search video descriptions and tags. Each search layer's scope dropdown gains two new options alongside Transcripts / Live chat / Title-channel: Description (matches the video's description text) and Tags (matches its keyword tags). They combine with the others through the same AND/OR/NOT query builder and regex, and — like any search — can be charted (e.g. videos whose description mentions a term, over time). Because descriptions/tags live in the per-video transcript data, a description/tags-only search loads the same data a transcript search does.
- New chart breakdowns: Media type, Status, and Tag. Charts can now split or bucket videos by Media type (regular video / livestream / Short — Shorts were previously indistinguishable), by Status (available / unlisted / deleted — e.g. chart how many videos got deleted each month), and by Tag (a bar per keyword tag). Media type and Status are also available as series groupings. (Populating these for existing videos requires a one-time data rebuild —
build:index+build:statsre-extract on the bumped schema versions.) - Charts are now a view of Search. The separate Charts dashboard is gone; instead, a Results / Chart toggle sits beside the result count on the search page. Flip to Chart and the current search — query, every filter, and your advanced settings — is plotted as a single chart, updating live as results stream in. A Chart options panel (right where the Filters panel lives) configures it: chart type (line/bar/stacked/area/pie), X axis (upload date binned by week/month/quarter/year, category, or duration buckets), split into series by channel/platform/language, cumulative running totals, and a data source switch between Search matches (plot matched videos or total hits) and Metadata (uploads, views, durations, top channels — aggregated over the same in-scope videos). An Examples ▾ menu one-click loads common chart shapes. Switching between Results and Chart keeps everything in place — it's the same search — and Share current search now encodes the chart too (
view=chart+ a compactcs=shape), so a shared link opens straight to the same chart; the URL stays in sync live, just like the query does. The old standalone/chartspage and its multi-chart board are retired on the site (dashboard authoring still lives in the editor). - Footer links to the network's other sites. The footer now carries a subtle, low-key list of links to the other sites in the network (e.g. Jeralyzer's footer links to Rekietalyzer and Hasanalyzer). It's intentionally understated — a small, muted row beneath the downloads/social row — since it's a secondary wayfinding aid, not a primary feature. By default it's a flat list of every sibling site; a site can override that to surface closely-related subjects first under named groups (configured per site in the editor), with everything else collected under a trailing "Other sites" group. Only sites that have a public URL configured appear, and a site never links to itself. Single-site installs show nothing new.
[0.3.5] - 2026-06-04
- Duplicates page. A new Duplicates tab in the primary nav lists shorts whose transcripts match across channels and platforms — re-uploads, mirrors, and cross-posts of the same clip — grouped into clusters (strongest match first). Each cluster is laid out like a group of search results: a header bar shows how it matched (exact or near transcript, similarity score, clip-of-longer) and whether it spans multiple channels or platforms — or is a same-channel re-upload — and every member is a search-hit-style row with its title, channel name, platform and upload date, plus the original video's URL on its own line so it's obvious the members are genuinely different videos. Clicking a member's title plays it in the transcript modal. The page header also counts how many clusters contain same-channel duplicates. A Filters section (styled like the search page's) scopes the list by platform — YouTube only by default, with Rumble/Odysee/Twitch toggleable — and by match type, relationship (same-channel / cross-channel / cross-platform / clip-of-longer), channel, and a title/channel text search; platform and channel toggles drop members on de-selected platforms/channels and hide any cluster left with fewer than two members. The list is scoped to the channels this site exposes, so every entry is openable here. Sites with no detection run yet show an empty state.
[0.3.3] - 2026-06-01
- Videos whose English captions only existed under a regional/auto code now appear. A handful of videos had English subtitles only under codes like
en-USoren-en-US(no plainen), which the index didn't recognize — so they were missing from the site even though they had a transcript. These now show up in browse and search like any other transcribed video.
[0.3.1] - 2026-05-31
- Date-range filter in search. The filters section has a new Date row with From / To pickers that limit results to videos uploaded within the range (inclusive bounds; leave either end blank for open-ended). It works the same way the charts date range does and applies to the browse list and every search layer. The range saves in profiles and the working snapshot, rides along in shared search links, and carries over to "Chart this search" so the chart opens scoped to the same window.
[0.3.0] - 2026-05-30
- Per-site builds (major change). The export is now built and deployed once per site from a shared index, so one editor can publish several independent sites (e.g. Jeralyzer and Rekietalyzer) over the same channel pool. Each deployed site shows only its own channels and carries its own branding (title, header, tagline, footer social links), channel groups, and charts dashboard — a channel shared between sites is downloaded once and never duplicated. The site is selected at build time via the
SITE_IDenv var; the heavy per-channel transcript/subs data is generated once and shared, while each site gets a filtered summaries/subs/stats bundle composed into its own static output. No user-visible change for a single-site install beyond the branding now coming from that site's config. - Twitch.tv videos. Twitch is now a supported platform: Twitch videos play inline via a Twitch embed, and "Twitch" appears as an option in the charts platform filter and series grouping.
- Advanced query builder when charting search matches. A chart's search source now uses the same layered query builder as the main search page — combine any number of layers with AND/OR/NOT, nest groups, and set each layer's scope and regex — instead of the old single term box. Simple one-term searches still collapse to a single input.
- "Chart this search." A new control beside "Share current search" turns the query you're looking at into a chart in one click: pick a starting template (mentions over time / matching videos per month / matches by channel) and jump to the Charts tab with the query pre-filled and ready to edit. Choose whether it's added to your existing board or opens as a single-chart board, and your selected channels carry over as the chart's channel filter.
- Charts. A new Charts tab (a prominent primary nav item alongside Search) visualises the library. Build charts from video metadata — upload date (binned by week/month/quarter/year, with optional cumulative running totals), engagement metrics (views, likes, comments, follower count), duration distributions, categories, languages — or from search matches, plotting how many videos match a term (or total hits) over time. Each chart has labelled axes and hover tooltips. Pick the chart type (line/bar/stacked/area/pie), split any chart into series by channel/platform/language, and apply a dashboard-wide filter bar (date range, platform, channel, has-transcript). The editor sets the data source with a clear Metadata/Search toggle, and search terms can be plain text or regex. A chart's date/channel/platform filters narrow the search scope (not just the displayed results), so a date range keeps a search chart light. The default board leads with example search charts, date-limited to the recent ~2 years so they load quickly out of the box. Charts open with an editor-authored default dashboard plus a grouped gallery of templates — including ready-made search examples — that you can fork and customise. Your board auto-saves locally and survives reloads; Reset to default restores the editor's dashboard. Share copies a link that restores the whole board, and every chart can be exported as a PNG (download or copy to clipboard) or its data as CSV. Engagement metrics come from a new stats dataset built alongside the search index.
[0.2.2] - 2026-05-26
- Browse all videos without searching. With no search query entered, the results list now shows every video matching the current filters (newest-first), instead of a "add a layer to search" prompt. Typing a query narrows the list as before; clearing it returns to the full browse view. This replaces the old workaround of searching regex
.on titles. - Collapsing the query builder to one layer no longer strips a hidden setting. Deselecting "Show hits in results" on a layer and then deleting the other layers used to leave that lone layer permanently hits-off, with no control to fix it (the checkbox is hidden in the single-layer compact view). Collapsing back to compact now resets "Show hits" to on.
[0.2.1] - 2026-05-25
- "Unlisted" availability filter. The Availability filter group now has a dedicated Unlisted checkbox alongside Available and Deleted. Availability is now a three-way split — unlisted videos are their own bucket rather than counting as "Available", so you can isolate or hide them independently. Unlisted videos remain shown by default, and the filter is saved in profiles and shareable links like the other filters.
[0.2.0] - 2026-05-22
- Composable layered search. The single search bar is now a query builder: combine any number of layers with AND / OR / NOT and arbitrary nesting, each layer scoped to transcripts, live chat, or title/channel. Matches from every layer surface in the result list with a per-layer colour swatch. Editing one layer doesn't re-run the others, so deep nests stay fast. Simple one-keyword search still looks like a single input — the builder collapses to compact mode when there's only one layer. Legacy
?q=&m=&re=share-links auto-migrate to a one-layer tree. - Query-builder controls. A "Reset layers" button collapses the builder back to one empty transcripts leaf. An "Unwrap" button on every non-root group flattens its children into the parent; if the group had NOT set, the promoted children inherit a flipped NOT so the meaning of the subtree doesn't silently change. The "slow / medium / fast" cost badges next to each scope dropdown have been removed — they read as a warning on the primary mode (transcripts) without giving you anything to do about it.
- Profile row at the top of the search. The profile selector now sits above both the query builder and the filters, and is shown even with a single channel since profiles cover both query and filters. The "Share current search" button moved into the same row. The dirty-profile indicator is now a small amber
•instead of the ambiguous text "(unsaved)". A Revert button appears whenever the active profile is dirty, re-applying the saved snapshot (filters and query both) so you can experiment and roll back without re-selecting the profile. - Collapsible filters section (channels, Type, Audience, Availability). The summary stays visible whether open or closed and shows "{N} of {Total} channels" with a compact list of the selected channel names (truncated on overflow; full list on hover). Open/closed state persists across reloads, and toggling never marks a profile dirty.
- "Reset everything" button in the filter reset row clears the layered query and every filter and drops the active profile pointer in one shot. The narrower "Reset channels" / "Reset all filters" buttons stay alongside.
- Virtualised search results. Results now render through a virtualised list, one element per matching video. Cards mount in full when they enter the viewport and unmount once scrolled away — much smoother on long result lists, and no empty bands while sizes settle. The "Show more videos" pagination button and the "Videos per page" advanced option are gone; everything renders in one continuous list. When the search pipeline still caps at its per-batch hit limit, a "Load more results" button appears below the list.
/changelogpage rendering this changelog, linked from the right side of the sticky header, with per-heading copy-link buttons for permalinks.- Search results survive a page reload. Previously the cached hit rows would silently disappear after refresh (the "N hits" count stayed correct, but the list of timestamps was empty).
- AND-chained search layers no longer drop hit timestamps after certain edit sequences. Previously, evaluating a layer with "Show hits in results" off and then turning it on at the same query/scope could surface the matching video without any timestamps; the workaround was toggling regex on and off.
- Filter changes survive a refresh again when a saved profile was active. Previously, committing a filter change with a profile selected would silently revert on the next reload.
- Index builds no longer crash on large datasets. A single live-chat track encoding to hundreds of MB could previously exhaust memory; page bodies now stream to disk instead of being buffered, and the post-build availability pass no longer makes thousands of sequential file reads.