Nishi FamilyCompare › Media Serving, Management and Delivery

Nishi Compare · measured, not asserted

Media Serving, Management and Delivery

Nishi vs the field — every Nishi cell is measured against real organ source at emit time; each gap names the watch contract that will close it.

Nishi /gallery + /library vs Jellyfin and Plex and Immich and Kavita

Overview

The purpose, declared position and evidence coverage of this domain. Source presence and completed acceptance are different measures.

Where we are. Measured 2026-08-19 against the matrix, not recalled. Ingest, thumbnails, keyframe index, fly-remux and the reader library are present and live; the page-level gaps are the ones users SEE: a harsh white surface, clunky mobile UX, broken comic rendering, no scrub previews or chapters, no HEVC. The reading-surface theme engine (nx_media_theme: five modes, WCAG-scored palettes, typography tokens) is BUILT and UNWIRED -- no serving organ imports it -- so seven theme rows sit absent one wiring rung away. Two rows (flicker-free, reflective paper feel) are physical display properties the web cannot set and are served by the e-ink reading-surface lane, not by a rung here.

Where we need to go. Meet Jellyfin, Plex and Kavita on the delivery UX they are judged by (theme, mobile, comics, trickplay, chapters, HEVC, ABR) with every claim measured by the live judge and page_verify, then exceed on the axes no media server holds: on-demand super-resolution, LLM-native book packing, and a sovereign semantic index over the library.

The unit. 1 u = one measured session-leg. Calibration from landed rungs: the mangagen panel compositor went from existing substrate to shipped and live-verified in ONE leg (2026-08-13); the citations rung went from 3 to 55 domains in one leg across seven seats (2026-08-18); a greenfield engine with a bite-proven gate has measured 2 to 4 legs. Estimates recalibrate as rungs land and PR7 actuals write back.
Cost to stop hurting the eyes: 3 u. Through M0. The cheapest rung on the board wires an engine that already exists; the judge and a11y pass make the claim measurable instead of asserted.
Cost to production parity: 13 u. Through M3: reader correctness, player parity and codec reach. HEVC is the long pole at 3 u and is genuine greenfield over the existing codec.
Cost to exceed: 16.5 u. Everything below. The semantic index is the one axis where we can lead Immich on sovereignty if the pre-declared recall rule is met.

Latest recorded release

No valid dated release entry is recorded for this domain.

Release entries describe recorded changes; they do not establish that every capability passed evaluation.

15 of 35 capabilities measured|4 of them measured exceeds|20 open|coverage 428/1000|adoption 3 full / 12 partial

Evidence profile — what the gaps on this board actually are

Measured by nx_swcompare_evidence, read back by nx_evprofile_lib. Every figure is a count with its denominator — there is deliberately no score, no grade and no percentage anywhere in this band, because a stored scalar is a field a seat can edit and a counted partition is not.

evidence|grounded 15/15|unsupported 0|gates green 1/1|proven able to fail 1/1|never bitten 0|green at 0/0 0|open gaps 20|of them unnamed 2|of them proof withheld 0|flips ready 0

proven able to fail counts the gates that have a RECORDED RED — nx_gate_bite mutated the gate subject, rebuilt it, watched the gate go red, and that record is inside the shared TTL. never bitten is its complement over the same denominator: those gates ran and were green, and nothing has ever shown them able to detect anything, so their green is a statement about this run and not about the gate. green at 0/0 is a separate and much weaker observation — the gate printed GREEN on a zero denominator, so its own tooth counter says it examined nothing. A gate can be green, non-zero, and still never bitten; that is the common case and it is now visible instead of implied.

partition: grounded + unsupported = 15 vs present 15 · named + unnamed + withheld = 20 vs open 20 · both reconcile

liar-kill conj=GPQN · all four conjuncts held

graded document: BUILDROOT tree, 8894 bytes · gates map: PRIMARY · stamped 0d 6h ago · source ../knowledge/status/evstamp_media.verdict

Gap classWhat it is, and the work it names
UNNAMED-GAPA gap row carries a bare _ABSENT_ with no symbol after it, so it names no build contract and no seat can pick it up. Give it an _ABSENT_:<symbol> and it becomes work somebody can do.
This band reports the referee counts. The per-axis worklist rows — which axis is unsupported, which watch is ready to flip, which gap is unnamed — are printed by nx_swcompare_evidence media itself and are not carried on the stamp, so this page names the classes and the producer names the rows. That split is stated rather than hidden: a count without a worklist is not actionable, and this band is honest about which half of that it is.

Production map

Follow the dependencies, declared acceptance criteria and recorded priorities. Inspect source binding before treating a rank as executable work.

Ranking source binding: PLAN_MATRIX_BOUND_ONLY. Recorded priorities require current acceptance evidence and resource checks before execution.

Ranking matches the captured plan and matrix only. Latest execution outcome, research freshness, accepted delivery and investment return are unverified.

Recorded priority estimates

Order from nx_compare_rank (nx_dr_ocm: (deficit + cost-of-delay + option + enables) x sponsor x self-sufficiency x momentum / cost). FINISH rows are rungs whose symbol is present but whose organ is short of full adoption: listed before new work by this heuristic. Priority is not measured delivery cost or execution readiness. Stamp: # asof=1789541447 domain=media target_version=0.1 rungs=12 done=0 open=12 finish=0 ranker=nx_dr_ocm

#StageRungPriorityDerivation
#10.1Wire the theme engine into /gallery and /library (R0) ms_theme_css15000v=15 m=1 c=1
#20.1Live UX judge over the media surfaces (R3) uj_live_media3400v=17 m=1 c=5
#30.1Responsive mobile-first shell (R4) ux_shell1200v=12 m=1 c=10
#40.1Accessibility pass (R5) ma_audit400v=4 m=1 c=10
#5laterResume and watch-state per user (R2) ms_watch_state3000v=9 m=1 c=3
#6laterAmbient-light adaptation (R11) mt_ambient_sensor800v=4 m=1 c=5
#7laterTrickplay scrub-preview sprites (R6) gt_sprite_sheet400v=6 m=1 c=15
#8laterChapters and track selection (R7) mc_chapters400v=6 m=1 c=15
#9laterComics and manga served correctly (R1) ms_cbx_serve333v=1 m=1 c=3
#10laterAdaptive-bitrate HLS ladder (R9) abr_ladder300v=6 m=1 c=20
#11laterHEVC and broad-codec playback (R8) ht_transcode266v=8 m=1 c=30
#12laterFace, object and semantic media search (R10) msm_search66v=2 m=1 c=30

Declared roadmap — contract, acceptance, executor, effort

