Getting in
Everything here lives behind two doors. The first is Anubis, a quiet bot-check: the first time you visit any guarded page in a session you see a short "making sure you're not a bot" screen. It runs once. The second door is Authentik, the family single sign-on: log in once and every guarded service (this homepage, search, chat, media requests, and friends) opens for you without a second password.
- Need an account? Ask Frank. Accounts are issued by hand; there is no signup.
- Your clearance lives in a cookie. Clearing cookies means re-clearing both doors.
- If a page asks you to log in repeatedly, that is a server-side problem — tell Frank, don't brute-force it.
Talking to the AI
The everyday front door is Open WebUI, the family chat app. Open the address, click Continue with authentik, and use the same single sign-on as everything else — no separate password. Your conversations are saved to your account, so history follows you between devices.
Below the text box, the model box on the right chooses which model answers you.
Family accounts get frank-secondary — the fleet's fast all-rounder,
which also sees images: drag a photo or screenshot straight into the chat box.
Frank's account can additionally reach the bigger models.
Open WebUI keeps your chat history; the raw model endpoints (used by developer tools, see API access) do not.
The running models
Three models serve the family. The homepage status cards show whether each one is up right now.
frank-large — deep reasoning
- Model: Qwen3.8-Flash-Next v2 Swift1.5 abliterated (halogen flash-server, ~62 GiB) — an uncensored edition that thinks before answering.
- Capacity: 200k-token context, two conversations at a time; sees images.
- Inputs: text, image.
- Best for: cybersecurity and debugging. Use requires Frank's permission.
frank-primary — the primary model
- Model: Qwen3.8-Flash-Next at native FP8 precision (radiance, 173 GiB across both R9700s) — the biggest brain on the network.
- Capacity: 200k-token context, two conversations at a time; sees images.
- Inputs: text, image.
- Best for: software engineering, system administration, and instruction tasks.
frank-secondary — the fast utility model
- Model: Qwen3.5-9B-Uncensored (Q6_K, 6.9 GiB) on the RTX 3090 — roughly 95 tokens per second.
- Capacity: two simultaneous conversations, 200k tokens each; sees images.
- Inputs: text, image.
- Best for: agentic search, RAG, research subagents, translation, roleplay, and summarization — any small task that doesn't need much intelligence, and anything with a picture (screenshots, photos, diagrams). This is the model Open WebUI offers to family accounts.
Which one to pick? Small utility work, RAG, search, and
screenshots: frank-secondary. Software engineering, sysadmin, and
instruction tasks: frank-primary. Cybersecurity and debugging:
frank-large (with Frank's permission).
API access — the AI on your own laptop
Developer assistants like Opencode and Pi are chat programs that run on your own computer and can read your files, run commands, and edit code while they talk. They are all built to speak the same standard language as the big commercial products (the "OpenAI-compatible" API), and our server speaks it too. You give the program three things — an address, a personal key, and a model name — and your laptop thinks through our hardware.
Step 1 — get your personal key
- Open ai.franksdank.cloud and log in.
- Click your circle (bottom-left corner) → Settings → Account.
- Scroll to API keys → press Show → Create new secret key.
- Press the copy icon. The key looks like
sk-3f2a….
The key is a password. Anyone who has it can use our AI as you. Paste it only into the program's config file — never into a shared chat, a screenshot, or a git repository.
Step 2 — the three details every tool asks for
- Base URL:
https://ai.franksdank.cloud/api/v1 - Model:
frank-secondary - API key: the
sk-…from step 1 — sent as the headerAuthorization: Bearer sk-…
Proof that it works, from any terminal (replace the key):
curl https://ai.franksdank.cloud/api/v1/chat/completions \
-H "Authorization: Bearer PASTE-YOUR-KEY" \
-H "Content-Type: application/json" \
-d '{"model": "frank-secondary", "messages": [{"role": "user", "content": "Hello!"}]}'
Step 3a — Opencode
Install once (npm install -g opencode-ai), then create the file
~/.config/opencode/opencode.json with:
{
"$schema": "https://opencode.ai/config.json",
"provider": {
"frank": {
"npm": "@ai-sdk/openai-compatible",
"name": "Frank fleet",
"options": {
"baseURL": "https://ai.franksdank.cloud/api/v1",
"apiKey": "PASTE-YOUR-KEY"
},
"models": {
"frank-secondary": { "name": "frank-secondary" }
}
}
}
}
Start opencode and pick the model with /model —
it appears as frank/frank-secondary.
Step 3b — Pi
Create the file ~/.pi/agent/models.json with:
{
"providers": {
"frank": {
"baseUrl": "https://ai.franksdank.cloud/api/v1",
"api": "openai-completions",
"apiKey": "PASTE-YOUR-KEY",
"models": [
{ "id": "frank-secondary" }
]
}
}
}
Then start Pi with pi --model frank/frank-secondary.
The key works only for the family AI — it is not your Authentik password, and losing it costs nothing beyond asking Frank to rotate it. Want a bigger model (frank-primary, frank-large)? Ask Frank to raise your access.
Media & files
- Movies & TV: request with Seerr; watch with Plex or Jellyfin. Don't ask the *arrs directly — Seerr is the front door, and requests ride the tunnel from there.
- Books: Calibre-Web — the e-book library, with its own login.
- Games: RomM — ROM library and emulator collection.
- Raw files: Copyparty — direct downloads and shares.
- Search: SearXNG — metasearch, VPN-routed, no AI snoop.
When something looks broken
- A status card says DOWN. Reload the page once; the checker re-probes every few minutes. If it stays down, that service really is unhappy — tell Frank.
- "status unavailable" on the homepage. The page couldn't read its status file. Hard-reload (Ctrl/Cmd-Shift-R).
- Connection timeout on a home device. Nine times out of ten the device isn't using the house DNS (Pi-hole at 192.168.0.143) and resolved our names to the public address, which doesn't answer. Point the device's DNS at 192.168.0.143 and retry.
- The bot-check spins forever. Let it finish; heavy JS blocking (privacy extensions) can starve it. Pause the blocker, reload, resume.