Merge pull request 'fix(homepage): Jellyfin takes the family login; document the voice models' (#145) from docs/homepage-jellyfin-login-and-tts into main

This commit was merged in pull request #145.
This commit is contained in:
dank committed 2026-11-04 12:56:44 -08:00
commit 51007ac604
2 files changed
+64 -12

No files matched your search

+62 -10
View File
@@ -33,7 +33,7 @@ There is no signup button on purpose.</p>
<p><strong>2. Pick what you want to do:</strong></p> <p><strong>2. Pick what you want to do:</strong></p>
<table> <table>
<tr><th>I want to&hellip;</th><th>Open</th><th>Needs its own login?</th></tr> <tr><th>I want to&hellip;</th><th>Open</th><th>Needs its own login?</th></tr>
<tr><td>watch a film or a show</td><td><a href="https://jelly.franksdank.cloud">Jellyfin</a></td><td>yes &mdash; ask Frank</td></tr> <tr><td>watch a film or a show</td><td><a href="https://jelly.franksdank.cloud">Jellyfin</a></td><td>no &mdash; your franksdank.cloud login</td></tr>
<tr><td>watch it on a TV that already has Plex</td><td><a href="https://plex.franksdank.cloud/web">Plex</a></td><td>yes &mdash; a Plex account, Frank invites it</td></tr> <tr><td>watch it on a TV that already has Plex</td><td><a href="https://plex.franksdank.cloud/web">Plex</a></td><td>yes &mdash; a Plex account, Frank invites it</td></tr>
<tr><td>listen to an audiobook</td><td><a href="https://audiobooks.franksdank.cloud/audiobookshelf">Audiobookshelf</a></td><td>no &mdash; the family password</td></tr> <tr><td>listen to an audiobook</td><td><a href="https://audiobooks.franksdank.cloud/audiobookshelf">Audiobookshelf</a></td><td>no &mdash; the family password</td></tr>
<tr><td>ask a computer a question, privately</td><td><a href="https://ai.franksdank.cloud">AI chat</a></td><td>no</td></tr> <tr><td>ask a computer a question, privately</td><td><a href="https://ai.franksdank.cloud">AI chat</a></td><td>no</td></tr>
@@ -77,15 +77,17 @@ There is no signup button on purpose.</p>
<li><strong>Authentik</strong> is the front desk. It asks who you are, once per device <li><strong>Authentik</strong> 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.</li> per few days, and after that you drift from app to app without being stopped again.</li>
</ul> </ul>
<p>One account opens: the homepage, search, Marreta, the AI chat, Files, Gitea.</p> <p>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).</p>
<figure> <figure>
<img src="/img/onboarding/door-authentik.webp" alt="The sign-in screen: an identification field, then a password field"> <img src="/img/onboarding/door-authentik.webp" alt="The sign-in screen: an identification field, then a password field">
<figcaption>The front desk. Your username first, then your password. Nothing here signs <figcaption>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.</figcaption> you up for anything; if you don't have an account yet, ask Frank.</figcaption>
</figure> </figure>
<p class="key-warn">Three doors keep their own accounts and will not take the family <p class="key-warn">Two doors keep their own accounts and will not take the family
password: <strong>Jellyfin</strong>, <strong>Plex</strong> (a Plex account, its own e-mail password: <strong>Plex</strong> (a Plex account, its own e-mail
login) and the e-book door. Frank creates those by hand.</p> login) and the e-book door. Frank creates those by hand. <strong>Jellyfin does take the
family login</strong> &mdash; your franksdank.cloud username and password.</p>
<p class="foot-note">Want your own password? It lives at <p class="foot-note">Want your own password? It lives at
<a href="https://auth.franksdank.cloud/if/flow/default-user-settings-flow/">account settings</a> <a href="https://auth.franksdank.cloud/if/flow/default-user-settings-flow/">account settings</a>
&mdash; the same button you get at the bottom of the homepage.</p> &mdash; the same button you get at the bottom of the homepage.</p>
@@ -128,8 +130,10 @@ account of any company's, and the posters and episode guides are all filled in.<
<h3>Getting in</h3> <h3>Getting in</h3>
<ul> <ul>
<li>Pick your name. There is no list of names on the login screen &mdash; type yours.</li> <li>Pick your name. There is no list of names on the login screen &mdash; type yours.</li>
<li>Type the password Frank set for you. <strong>It is not the family password</strong>; <li>Type your <strong>franksdank.cloud password</strong> &mdash; the same one that opens the
this is the most common wrong door.</li> homepage, search and the AI chat. There is no separate Jellyfin password.</li>
<li>Refused, but the same password opens the homepage? Your name hasn't been given library
access yet &mdash; ask Frank, it's a one-line change on his side.</li>
<li>No name yet? Ask Frank to make one. There is no self-service signup, on purpose.</li> <li>No name yet? Ask Frank to make one. There is no self-service signup, on purpose.</li>
</ul> </ul>
<figure> <figure>
@@ -147,7 +151,8 @@ account of any company's, and the posters and episode guides are all filled in.<
</ul> </ul>
<h3>If it misbehaves</h3> <h3>If it misbehaves</h3>
<ul> <ul>
<li>Wrong password and no error you understand? That's the family password again.</li> <li>It rejects a password that works everywhere else? Your name isn't on the library-access
list yet &mdash; ask Frank.</li>
<li>A film with a blank poster is missing artwork, not missing files &mdash; Frank can refresh it.</li> <li>A film with a blank poster is missing artwork, not missing files &mdash; Frank can refresh it.</li>
<li>Buffering away from home usually means the pipe out of the house, not the server.</li> <li>Buffering away from home usually means the pipe out of the house, not the server.</li>
</ul> </ul>
@@ -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.</li> both; the artwork, watch-state and profiles are separate.</li>
<li>Choose Plex when your TV already has the Plex app on it, or you want Plex's trailers <li>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.</li> and music. Otherwise Jellyfin is the one the household uses.</li>
<li>Ask Frank for an invitation; he can also tell you which of the two has the thing you're looking for.</li> <li>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.</li>
</ul> </ul>
</section> </section>
@@ -359,6 +365,51 @@ Qwen3.8-Flash-Next v2, abliterated
(<a href="https://huggingface.co/prism-ml/Ternary-Bonsai-2-9B-gguf">prism-ml/Ternary-Bonsai-2-9B-gguf</a>) (<a href="https://huggingface.co/prism-ml/Ternary-Bonsai-2-9B-gguf">prism-ml/Ternary-Bonsai-2-9B-gguf</a>)
with a small adapter fitted that removes its refusal reflex. All three accept pictures. Ask 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.</p> Frank before pointing a script at one of them directly; the address is on the homepage.</p>
<h3>And the voices</h3>
<p>Two speech models live in this house, and they are different animals. One of them
speaks as a <em>specific person</em>; the other is a pack of stock voices that ships inside
the tools you already use.</p>
<table>
<tr><th>Name</th><th>Runs on</th><th>Good at</th><th>Notes</th></tr>
<tr>
<td><code>frank-tts</code></td>
<td>the Strix Halo machine's built-in graphics, sharing the card with <code>frank-dragoon</code></td>
<td>cloning: it speaks as one particular voice, chosen by name</td>
<td>five voices today &mdash; <code>dr.kern</code>, <code>garrickhagon</code>,
<code>jeffhays</code>, <code>vaati</code>, <code>wilwheaton</code>; 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</td>
</tr>
<tr>
<td><strong>Kokoro</strong></td>
<td>your own browser, or Frank's own terminal &mdash; no server in the loop</td>
<td>instant plain narration, quick and cheap</td>
<td>about two dozen preset voices with coded names (<code>af_heart</code>,
<code>bm_george</code>&hellip;). It cannot clone, and it will never answer to the five names
above</td>
</tr>
</table>
<ul>
<li><strong>The AI chat's speaker button is Kokoro.</strong> 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.</li>
<li><strong>The podcast maker uses the clones.</strong> An episode's two hosts are
<code>wilwheaton</code> and <code>vaati</code>, rendered by <code>frank-tts</code>. That door
is Frank's for now.</li>
<li><strong>Frank's coding agent narrates through the clones too</strong> &mdash; the default
voice is <code>wilwheaton</code>.</li>
<li><strong>Want your own voice in the list?</strong> Ask Frank. It needs about twenty
seconds of you talking plainly, once; the voice then carries your name.</li>
</ul>
<p class="foot-note">The exact weights: <code>frank-tts</code> is a Qwen3 talker
(1.7&nbsp;billion parameters, 4-bit) plus its 12&nbsp;Hz audio codec, driven by
<code>qwentts.cpp</code>; Kokoro is a much smaller 82-million-parameter model whose voices are
baked in. A cloned voice is not a setting &mdash; 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: <code>POST http://192.168.0.143:7772/v1/audio/speech</code> with
<code>{"input": "&hellip;", "voice": "vaati"}</code> gets you WAV or MP3, and
<a href="http://192.168.0.143:7772/v1/audio/voices"><code>/v1/audio/voices</code></a> answers
the live list, so this page can never lie to you for long.</p>
</section> </section>
<section id="api-access"> <section id="api-access">
@@ -401,7 +452,8 @@ one you were given? Ask Frank to widen the key.</p>
scripts it needs (or an extension is). Allow scripts for that site, or try another browser. scripts it needs (or an extension is). Allow scripts for that site, or try another browser.
Still looping? Ask Frank &mdash; the guard can be told you're a person.</li> Still looping? Ask Frank &mdash; the guard can be told you're a person.</li>
<li><strong>"Invalid password" on the front desk.</strong> Right password, wrong door: the <li><strong>"Invalid password" on the front desk.</strong> Right password, wrong door: the
family login does not open Jellyfin, Plex or the e-book door.</li> 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.</li>
<li><strong>The AI is slow.</strong> Each model only holds a couple of conversations at once <li><strong>The AI is slow.</strong> Each model only holds a couple of conversations at once
(two, three or four, depending which). It is a queue, not a crash &mdash; or Frank is (two, three or four, depending which). It is a queue, not a crash &mdash; or Frank is
mid-conversation; the big one is on the same machine as the films.</li> mid-conversation; the big one is on the same machine as the films.</li>
+2 -2
View File
@@ -110,7 +110,7 @@
"name": "Jellyfin", "name": "Jellyfin",
"category": "user", "category": "user",
"section": "Media Library Apps", "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", "url": "http://jelly.franksdank.cloud",
"docs": "", "docs": "",
"probe": "192.168.0.235:8096", "probe": "192.168.0.235:8096",
@@ -136,7 +136,7 @@
"name": "Marreta", "name": "Marreta",
"category": "user", "category": "user",
"section": "Web Apps", "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", "url": "http://marreta.franksdank.cloud",
"docs": "", "docs": "",
"probe": "127.0.0.1:8082", "probe": "127.0.0.1:8082",