RungCloses withDefinition of done (pre-declared)ExecutorEst.
Wire the theme engine into /gallery and /library (R0)ms_theme_cssThe served reader and gallery pages carry the stylesheet emitted by nx_media_theme (light, sepia, dark, night, sun modes with data-theme override); every mode passes the MT_FLOOR_READ contrast floor through nx_uiq_contrast; nx_page_verify GREEN on /library and /gallery. Closes the seven theme rows that share this symbol; the engine already exists and is BUILT+UNWIRED (zero importers measured 2026-08-19)Organ0.5 u
Live UX judge over the media surfaces (R3)
after R0
uj_live_medianx_ui_judge pmil runs on the SERVED /gallery and /library pages on a beat and a planted regression (white flash, contrast drop, missing viewport meta) turns it RED; the number is published beside the matrix so symbol-presence can no longer over-credit the surfaceOrgan0.5 u
Responsive mobile-first shell (R4)
after R3
ux_shellOne-handed reading and browsing on small screens: touch targets, no horizontal scroll, viewport meta; graded by the live judge (R3), never by the eyeballOrgan1 u
Accessibility pass (R5)
after R0
ma_auditnx_uiq_atree and nx_uiq_contrast run over every served media page; contrast, keyboard order and ARIA landmarks reported as numbers; page_verify a11y reads 0 on the whole surface, not on a sampleOrgan1 u
Comics and manga served correctly (R1)ms_cbx_serve/library serves nx_cbx_pages output as ordered page images (CBZ and RAR4 and RAR5 fixtures end to end) with pinch-zoom; page_verify GREEN; the operator buy-off that kept this row absent is recorded as a row, not rememberedOrgan1 u
Resume and watch-state per user (R2)ms_watch_stateReader position and video position unified in one per-user additive record; resumes across devices; history never destroyedOrgan1 u
Trickplay scrub-preview sprites (R6)gt_sprite_sheetA sprite sheet plus index is derived per video on ingest (the existing galx pipeline pass); scrub hover shows frames; an on-disk byte probe proves the sheet exists for every indexed videoOrgan1.5 u
Chapters and track selection (R7)mc_chaptersContainer chapters parsed from MP4 and MKV and exposed on the seekbar with an audio and subtitle track menu; a fixture with three chapters and two tracks round-tripsOrgan1.5 u
HEVC and broad-codec playback (R8)ht_transcodeA sovereign HEVC decode into the existing nx_vcodec encode path so a HEVC sample plays in the browser; bit-exact decode against a banked reference frame set; the won't-play gap closesOrgan3 u
Adaptive-bitrate HLS ladder (R9)
after R8
abr_ladderMulti-rendition HLS playlist served per asset; the client switches renditions on measured bandwidth and the switch is logged; composes the RTC per-device tiers already shipped in the video laneOrgan2 u
Face, object and semantic media search (R10)msm_searchA sovereign embedding index over the image library (the existing ViTPose port wired to serving plus a CLIP-class encoder); recall at 10 against BM25 on a labeled set is PRE-DECLARED to exceed or the lane stays unwiredLocal model3 u
Ambient-light adaptation (R11)
after R0
mt_ambient_sensorMode follows an AmbientLightSensor reading with the OS prefers-color-scheme signal as fallback; measured on a device, never claimed from a knobOrgan0.5 u

Milestones

MilestoneRungsCumulative
M0 · Easy on the eyesR0,R3,R4,R53 u
M1 · Reader correctness and continuityR1,R25 u
M2 · Player parityR6,R78 u
M3 · Codec reachR8,R913 u
M4 · Beyond the incumbentsR10,R1116.5 u
Ladder verdict. NOT DECLARED. This board names no dated best-in-class or frontier target and no rung roles (sotatarget and rungrole rows on its plan); the ranker labels it NO-LADDER until it does, and until then its rungs climb toward a target nobody has written down. Bars: 0 (fresh 0, attested 0, stale 0, unattested 0), verdict NO-BAR against the current month 2026-09.

Inspect a rung and its prerequisites

Declared nodes 12. Rank input binding: PLAN_MATRIX_BOUND_ONLY. Dependency order is authored. Implementation, acceptance evidence, authority and resource readiness are unverified. No action is recommended or dispatched here.

Plan SHA-256 0edbfe1a164acf3efab28b304989e082b5f8cfc0090a07ccfc81f27c71f8c6cf. Target rows 0; role rows 0. Existing risks and release worklog retain their own scope; no node completion is inferred.

Use Enter or Space on a rung to inspect its contract. Prerequisite links locate another rung in this list; open its summary to inspect it. Estimates are authored effort, not forecasts.

  1. R0 — Wire the theme engine into /gallery and /library

    Prerequisites: None declared; this does not establish execution eligibility.

    Contract: ms_theme_css

    Acceptance: The served reader and gallery pages carry the stylesheet emitted by nx_media_theme (light, sepia, dark, night, sun modes with data-theme override); every mode passes the MT_FLOOR_READ contrast floor through nx_uiq_contrast; nx_page_verify GREEN on /library and /gallery. Closes the seven theme rows that share this symbol; the engine already exists and is BUILT+UNWIRED (zero importers measured 2026-08-19)

    Authored effort: 0.5. Executor kind: Organ. Responsible, accountable and verifier not established. Inspect retained worklog.

  2. R3 — Live UX judge over the media surfaces

    Prerequisites: R0 (acceptance unverified)

    Contract: uj_live_media

    Acceptance: nx_ui_judge pmil runs on the SERVED /gallery and /library pages on a beat and a planted regression (white flash, contrast drop, missing viewport meta) turns it RED; the number is published beside the matrix so symbol-presence can no longer over-credit the surface

    Authored effort: 0.5. Executor kind: Organ. Responsible, accountable and verifier not established. Inspect retained worklog.

  3. R4 — Responsive mobile-first shell

    Prerequisites: R3 (acceptance unverified)

    Contract: ux_shell

    Acceptance: One-handed reading and browsing on small screens: touch targets, no horizontal scroll, viewport meta; graded by the live judge (R3), never by the eyeball

    Authored effort: 1. Executor kind: Organ. Responsible, accountable and verifier not established. Inspect retained worklog.

  4. R5 — Accessibility pass

    Prerequisites: R0 (acceptance unverified)

    Contract: ma_audit

    Acceptance: nx_uiq_atree and nx_uiq_contrast run over every served media page; contrast, keyboard order and ARIA landmarks reported as numbers; page_verify a11y reads 0 on the whole surface, not on a sample

    Authored effort: 1. Executor kind: Organ. Responsible, accountable and verifier not established. Inspect retained worklog.

  5. R1 — Comics and manga served correctly

    Prerequisites: None declared; this does not establish execution eligibility.

    Contract: ms_cbx_serve

    Acceptance: /library serves nx_cbx_pages output as ordered page images (CBZ and RAR4 and RAR5 fixtures end to end) with pinch-zoom; page_verify GREEN; the operator buy-off that kept this row absent is recorded as a row, not remembered

    Authored effort: 1. Executor kind: Organ. Responsible, accountable and verifier not established. Inspect retained worklog.

  6. R2 — Resume and watch-state per user

    Prerequisites: None declared; this does not establish execution eligibility.

    Contract: ms_watch_state

    Acceptance: Reader position and video position unified in one per-user additive record; resumes across devices; history never destroyed

    Authored effort: 1. Executor kind: Organ. Responsible, accountable and verifier not established. Inspect retained worklog.

  7. R6 — Trickplay scrub-preview sprites

    Prerequisites: None declared; this does not establish execution eligibility.

    Contract: gt_sprite_sheet

    Acceptance: A sprite sheet plus index is derived per video on ingest (the existing galx pipeline pass); scrub hover shows frames; an on-disk byte probe proves the sheet exists for every indexed video

    Authored effort: 1.5. Executor kind: Organ. Responsible, accountable and verifier not established. Inspect retained worklog.

  8. R7 — Chapters and track selection

    Prerequisites: None declared; this does not establish execution eligibility.

    Contract: mc_chapters

    Acceptance: Container chapters parsed from MP4 and MKV and exposed on the seekbar with an audio and subtitle track menu; a fixture with three chapters and two tracks round-trips

    Authored effort: 1.5. Executor kind: Organ. Responsible, accountable and verifier not established. Inspect retained worklog.

  9. R8 — HEVC and broad-codec playback

    Prerequisites: None declared; this does not establish execution eligibility.

    Contract: ht_transcode

    Acceptance: A sovereign HEVC decode into the existing nx_vcodec encode path so a HEVC sample plays in the browser; bit-exact decode against a banked reference frame set; the won't-play gap closes

    Authored effort: 3. Executor kind: Organ. Responsible, accountable and verifier not established. Inspect retained worklog.

  10. R9 — Adaptive-bitrate HLS ladder

    Prerequisites: R8 (acceptance unverified)

    Contract: abr_ladder

    Acceptance: Multi-rendition HLS playlist served per asset; the client switches renditions on measured bandwidth and the switch is logged; composes the RTC per-device tiers already shipped in the video lane

    Authored effort: 2. Executor kind: Organ. Responsible, accountable and verifier not established. Inspect retained worklog.

  11. R10 — Face, object and semantic media search

    Prerequisites: None declared; this does not establish execution eligibility.

    Contract: msm_search

    Acceptance: A sovereign embedding index over the image library (the existing ViTPose port wired to serving plus a CLIP-class encoder); recall at 10 against BM25 on a labeled set is PRE-DECLARED to exceed or the lane stays unwired

    Authored effort: 3. Executor kind: Local model. Responsible, accountable and verifier not established. Inspect retained worklog.

  12. R11 — Ambient-light adaptation

    Prerequisites: R0 (acceptance unverified)

    Contract: mt_ambient_sensor

    Acceptance: Mode follows an AmbientLightSensor reading with the OS prefers-color-scheme signal as fallback; measured on a device, never claimed from a knob

    Authored effort: 0.5. Executor kind: Organ. Responsible, accountable and verifier not established. Inspect retained worklog.

