From f7c41966b005de4bf6a9d71362a5fd285f711024 Mon Sep 17 00:00:00 2001
From: Frank
Date: Wed, 4 Nov 2026 12:49:42 -0800
Subject: [PATCH] fix(homepage): Jellyfin takes the family login; document the
voice models
Jellyfin authenticates against Authentik over LDAP, so telling the household
that it "will not take the family password" sent people to the wrong door. The
tile's provider id (alex -> LdapAuthenticationProviderPlugin) and a live bind +
memberOf search against the running outpost are the proof; six places repeated
the claim, and all six now say to sign in with the franksdank.cloud username and
password. Added the failure mode that actually happens: a password that works on
the homepage but is refused here means the name is not in jellyfin_users yet.
Plex and the e-book door stay the two genuinely separate accounts.
Marreta's tile loses its VPN/headless-browser mechanics and keeps one honest
clause: "does not work on all sites".
The models page gains the TTS pair the household keeps meeting: frank-tts
(Qwen3 talker + 12 Hz codec on the iGPU, five cloned voices, live list at
/v1/audio/voices) and Kokoro (82M, stock presets, runs in the user's own
browser) - which is why the AI chat's speaker list never matches the server's.
Verified in a browser against an isolated copy of the tree: both tiles render
the new copy, #models carries both tables, zero broken images, and every
retired phrase is absent from the rendered text. ./tests/run.sh: 841 pass.
---
shared/homepage/docs.html | 72 ++++++++++++++++++++++++++++++-----
shared/homepage/services.json | 4 +-
2 files changed, 64 insertions(+), 12 deletions(-)
diff --git a/shared/homepage/docs.html b/shared/homepage/docs.html
index 5e72cce..c2592c2 100644
--- a/shared/homepage/docs.html
+++ b/shared/homepage/docs.html
@@ -33,7 +33,7 @@ There is no signup button on purpose.
@@ -77,15 +77,17 @@ There is no signup button on purpose.
Authentik is the front desk. It asks who you are, once per device
per few days, and after that you drift from app to app without being stopped again.
-
One account opens: the homepage, search, Marreta, the AI chat, Files, Gitea.
+
One account opens: the homepage, search, Marreta, the AI chat, Files, Gitea, and Jellyfin
+(there it is typed as username + password, not the automatic sign-in).
The front desk. Your username first, then your password. Nothing here signs
you up for anything; if you don't have an account yet, ask Frank.
-
Three doors keep their own accounts and will not take the family
-password: Jellyfin, Plex (a Plex account, its own e-mail
-login) and the e-book door. Frank creates those by hand.
+
Two doors keep their own accounts and will not take the family
+password: Plex (a Plex account, its own e-mail
+login) and the e-book door. Frank creates those by hand. Jellyfin does take the
+family login — your franksdank.cloud username and password.
Want your own password? It lives at
account settings
— the same button you get at the bottom of the homepage.
@@ -128,8 +130,10 @@ account of any company's, and the posters and episode guides are all filled in.<
Getting in
Pick your name. There is no list of names on the login screen — type yours.
-
Type the password Frank set for you. It is not the family password;
- this is the most common wrong door.
+
Type your franksdank.cloud password — the same one that opens the
+ homepage, search and the AI chat. There is no separate Jellyfin password.
+
Refused, but the same password opens the homepage? Your name hasn't been given library
+ access yet — ask Frank, it's a one-line change on his side.
No name yet? Ask Frank to make one. There is no self-service signup, on purpose.
@@ -147,7 +151,8 @@ account of any company's, and the posters and episode guides are all filled in.<
If it misbehaves
-
Wrong password and no error you understand? That's the family password again.
+
It rejects a password that works everywhere else? Your name isn't on the library-access
+ list yet — ask Frank.
A film with a blank poster is missing artwork, not missing files — Frank can refresh it.
Buffering away from home usually means the pipe out of the house, not the server.
@@ -167,7 +172,8 @@ Plex's own sign-in, and that is correct: Plex is closed-source and insists on a
both; the artwork, watch-state and profiles are separate.
Choose Plex when your TV already has the Plex app on it, or you want Plex's trailers
and music. Otherwise Jellyfin is the one the household uses.
-
Ask Frank for an invitation; he can also tell you which of the two has the thing you're looking for.
+
Need a Plex account of your own? Ask Frank to invite it; he can also tell you which of
+ the two has the thing you're looking for.
@@ -359,6 +365,51 @@ Qwen3.8-Flash-Next v2, abliterated
(prism-ml/Ternary-Bonsai-2-9B-gguf)
with a small adapter fitted that removes its refusal reflex. All three accept pictures. Ask
Frank before pointing a script at one of them directly; the address is on the homepage.
+
+
And the voices
+
Two speech models live in this house, and they are different animals. One of them
+speaks as a specific person; the other is a pack of stock voices that ships inside
+the tools you already use.
+
+
Name
Runs on
Good at
Notes
+
+
frank-tts
+
the Strix Halo machine's built-in graphics, sharing the card with frank-dragoon
+
cloning: it speaks as one particular voice, chosen by name
+
five voices today — dr.kern, garrickhagon,
+ jeffhays, vaati, wilwheaton; ask for one by name and
+ you get it. No key, but it is a house-hardware door: it answers on the house network only
+
+
+
Kokoro
+
your own browser, or Frank's own terminal — no server in the loop
+
instant plain narration, quick and cheap
+
about two dozen preset voices with coded names (af_heart,
+ bm_george…). It cannot clone, and it will never answer to the five names
+ above
+
+
+
+
The AI chat's speaker button is Kokoro. That is why it offers a
+ different list of names, and why it starts talking a moment before anything on the server
+ could. It speaks in your browser, on your machine.
+
The podcast maker uses the clones. An episode's two hosts are
+ wilwheaton and vaati, rendered by frank-tts. That door
+ is Frank's for now.
+
Frank's coding agent narrates through the clones too — the default
+ voice is wilwheaton.
+
Want your own voice in the list? Ask Frank. It needs about twenty
+ seconds of you talking plainly, once; the voice then carries your name.
+
+
The exact weights: frank-tts is a Qwen3 talker
+(1.7 billion parameters, 4-bit) plus its 12 Hz audio codec, driven by
+qwentts.cpp; Kokoro is a much smaller 82-million-parameter model whose voices are
+baked in. A cloned voice is not a setting — it is a directory of reference audio on the
+server, which is why adding one is a fifteen-minute job and not a checkbox. Programmers on the
+house network: POST http://192.168.0.143:7772/v1/audio/speech with
+{"input": "…", "voice": "vaati"} gets you WAV or MP3, and
+/v1/audio/voices answers
+the live list, so this page can never lie to you for long.
@@ -401,7 +452,8 @@ one you were given? Ask Frank to widen the key.
scripts it needs (or an extension is). Allow scripts for that site, or try another browser.
Still looping? Ask Frank — the guard can be told you're a person.
"Invalid password" on the front desk. Right password, wrong door: the
- family login does not open Jellyfin, Plex or the e-book door.
+ family login does not open Plex or the e-book door. Jellyfin does take it, but only for the
+ names Frank has given library access.
The AI is slow. Each model only holds a couple of conversations at once
(two, three or four, depending which). It is a queue, not a crash — or Frank is
mid-conversation; the big one is on the same machine as the films.
diff --git a/shared/homepage/services.json b/shared/homepage/services.json
index 63d3bd5..de8dbcd 100644
--- a/shared/homepage/services.json
+++ b/shared/homepage/services.json
@@ -110,7 +110,7 @@
"name": "Jellyfin",
"category": "user",
"section": "Media Library Apps",
- "description": "Open source media server for the film and TV library: its own logins (no Authentik here), so ask Frank for an account.",
+ "description": "Open source media server for the film and TV library. Sign in with your franksdank.cloud username and password — the same login as the rest of the house; ask Frank if yours isn't in yet.",
"url": "http://jelly.franksdank.cloud",
"docs": "",
"probe": "192.168.0.235:8096",
@@ -136,7 +136,7 @@
"name": "Marreta",
"category": "user",
"section": "Web Apps",
- "description": "Paywall sledgehammer: hand it an article URL and it drags the page back through the VPN with the paywall chrome, cookie wall and trackers stripped; a headless browser renders the JS-heavy ones. Best effort — hard paywalls and login walls still win.",
+ "description": "Paywall sledgehammer: hand it an article URL and it will attempt to smash its paywall. Note: does not work on all sites.",
"url": "http://marreta.franksdank.cloud",
"docs": "",
"probe": "127.0.0.1:8082",