Learning and practice paths

No structured learning path is declared for this plan. Existing research, roadmap and worklog remain available above.

Capability comparisons

Compare the field, search individual capabilities and open their source and adoption evidence. Documented presence does not establish comparative quality.

Position map — centrality and distinctiveness

The four-quadrant map the field uses for brand strategy (Dawar and Bagga, HBR June 2015), re-derived from this matrix on every publish. Centrality is the share of the category's feature mass a player covers, each feature weighted by how many hold it; distinctiveness is the average lead over each rival on the rows the player holds; breadth is the depth-weighted share of the whole matrix (the bubble); depth is how deeply the rows held are held; momentum is the day-over-day move off the spine (green rising, red falling, grey until day two); the dashed path runs first day → previous day → today. Dividers are the category means. Axes are fitted to the field of play, so read the tick numerals, not the frame. Rival marks are documented presence, so a rival's position reads the record, never its quality. The picture grades its own readability below; the table beside it is the same data for a screen reader or a second method.

Views. 2D cut: centrality, distinctiveness · 3D cube: centrality, distinctiveness, breadth · axes registered: centrality, distinctiveness, breadth, depth, momentum · a board picks its own in knowledge/compare/media.cdmap (cut|x|y, cube|x|y|z); absent = the HBR defaults
Position map, two-dimensional cutOne bubble per player. Bubble area is breadth, the ring colour is momentum, the dashed lines are the category means, and both axes are fitted to the field of play with their tick numerals shown. Every value is repeated in the table that follows. 300 400 500 600 700 800 900 1000 150 200 250 300 350 400 centrality (permil, fitted 300–1000) distinctiveness (permil, fitted 150–400) mean 764 mean 292 Unconventional Aspirational Peripheral Mainstream Nishi, centrality 438, distinctiveness 377, breadth 323, depth 755, momentum 0 Jellyfin, centrality 912, distinctiveness 287, breadth 647, depth 839, momentum 0 Plex, centrality 912, distinctiveness 287, breadth 647, depth 839, momentum 0 Immich, centrality 789, distinctiveness 212, breadth 504, depth 803, momentum 0 Kavita, centrality 771, distinctiveness 297, breadth 533, depth 811, momentum 0 Nishi Jellyfin Plex Immich Kavita

bubble area = breadth · ring = momentum (green rising, red falling, grey until day two) · dashed = category means · axes fitted to the field of play: centrality 300–1000, distinctiveness 150–400 of 0–1000 permil (the full range put every player in one corner)
readability of the 2D cut, self-graded by the layout ruler: label overlaps 0 · labels over marks 0 · off-canvas 0 · unresolved labels 0 · mark overlaps 1 (a fact of the data: two players that close are that close) · data spread 668 permil of the plot · quadrant words unseated 0
text contrast, measured with wcag2-ratio (floors from contrast.conf), light theme: labels 16.24 (floor 4.50) · notes 16.24 (floor 4.50) · quadrant words 5.89 (floor 4.50) · tick numerals 5.89 (floor 4.50) · axis titles 5.59 (floor 4.50) · dark theme: labels 13.78 (floor 4.50) · quadrant words 5.55 (floor 4.50) · axis titles 5.97 (floor 4.50) · dark classes under their floor 0 (one figure serves both themes: a dark shortfall is a token to fix, never a class to hide) · classes refused under their floor 0 (a refused class is not drawn; the scale classes are measured, never hidden) · export: SVG PNG (receipt, rendered by the estate's own rasteriser from this page)
Position map, three-dimensional cubeThe same players in an isometric cube. Each axis is fitted to its own field of play and carries numerals on the floor grid and the vertical axis; each bubble drops a dotted line to its floor shadow so height reads as height. Values are in the table that follows. 300 400 500 600 700 800 900 1000 150 200 250 300 350 400 200 300 400 500 600 700 centrality distinctiveness breadth Immich: centrality 789, distinctiveness 212, breadth 504 Nishi: centrality 438, distinctiveness 377, breadth 323 Kavita: centrality 771, distinctiveness 297, breadth 533 Jellyfin: centrality 912, distinctiveness 287, breadth 647 Plex: centrality 912, distinctiveness 287, breadth 647 Nishi Jellyfin Plex Immich Kavita
axes fitted: centrality 300–1000 · distinctiveness 150–400 · breadth 200–700 permil · farther bubbles are painted first, nearer ones over them · the floor shadow is each bubble's (x, y) at height 0
readability of the 3D cube, self-graded by the layout ruler: label overlaps 0 · labels over marks 0 · off-canvas 0 · unresolved labels 0 · mark overlaps 1 (a fact of the data: two players that close are that close) · data spread 412 permil of the plot
Position map, small multiplesEvery pair of registered axes as one small cut. Each panel fits both axes to the field of play, the dashed lines are the category means, bubble area is breadth and the ring colour is momentum; the legend below names the colours. 300 1000 150 400 distinctiveness vs centrality Nishi: centrality 438, distinctiveness 377 Jellyfin: centrality 912, distinctiveness 287 Plex: centrality 912, distinctiveness 287 Immich: centrality 789, distinctiveness 212 Kavita: centrality 771, distinctiveness 297 300 1000 200 700 breadth vs centrality Nishi: centrality 438, breadth 323 Jellyfin: centrality 912, breadth 647 Plex: centrality 912, breadth 647 Immich: centrality 789, breadth 504 Kavita: centrality 771, breadth 533 300 1000 720 860 depth vs centrality Nishi: centrality 438, depth 755 Jellyfin: centrality 912, depth 839 Plex: centrality 912, depth 839 Immich: centrality 789, depth 803 Kavita: centrality 771, depth 811 300 1000 480 520 momentum vs centrality Nishi: centrality 438, momentum 500 Jellyfin: centrality 912, momentum 500 Plex: centrality 912, momentum 500 Immich: centrality 789, momentum 500 Kavita: centrality 771, momentum 500 150 400 200 700 breadth vs distinctiveness Nishi: distinctiveness 377, breadth 323 Jellyfin: distinctiveness 287, breadth 647 Plex: distinctiveness 287, breadth 647 Immich: distinctiveness 212, breadth 504 Kavita: distinctiveness 297, breadth 533 150 400 720 860 depth vs distinctiveness Nishi: distinctiveness 377, depth 755 Jellyfin: distinctiveness 287, depth 839 Plex: distinctiveness 287, depth 839 Immich: distinctiveness 212, depth 803 Kavita: distinctiveness 297, depth 811 150 400 480 520 momentum vs distinctiveness Nishi: distinctiveness 377, momentum 500 Jellyfin: distinctiveness 287, momentum 500 Plex: distinctiveness 287, momentum 500 Immich: distinctiveness 212, momentum 500 Kavita: distinctiveness 297, momentum 500 200 700 720 860 depth vs breadth Nishi: breadth 323, depth 755 Jellyfin: breadth 647, depth 839 Plex: breadth 647, depth 839 Immich: breadth 504, depth 803 Kavita: breadth 533, depth 811 200 700 480 520 momentum vs breadth Nishi: breadth 323, momentum 500 Jellyfin: breadth 647, momentum 500 Plex: breadth 647, momentum 500 Immich: breadth 504, momentum 500 Kavita: breadth 533, momentum 500 720 860 480 520 momentum vs depth Nishi: depth 755, momentum 500 Jellyfin: depth 839, momentum 500 Plex: depth 839, momentum 500 Immich: depth 803, momentum 500 Kavita: depth 811, momentum 500
Nishi Jellyfin Plex Immich Kavita
10 panels over 5 registered axes, every pair once (the lower axis on x, the higher on y) · each panel fitted to its own field of play, first and last tick numerals shown · no labels in a small cut, the legend names the colours; the grade below reports the mark terms only (MM summed over the panels, spread averaged)
readability of the small multiples, self-graded by the layout ruler: label overlaps 0 · labels over marks 0 · off-canvas 0 · unresolved labels 0 · mark overlaps 15 (a fact of the data: two players that close are that close) · data spread 515 permil of the plot
PlayerQuadrantcentralitydistinctivenessbreadthdepthmomentumRows heldDays on spineFirst seen
NishiUnconventional4383773237550 since 2026-09-151522026-09-15
JellyfinMainstream9122876478390 since 2026-09-152722026-09-15
PlexMainstream9122876478390 since 2026-09-152722026-09-15
ImmichMainstream7892125048030 since 2026-09-152222026-09-15
KavitaAspirational7712975338110 since 2026-09-152322026-09-15
DayMatrix rows reviewedPlayers recorded
2026-09-15355
2026-09-16355

players 5|matrix rows 35|feature mass 114|centrality mean 764|distinctiveness mean 292|axes 5|spine days 2 (shown 2)|rows written today 0|readability defects 2D 0 cube 0|spine knowledge/status/cdmap/media.spine

How this is scored. Every Nishi mark is measured: the generator reads the real organ source on disk and requires the implementing symbol to exist (no self-grading). A watching tag names the organ and symbol contracted to close a gap — the mark flips itself on the next compare beat when that workstream ships, and the comparewatch- plane row flips with it. A dark tag means the organ file EXISTS but does not declare the contracted symbol: something shipped there under another name, and until the contract is repointed to the real entry point (the plan rung and this row) or the function is renamed, that capability is invisible to this board — a build lost to darkness, named so it is not. The flip is necessary, not sufficient: it proves the symbol exists, never that the capability is good. The bar is the rung's pre-declared done-rule, proven by its gate — a symbol shipped without the behaviour behind it is a defect, and the flip is exactly what makes that defect visible instead of quiet. Competitor marks record documented capability presence — presence, not depth or scale. Adoption is measured too: every measured row carries where its organ stands on the estate's ladder (source → built → promoted → registered → invoked; libraries by importer reach minus validation importers; gates by the execution surfaces that run them). A row is fully adopted only at the top of its ladder; anything short is tagged partial with the exact remedy, so a build nobody promoted can no longer read as shipped. Census stamps: importers asof 1789497476, gate census asof 1789498715 (unix seconds; -1 = census absent).

Capability matrix — measured against source

leads / measured exceed present partial absent · click any capability for its evidence

CapabilityNishiJellyfinPlexImmichKavita
Analysis-on-ingest derivation pipelineMeasured: mp_run exists in runtime/nx_media_ingest_pipeline.nx, verified at emit. LIVE 2026-07-14: one idempotent pass derives thumbnails + NXVI on ingest, auto-fired per torrent; incumbents scan-on-add with deeper metadata agents rival marks uncited — the Yes, Best or Part codes on this row are an observation read with no reference mark behind them Adoption: BUILT-UNPROMOTED — PARTIAL: compiled, never promoted to the serving root: /api/promote it.
not adopted: compiled, never promoted to the serving root: /api/promote it
Pros Nishi has it, measured on diskCons behind Jellyfin (leads), Plex (leads), Immich (leads); not adopted yet: compiled, never promoted to the serving root: /api/promote it
Image thumbnail generation + cacheMeasured: gs_thumb exists in runtime/_hdl_build/nx_gallery_serve.nx, verified at emit. Cache-first thumbs, cold-generate via nx_galx_thumb; all incumbents thumbnail on ingest rival marks uncited — the Yes, Best or Part codes on this row are an observation read with no reference mark behind them Adoption: BUILT-UNPROMOTED — PARTIAL: compiled, never promoted to the serving root: /api/promote it.
not adopted: compiled, never promoted to the serving root: /api/promote it
Pros Nishi has it, measured on diskCons not adopted yet: compiled, never promoted to the serving root: /api/promote it
Video poster / recording thumbnailMeasured: gs_vidthumb exists in runtime/_hdl_build/nx_gallery_serve.nx, verified at emit. Poster.jpg served instantly for cam recordings; harvested video is a gap (no frame extractor yet); incumbents grab a frame on scan rival marks uncited — the Yes, Best or Part codes on this row are an observation read with no reference mark behind them Adoption: BUILT-UNPROMOTED — PARTIAL: compiled, never promoted to the serving root: /api/promote it.
not adopted: compiled, never promoted to the serving root: /api/promote it
Pros Nishi has it, measured on disk; ahead of KavitaCons behind Jellyfin (leads), Plex (leads); not adopted yet: compiled, never promoted to the serving root: /api/promote it
Duration + keyframe index (seekable MSE)Measured: bidx_ok exists in runtime/nx_galx_idx_backfill.nx, verified at emit. Sovereign NXVI keyframe index for accurate seek [w3c-mse]; H.264 only (HEVC gap); incumbents probe all codecs. SYMBOL REPOINTED 2026-09-01 and this ONE row was the whole domain RED: the row named bidxv2, which does not exist. THE ROW ROTTED WHEN THE CODE CORRECTLY ADVANCED -- the index format moved v2 to v3 and the organ own comment says why (v2 has no srcsize at all, so v2 is treated as unverifiable and rebuilt; 79 of 150 live indexes once pointed PAST EOF because the source was replaced under the same name and nothing could tell). The live predicate is bidx_ok, which accepts an index only if it is v3 AND its recorded source size still matches the file. A VERSIONED SYMBOL NAME PUTS AN EXPIRY DATE ON EVERY ROW THAT CITES IT Adoption: BUILT-UNPROMOTED — PARTIAL: compiled, never promoted to the serving root: /api/promote it.
not adopted: compiled, never promoted to the serving root: /api/promote it
Pros Nishi has it, measured on disk; ahead of Immich, KavitaCons behind Jellyfin (leads), Plex (leads); not adopted yet: compiled, never promoted to the serving root: /api/promote it
On-the-fly remux + MSE streamingMeasured: gs_vid_stream exists in runtime/_hdl_build/nx_gallery_serve.nx, verified at emit. TS->fMP4 fly-remux + MSE segments [w3c-mse]; no adaptive ladder yet; incumbents ship HW-transcode ABR ladders Adoption: BUILT-UNPROMOTED — PARTIAL: compiled, never promoted to the serving root: /api/promote it.
not adopted: compiled, never promoted to the serving root: /api/promote it
Pros Nishi has it, measured on disk; ahead of Immich, KavitaCons behind Jellyfin (leads), Plex (leads); not adopted yet: compiled, never promoted to the serving root: /api/promote it
Dead-air / motion / scene / rhythm markersMeasured exceed: ts_classify in runtime/nx_ts_marks.nx, verified at emit. Sovereign demux-signal analyzer emits NXMK markers on the seekbar; Jellyfin/Plex only do intro-skip, no motion/rhythm classification rival marks uncited — the Yes, Best or Part codes on this row are an observation read with no reference mark behind them Adoption: LIB-WIRED importers=5 nonval=3 — fully adopted (top of its ladder).
Pros Nishi leads, a measured exceed; ahead of Jellyfin, Plex, Immich, Kavita; fully adopted on the estate ladderCons none on the measured axes (rival marks are documented presence, not depth)
On-demand super-resolution upscaleMeasured exceed: gs_upscale in runtime/_hdl_build/nx_gallery_serve.nx, verified at emit. Sovereign 2x upscale endpoint per asset; no incumbent media server upscales media on demand Adoption: BUILT-UNPROMOTED — PARTIAL: compiled, never promoted to the serving root: /api/promote it.
not adopted: compiled, never promoted to the serving root: /api/promote it
Pros Nishi leads, a measured exceed; ahead of Jellyfin, Plex, Immich, KavitaCons not adopted yet: compiled, never promoted to the serving root: /api/promote it
Auto-derive on ingest (orchestrated)Measured: cmd_galxpipeline exists in runtime/_hdl_build/nx_hostctl.nx, verified at emit. Torrent worker fires the guarded galxpipeline sub after indexing; incumbents auto-scan watch folders rival marks uncited — the Yes, Best or Part codes on this row are an observation read with no reference mark behind them Adoption: LIVE-DAEMON — fully adopted (top of its ladder).
Pros Nishi has it, measured on disk; fully adopted on the estate ladderCons behind Jellyfin (leads), Plex (leads), Immich (leads)
Unified media library listing + filtersMeasured: gs_api_list exists in runtime/_hdl_build/nx_gallery_serve.nx, verified at emit. Mixed image+video grid, state filters, BM25 search; incumbents have mature library UIs rival marks uncited — the Yes, Best or Part codes on this row are an observation read with no reference mark behind them Adoption: BUILT-UNPROMOTED — PARTIAL: compiled, never promoted to the serving root: /api/promote it.
not adopted: compiled, never promoted to the serving root: /api/promote it
Pros Nishi has it, measured on diskCons behind Jellyfin (leads), Plex (leads), Immich (leads), Kavita (leads); not adopted yet: compiled, never promoted to the serving root: /api/promote it
Book / manga / comic reader libraryMeasured: ms_handle_list exists in runtime/_hdl_build/nx_media_server.nx, verified at emit. /library serves books/manga/photos/STL; Kavita is a dedicated manga/book server and leads depth [kavita] Adoption: SOURCE-ONLY — PARTIAL: source exists, never compiled: /api/build it.
not adopted: source exists, never compiled: /api/build it
Pros Nishi has it, measured on disk; ahead of Jellyfin, Plex, ImmichCons behind Kavita (leads); not adopted yet: source exists, never compiled: /api/build it
Range-streaming file deliveryMeasured: ms_handle_file exists in runtime/_hdl_build/nx_media_server.nx, verified at emit. HTTP Range on any NAS file; all incumbents range-stream rival marks uncited — the Yes, Best or Part codes on this row are an observation read with no reference mark behind them Adoption: SOURCE-ONLY — PARTIAL: source exists, never compiled: /api/build it.
not adopted: source exists, never compiled: /api/build it
Pros Nishi has it, measured on diskCons not adopted yet: source exists, never compiled: /api/build it
Book cover thumbnail extractionMeasured: ms_cover_thumb exists in runtime/_hdl_build/nx_media_server.nx, verified at emit. Embedded-cover extract + cache; Kavita/Komga extract covers on scan rival marks uncited — the Yes, Best or Part codes on this row are an observation read with no reference mark behind them Adoption: SOURCE-ONLY — PARTIAL: source exists, never compiled: /api/build it.
not adopted: source exists, never compiled: /api/build it
Pros Nishi has it, measured on disk; ahead of Jellyfin, Plex, ImmichCons behind Kavita (leads); not adopted yet: source exists, never compiled: /api/build it
LLM-native content packing (push a book into an LLM)Measured exceed: tok_estimate in runtime/_hdl_build/nx_token_counter.nx, verified at emit. /api/llmpack packs a book into a token budget natively; no media server does this Adoption: LIB-WIRED importers=3 nonval=2 — fully adopted (top of its ladder).
Pros Nishi leads, a measured exceed; ahead of Jellyfin, Plex, Immich, Kavita; fully adopted on the estate ladderCons none on the measured axes (rival marks are documented presence, not depth)
Per-user auth + private library areaMeasured: ms_login exists in runtime/_hdl_build/nx_media_server.nx, verified at emit. Modern auth + per-user private area; all incumbents are multi-user rival marks uncited — the Yes, Best or Part codes on this row are an observation read with no reference mark behind them Adoption: SOURCE-ONLY — PARTIAL: source exists, never compiled: /api/build it.
not adopted: source exists, never compiled: /api/build it
Pros Nishi has it, measured on diskCons not adopted yet: source exists, never compiled: /api/build it
Resilient multi-strategy fetch (acquisition)Measured exceed: fa_is_real in runtime/nx_fetch_any.nx, verified at emit. Cascade + classify + always-inform fetch for INGEST sources; incumbents lean on external download clients Adoption: BUILT-UNPROMOTED — PARTIAL: compiled, never promoted to the serving root: /api/promote it.
not adopted: compiled, never promoted to the serving root: /api/promote it
Pros Nishi leads, a measured exceed; ahead of Jellyfin, Plex, Immich, KavitaCons not adopted yet: compiled, never promoted to the serving root: /api/promote it
Trickplay / BIF scrub-preview spritesOpen — watching runtime/nx_galx_trickplay.nx : gt_sprite_sheet, re-measured on every compare beat. Ship that symbol and this mark flips itself; the comparewatch- plane row flips with it. Top delivery-UX gap; Jellyfin .trickplay [jellyfin109] + Plex BIF [plex-bif] generate scrub-preview sprites on scan
watching gt_sprite_sheet
Pros none measured yetCons behind Jellyfin (leads), Plex (leads); open contract, nothing on disk yet
Chapters + subtitle / audio-track selectionOpen — watching runtime/nx_media_chapters.nx : mc_chapters, re-measured on every compare beat. Ship that symbol and this mark flips itself; the comparewatch- plane row flips with it. No chapter markers or track menus; incumbents parse container chapters + expose track selection rival marks uncited — the Yes, Best or Part codes on this row are an observation read with no reference mark behind them
watching mc_chapters
Pros none measured yetCons behind Jellyfin (leads), Plex (leads); open contract, nothing on disk yet
Face / object / CLIP semantic media searchOpen — watching runtime/nx_media_semantic.nx : msm_search, re-measured on every compare beat. Ship that symbol and this mark flips itself; the comparewatch- plane row flips with it. Immich leads: on-device face clustering [immich-faces] + CLIP semantic photo search [immich-search] [clip21]; ours is text BM25 (pose/ViTPose port exists but is unwired to serving)
watching msm_search
Pros none measured yetCons behind Immich (leads); open contract, nothing on disk yet
HEVC / broad-codec playback (transcode)Open — watching runtime/nx_hevc_transcode.nx : ht_transcode, re-measured on every compare beat. Ship that symbol and this mark flips itself; the comparewatch- plane row flips with it. The genuine won't-play gap; incumbents HW-transcode HEVC/AV1/VP9 to browser-safe streams rival marks uncited — the Yes, Best or Part codes on this row are an observation read with no reference mark behind them
watching ht_transcode
Pros none measured yetCons behind Jellyfin (leads), Plex (leads), Immich; open contract, nothing on disk yet
Adaptive-bitrate HLS / DASH ladderOpen — watching runtime/nx_media_abr.nx : abr_ladder, re-measured on every compare beat. Ship that symbol and this mark flips itself; the comparewatch- plane row flips with it. No ABR ladder; incumbents ship multi-rendition HLS/DASH for bandwidth adaptation [rfc8216]
watching abr_ladder
Pros none measured yetCons behind Jellyfin (leads), Plex (leads); open contract, nothing on disk yet
Comic / manga page rendering (CBZ/CBR correctness)DARK — runtime/_hdl_build/nx_media_server.nx EXISTS but does not declare ms_cbx_serve: something shipped at this path under another name, and this mark would read open forever. Repoint the contract to the real entry point (the plan rung AND this row) or rename the function; the flip follows on the next beat, and the comparewatch- plane row reads DARK until then. OPERATOR BUY-OFF 2026-07-14: comic/manga rendering is BROKEN in practice -- the nx_cbx_pages symbol exists but the served format is wrong, so symbol-presence over-credited it; Kavita/Komga render CBZ/CBR reliably rival marks uncited — the Yes, Best or Part codes on this row are an observation read with no reference mark behind them
watching ms_cbx_serve
Pros none measured yetCons behind Kavita (leads); open contract, nothing on disk yet
Polished easy-on-the-eyes UI (light + dark theme)DARK — runtime/_hdl_build/nx_media_server.nx EXISTS but does not declare ms_theme_css: something shipped at this path under another name, and this mark would read open forever. Repoint the contract to the real entry point (the plan rung AND this row) or rename the function; the flip follows on the next beat, and the comparewatch- plane row reads DARK until then. OPERATOR BUY-OFF 2026-07-14: the screen is a harsh plain white with no dark theme -- not easy on the eyes; Jellyfin/Plex/Immich/Kavita all ship polished dark + light themes rival marks uncited — the Yes, Best or Part codes on this row are an observation read with no reference mark behind them
watching ms_theme_css
Pros none measured yetCons behind Jellyfin (leads), Plex (leads), Immich (leads), Kavita (leads); open contract, nothing on disk yet
Responsive / non-clunky UX polishOpen — watching runtime/nx_media_uxpolish.nx : ux_shell, re-measured on every compare beat. Ship that symbol and this mark flips itself; the comparewatch- plane row flips with it. OPERATOR BUY-OFF 2026-07-14: the UI is clunky; incumbents have refined, responsive, mobile-first interfaces rival marks uncited — the Yes, Best or Part codes on this row are an observation read with no reference mark behind them
watching ux_shell
Pros none measured yetCons behind Jellyfin (leads), Plex (leads), Immich (leads), Kavita; open contract, nothing on disk yet
Accessibility (contrast / keyboard / ARIA)Open — watching runtime/nx_media_a11y.nx : ma_audit, re-measured on every compare beat. Ship that symbol and this mark flips itself; the comparewatch- plane row flips with it. No measured contrast/keyboard/ARIA pass; incumbents meet baseline accessibility [wcag22]
watching ma_audit
Pros none measured yetCons behind Jellyfin, Plex, Immich, Kavita; open contract, nothing on disk yet
Live UX-judged quality (beyond symbol-presence)DARK — runtime/nx_ui_judge.nx EXISTS but does not declare uj_live_media: something shipped at this path under another name, and this mark would read open forever. Repoint the contract to the real entry point (the plan rung AND this row) or rename the function; the flip follows on the next beat, and the comparewatch- plane row reads DARK until then. MEASUREMENT DISCIPLINE: a symbol on disk is NECESSARY-NOT-SUFFICIENT. UX polish, format correctness and theme are NOT captured by c_file_has -- they need a live UI-judge + user buy-off. Operator flagged clunky/broken/white -> the earlier 750 was over-optimistic; this axis exists so the census stops over-crediting presence rival marks uncited — the Yes, Best or Part codes on this row are an observation read with no reference mark behind them
watching uj_live_media
Pros none measured yetCons behind Jellyfin (leads), Plex (leads), Immich (leads), Kavita (leads); open contract, nothing on disk yet
Sunlight / outdoor readabilityDARK — runtime/_hdl_build/nx_media_server.nx EXISTS but does not declare ms_theme_css: something shipped at this path under another name, and this mark would read open forever. Repoint the contract to the real entry point (the plan rung AND this row) or rename the function; the flip follows on the next beat, and the comparewatch- plane row reads DARK until then. COMPLETENESS-ADVERSARY MISS caught 2026-07-14 (operator flagged): a mobile web reader needs a high-contrast/auto sunlight mode -- e-ink wins outright; incumbents' native apps offer high-brightness; ours has none rival marks uncited — the Yes, Best or Part codes on this row are an observation read with no reference mark behind them
watching ms_theme_css
Pros none measured yetCons behind Jellyfin, Plex, Immich, Kavita; open contract, nothing on disk yet
Ambient-light auto-adaptationDARK — runtime/_hdl_build/nx_media_theme.nx EXISTS but does not declare mt_ambient_sensor: something shipped at this path under another name, and this mark would read open forever. Repoint the contract to the real entry point (the plan rung AND this row) or rename the function; the flip follows on the next beat, and the comparewatch- plane row reads DARK until then. COMPLETENESS MISS: no ambient-light / auto-brightness / time-of-day adaptation; native reader apps adapt to sensor + time rival marks uncited — the Yes, Best or Part codes on this row are an observation read with no reference mark behind them
watching mt_ambient_sensor
Pros none measured yetCons behind Jellyfin, Plex, Immich, Kavita; open contract, nothing on disk yet
Mobile / responsive legibilityDARK — runtime/_hdl_build/nx_media_server.nx EXISTS but does not declare ms_theme_css: something shipped at this path under another name, and this mark would read open forever. Repoint the contract to the real entry point (the plan rung AND this row) or rename the function; the flip follows on the next beat, and the comparewatch- plane row reads DARK until then. COMPLETENESS MISS (operator flagged): the reader is not tuned for small-screen one-handed reading; incumbents ship mobile-first apps rival marks uncited — the Yes, Best or Part codes on this row are an observation read with no reference mark behind them
watching ms_theme_css
Pros none measured yetCons behind Jellyfin (leads), Plex (leads), Immich (leads), Kavita (leads); open contract, nothing on disk yet
Anti-glare / matte reading surfaceDARK — runtime/_hdl_build/nx_media_server.nx EXISTS but does not declare ms_theme_css: something shipped at this path under another name, and this mark would read open forever. Repoint the contract to the real entry point (the plan rung AND this row) or rename the function; the flip follows on the next beat, and the comparewatch- plane row reads DARK until then. COMPLETENESS MISS: no matte/low-glare treatment (pure-white glare is the harsh case); reader apps offer paper/sepia low-glare modes rival marks uncited — the Yes, Best or Part codes on this row are an observation read with no reference mark behind them
watching ms_theme_css
Pros none measured yetCons behind Jellyfin, Plex, Immich, Kavita; open contract, nothing on disk yet
Color temperature / warm night shiftDARK — runtime/_hdl_build/nx_media_server.nx EXISTS but does not declare ms_theme_css: something shipped at this path under another name, and this mark would read open forever. Repoint the contract to the real entry point (the plan rung AND this row) or rename the function; the flip follows on the next beat, and the comparewatch- plane row reads DARK until then. COMPLETENESS MISS: no warm color-temperature or night shift; Kavita/Kindle have warm + sepia reading modes rival marks uncited — the Yes, Best or Part codes on this row are an observation read with no reference mark behind them
watching ms_theme_css
Pros none measured yetCons behind Jellyfin, Plex, Immich, Kavita (leads); open contract, nothing on disk yet
Flicker-free / refresh comfortOpen — no implementing organ is measured for this axis yet. COMPLETENESS MISS: no flicker/refresh consideration; e-ink is flicker-free by nature rival marks uncited — the Yes, Best or Part codes on this row are an observation read with no reference mark behind them
Pros none measured yetCons behind Jellyfin, Plex, Immich, Kavita; no implementing organ measured
Reflective / paper-like feelOpen — no implementing organ is measured for this axis yet. COMPLETENESS MISS: emissive-only; the researched comfort target is a reflective paper-like feel (e-ink) -- a category-wide web gap rival marks uncited — the Yes, Best or Part codes on this row are an observation read with no reference mark behind them
Pros none measured yetCons behind Kavita; no implementing organ measured
Reading typography (measure / leading / serif)DARK — runtime/_hdl_build/nx_media_server.nx EXISTS but does not declare ms_theme_css: something shipped at this path under another name, and this mark would read open forever. Repoint the contract to the real entry point (the plan rung AND this row) or rename the function; the flip follows on the next beat, and the comparewatch- plane row reads DARK until then. COMPLETENESS MISS: no reading-optimized typography (serif long-form, ~65ch measure, leading); reader apps tune all three rival marks uncited — the Yes, Best or Part codes on this row are an observation read with no reference mark behind them
watching ms_theme_css
Pros none measured yetCons behind Jellyfin, Plex, Immich, Kavita (leads); open contract, nothing on disk yet
Blue-light reduction / circadianDARK — runtime/_hdl_build/nx_media_server.nx EXISTS but does not declare ms_theme_css: something shipped at this path under another name, and this mark would read open forever. Repoint the contract to the real entry point (the plan rung AND this row) or rename the function; the flip follows on the next beat, and the comparewatch- plane row reads DARK until then. COMPLETENESS MISS: no blue-light reduction / circadian awareness; reader apps + OS night modes reduce blue light rival marks uncited — the Yes, Best or Part codes on this row are an observation read with no reference mark behind them
watching ms_theme_css
Pros none measured yetCons behind Jellyfin, Plex, Immich, Kavita (leads); open contract, nothing on disk yet
Resume / watch-state per userDARK — runtime/_hdl_build/nx_media_server.nx EXISTS but does not declare ms_watch_state: something shipped at this path under another name, and this mark would read open forever. Repoint the contract to the real entry point (the plan rung AND this row) or rename the function; the flip follows on the next beat, and the comparewatch- plane row reads DARK until then. COMPLETENESS MISS: reader /api/pos position-sync exists but resume/watch-state is not unified across the media plane; incumbents track it everywhere rival marks uncited — the Yes, Best or Part codes on this row are an observation read with no reference mark behind them
watching ms_watch_state
Pros none measured yetCons behind Jellyfin (leads), Plex (leads), Immich (leads), Kavita; open contract, nothing on disk yet
Rival-claim provenance. Every Yes, Best or Part mark in a rival column is a claim about someone else's product. rows with rival marks 32 · cited 7 · uncited 25. A cited row carries a reference mark that resolves to a pinned mirror (the refs gate measures that); an uncited row is an observation read and is badged in its evidence until a reference lands. The badge is the receipt, never the proof: a mark proves a mirror exists, not that the mirror supports the code.

Delivery and evidence

Inspect risks, technical debt, rendered observations, experiments and references. Read scope and limitations alongside every result.

Release history and work log

The worked plan, on the board. Every leg appends what it measured, landed, retracted, learned and left queued, per rung, so a crash leaves the next seat a ledger here rather than a transcript to mine. Kinds: measure, land, retract, lesson, queue. Newest last.
WhenRungKindEntry
2026-09-12R3requirementOPERATOR MIGRATION-RECOVERY PILOT 2026-09-12: Elder AI, Media Manager and Companion AI reportedly delivered useful capabilities before Docker-to-Nishi migration; user reports capabilities have not been recovered. Treat this as an audit hypothesis, not a measured blanket regression or proven Docker cost. Mine historical source, manifests, transcripts, tests and served UI evidence; map every user workflow to old and current owners, API/MCP contracts, dependencies and evidence. Classify verified working, implemented but unwired, behavioral regression, intentional replacement, absent, and unknown separately. Keep source presence distinct from runtime and end-user acceptance. Reuse existing Compare domains after owner discovery, no duplicate recovery product. Rank recovery by user value, confidence, dependency reuse and measured effort; compare dated current alternatives per workflow and retain older baselines. Produce portable fixture-based alpha tests, beta integration and actual served review. Track recovered workflows and repeatable one-call primitive/workflow/team abilities, with full mining coverage and unresolved gaps. This is a secondary pilot; Beach and shared reliability fixes retain priority.
2026-09-12R3clarificationOPERATOR 2026-09-12: migration is only one pilot for a general one-call domain-development workflow. Given an existing or new domain/product target, the estate must discover requirements and dated research, inventory reusable primitives/workflows/teams, map breadth and prerequisite depth, identify and rank gaps, cost and dispatch bounded work, independently verify it, and emit Compare plus reviewable alpha/beta outcomes. One public invocation orchestrates visible internal steps; it does not imply instant completion, arbitrary authorization or unsupported SOTA claims. Reuse existing product decomposition, researcher/librarian, catalogue, ranker, swarm and publisher owners. Expose job identity, assumptions, stage/evidence coverage, measured vs estimated effort, dependencies, retries, decisions and completed artifacts. Acceptance: replay an existing-domain recovery and a genuinely new-domain pilot through the same native MCP/API workflow with retained evidence and no manual hidden orchestration. Domains with unverified baselines remain unmeasured. This extends the recovery pilot rather than creating a competing workflow.
On these two registers. Rows are declared in the domain's plan file and carry the debt id, which is the join key back to the sovereign debt plane — that plane, not this page, is the authority on state. Reconciling them automatically (the regen reading the plane and refreshing these rows) is a named, owed rung; until it lands, treat an id here as a pointer to look up, not a status to trust.
Honest verdict. The coverage above is capability presence measured against source — not depth, scale, or polish, where mature rivals may lead. Exceeds are claimed only where a mechanism backs them. Every open gap is a watch contract: it names the organ and symbol that closes it, and this page flips the cell itself when that workstream ships.

Person · product · place — not yet measured for this domain

Every compare carries this layer. Declare knowledge/compare/media.ppp (rows surface|nishi or c1..c4|label|url|connect naming OUR live surface and each rival's front door), run nx_ppp_probe domain media, and this section fills itself on the next beat: the same ruler on both sides — privacy and CX (third-party hosts, tracker classes, cookies, security headers), design and longevity (design hygiene, computed WCAG contrast, render-blocking resources, unsized media, script weight, theme and motion queries), findability (landmarks, skip link, on-site search, breadcrumb, headings, internal links).

The field — discovered, not chosen

Rows written by nx_field_discover from media.seeds: the industry's own lists (Wikipedia wikitext, GitHub topics, awesome lists) read mechanically, every candidate counted across seeds. The matrix columns above are a SEAT'S pick; this band is the population they were picked from, and the stats line measures one against the other. A rival here is a lead, never a verdict — it earns a column when its capabilities are read and pinned.

field|seeds=4|scanned=4|fetched=4|reused=0|failed=0|named=4|candidates=4|mentions=4|capped=0 rival|Jellyfin|1|1|col0-jellyfin|https://jellyfin.org/posts/jellyfin-release-10.9.0/|named rival|Plex|1|1|col1-plex|https://support.plex.tv/articles/202197528-video-preview-thumbnails/|named rival|Immich|1|1|col2-immich|https://docs.immich.app/features/searching|named rival|Kavita|1|1|col3-kavita|https://wiki.kavitareader.com/|named
RankRivalSeedsMentionsFirst seedKindLink
1Jellyfin11col0-jellyfinnamedhttps://jellyfin.org/posts/jellyfin-release-10.9.0/
2Plex11col1-plexnamedhttps://support.plex.tv/articles/202197528-video-preview-thumbnails/
3Immich11col2-immichnamedhttps://docs.immich.app/features/searching
4Kavita11col3-kavitanamedhttps://wiki.kavitareader.com/

field candidates 4|shown 4 of 4|matrix columns in the field 4 of 4|discovered rivals with no column 0|malformed rows 0 (counted, never rendered)|read-capped 0

Gaps from the record — what the estate does that no board carries

The record census (nx_goalmap record) reads the invoked-tool population and every plan queue row and files each organ or directive that NO matrix, plan or gates row names. A row here is a callout the boards missed: adjudicate it onto a board or declare it infrastructure. Census state BLIND (age 74236 s), sources read 4 of 7 declared — a BLIND census is a FLOOR: unread sources can only add rows.

kindnameboardsourceevidence

rows shown 0|this board's directives 0|estate-wide un-boarded organs 492 (listed in full on /compare/ecosystem)|census rows 611|malformed 0 (counted, never rendered)

References

Beyond a link list. Every reference below resolves twice — the publisher's copy and, where banked, the estate's own non-rottable library mirror with a content pin — and carries its evidence class plus the exact claim on this page it grounds. Keyed marks like [key] in the matrix notes jump here. A dash means honestly absent, never assumed.
  1. [jellyfin109] Jellyfin Project. Jellyfin 10.9.0 release notes: trickplay (live video scrubbing previews) upstreamed from the Jellyscrub plugin, multiple subtitle tracks, improved search. May 2024. publisher · read in our library knowledge/fetched/cmp_media_jellyfin109.html · pin hff91aae75c8ec9c87b8ce37c7195e73f11dc43d9cc8ce118e6ee69990021376d · accessed 2026-08-18 · vendor-docGrounds: The Jellyfin column code 2 on "Trickplay / BIF scrub-preview sprites": Jellyfin generates seek-bar preview images server-side since 10.9 -- the top delivery-UX gap row names exactly this capability as absent in ours.
  2. [plex-bif] Plex Support. Video Preview Thumbnails: BIF media-index files generated during scheduled tasks or on add, used by the timeline scrubber; documented as CPU-heavy (10+ minutes per movie). publisher · read in our library knowledge/fetched/cmp_media_plex-bif.html · pin h6b01f2145a33dae2d9b798380063c92b31272bd6a0ffd04c3c1f542b7bbb3faf · accessed 2026-08-18 · vendor-docGrounds: The Plex column on "Trickplay / BIF scrub-preview sprites" and "Video poster / recording thumbnail": Plex derives BIF sprites at scan time and says what it costs, which is why our row is a scan-time derivation contract and not a serve-time one.
  3. [immich-faces] Immich documentation. Facial Recognition: faces detected in photos and videos and grouped into people by a DBSCAN-derived incremental clustering with tunable detection score, recognition distance and minimum faces. publisher · read in our library knowledge/fetched/cmp_media_immich-faces.html · pin h2702f577b4ed99892ba9c54a84677e0c779105cb59ab8672273c32287634093a · accessed 2026-08-18 · vendor-docGrounds: The face-clustering half of "Face / object / CLIP semantic media search" (Immich leads: on-device face clustering) -- the row grades our absent clustering against a documented algorithm, not a marketing claim.
  4. [kavita] Kavita wiki. Kavita: a self-hosted digital library for manga, comics and books supporting a vast array of file formats, multi-user, open source (v0.9 series). publisher · read in our library knowledge/fetched/cmp_media_kavita.html · pin he55444833ee52a70cbfa2b5db53ca2b323609a2b8a401addb41328fc3b8445e3 · accessed 2026-08-18 · vendor-docGrounds: The Kavita code 2 on "Book / manga / comic reader library", "Book cover thumbnail extraction" and "Comic / manga page rendering (CBZ/CBR correctness)": a dedicated manga/book server is the depth bar our /library and the operator-flagged broken CBZ/CBR path are graded against.
  5. [rfc8216] Pantos, May. HTTP Live Streaming. IETF RFC 8216, August 2017. publisher · read in our library knowledge/fetched/cmp_media_rfc8216.html · pin h6839d54f21b1f95d9d1b0bf334790c3ef90bd829be832ce35b6db2be9dc93ac4 · accessed 2026-08-18 · published-standardGrounds: "Adaptive-bitrate HLS / DASH ladder": the multi-rendition master-playlist protocol the incumbents ship for bandwidth adaptation; our TS-to-fMP4 fly-remux serves one rendition, so the row is honestly 0.
  6. [w3c-mse] W3C. Media Source Extensions (Recommendation 17 November 2016; MSE-2 Working Draft 07 August 2026 adds codec switching, worker support and managed media source). publisher · accessed 2026-08-18 · published-standardGrounds: "On-the-fly remux + MSE streaming" and "Duration + keyframe index (seekable MSE)": the MediaSource/SourceBuffer append model gs_vid_stream feeds with fMP4 segments and the NXVI keyframe index seeks against. Mirror absent by declaration: three sovereign fetches of w3.org returned 5.8KB truncated bodies.
  7. [wcag22] W3C. Web Content Accessibility Guidelines (WCAG) 2.2. W3C Recommendation, 05 October 2023. publisher · accessed 2026-08-18 · published-standardGrounds: "Accessibility (contrast / keyboard / ARIA)": contrast minimum, keyboard operability and name/role/value are WCAG success criteria; the row's incumbents-1 ours-0 grade is measured against this document, and no pass has been run on our surface. Mirror absent by declaration (same w3.org truncation).
  8. [clip21] Radford, Kim, Hallacy et al. Learning Transferable Visual Models From Natural Language Supervision (CLIP). ICML 2021, arXiv:2103.00020. publisher · read in our library knowledge/fetched/cmp_media_clip21.html · pin hf1f97fccf5d26c75e369795b14fbf4150037910175d469b1f6d4341a7137ab94 · accessed 2026-08-18 · published-paperGrounds: The CLIP half of "Face / object / CLIP semantic media search": the joint image-text embedding Immich's smart search runs is this paper's model, which defines what a freeform semantic query over photos means and what our BM25 text search cannot answer.

generated by nx_swcompare_matrix (sovereign NishiLang organ) from knowledge/compare/media.matrix · source checks show implementation presence; runtime and user-outcome evidence are reported separately · JavaScript supports page controls