New · version 0.2.1

Your GPU, as a private speech service.

Viska Server turns a Linux machine with a graphics card into the transcription engine for your laptop and your phone. Install it with one command on a home server or a virtual machine, pick a Whisper model for each language, and pair your devices. Your voice goes to your own hardware and nowhere else.

Ubuntu 22.04 · 24.04 NVIDIA CUDA AMD ROCm (experimental) Tailscale or HTTPS GPL-3.0-or-later

The same host as Viska, without a desktop.

Viska on a desktop computer can already share its GPU in host mode. Viska Server is that host as a standalone system service: no window, no keyring, no logged-in user. It speaks the same protocol, so Viska on another computer and Viska Voice on Android connect to it exactly as they connect to a desktop host.

It is built to run for weeks on its own. A watchdog restarts it if it stops answering, a fatal GPU error ends the process so systemd can start a clean one, and updates are signed, installed side by side and rolled back if the new version does not come up.

Any Whisper model per language Swedish with KB-Whisper GPU memory budget Transcribe while speaking (optional) Proofreading via Ollama Cloud or a local model Editable prompt QR pairing Signed automatic updates
curl -fsSL https://getviska.app/server/install.sh \
  | sudo bash

# later
sudo viska-server pair
viska-server status

What you need.

Install.

The installer asks which languages and models you want, sets up a system user and a hardened systemd service, downloads the models, publishes the server on your tailnet and prints a pairing code. Run it again at any time: it never overwrites your settings or your token.

Prefer not to pipe a script into a shell? Download install.sh and its signature install.sh.sig, read it, check the signature with the public key (also shown below), then run it with sudo bash install.sh.

# Swedish and English, Tailscale (the default)
curl -fsSL https://getviska.app/server/install.sh | sudo bash

# no questions: KB-Whisper medium for Swedish,
# Whisper medium.en for English, 1.5 GB budget
curl -fsSL https://getviska.app/server/install.sh \
  | sudo bash -s -- --yes

# public HTTPS with your own domain
… | sudo bash -s -- --domain speech.example.com

# one multilingual model for every language
… | sudo bash -s -- --languages multilingual

Models and memory.

No language is required. Give each language the model you want: KB-Whisper small, medium or large for Swedish, Whisper medium.en for English, or one multilingual model such as Whisper large-v3 turbo for all of them. Change it whenever you like with viska-server models use.

A home model stays on the GPU, ready at once. When a device asks for another language, its model is loaded beside the home model while you are still speaking; the GPU memory budget only limits those other models. An idle language model is parked in ordinary memory and is back on the GPU in under a second. Only if the card itself is full is the home model parked instead, and it moves back after a quiet spell. Real memory use is measured on your card, so the budget is not a guess.

# /etc/viska-server/config.toml
[languages]
sv = "kb-whisper-medium-ct2"
en = "whisper-medium-en-ct2"

[memory]
home_model = "kb-whisper-medium-ct2"
gpu_budget_mb = 1500
keep_home_on_gpu = true
return_home_after_minutes = 10

# apply without a restart
sudo systemctl reload viska-server

Proofreading, your way.

With intuitive proofreading the server turns what you said into what you meant to write. It uses Ollama Cloud with DeepSeek V4.1 Flash by default, which states that it keeps no data, or a model on your own machine through Ollama (Gemma 4, Qwen and others) or any OpenAI-compatible server such as vLLM or llama.cpp.

The prompt is yours to edit with sudo viska-server prompt edit sv. A device may also send its own prompt for its own dictations; you can switch that off.

Pair your devices.

sudo viska-server pair prints a QR code in the terminal and a pairing link. Scan the code with Viska Voice, or paste the link into Viska under Remote GPU. The link carries the server address and its token: treat it like a password, and run sudo viska-server token rotate if a device is lost.

Updates that undo themselves.

Once a day a small root service checks for a new version. The release list is signed, and the installed server only accepts our key and never an older version. The new version is installed next to the current one, the server waits until nobody is dictating, switches over and checks that it is healthy. If not, it switches back.

Choose auto, notify or off in the config file, and the hours when automatic installs may happen. Your settings, prompts and token are never touched by an update.

sudo viska-server update --check
sudo viska-server update
journalctl -u viska-server-update

Commands.

CommandWhat it does
viska-server statusVersion, GPU, loaded and parked models, sessions
viska-server doctorChecks the driver, CUDA libraries, models, ports, Tailscale or Caddy, disk and config
viska-server models listEvery model you can install, with size and languages
sudo viska-server models use sv kb-whisper-large-ct2Serve Swedish with another model; installs it if needed
sudo viska-server models home … / models budget 1500Set the home model and the GPU memory budget
sudo viska-server prompt edit svEdit the Swedish proofreading prompt; prompt reset goes back
sudo viska-server config editEdit the config file, check it and reload the server
sudo viska-server pair / token rotateShow the pairing code, or issue a new token

Release signing key

Updates and the installer are signed with this Ed25519 key. Check a downloaded installer with base64 -d install.sh.sig > sig.bin && openssl pkeyutl -verify -pubin -inkey viska-server.pub -rawin -in install.sh -sigfile sig.bin.

-----BEGIN PUBLIC KEY-----
MCowBQYDK2VwAyEAsfAJMY6MB24e1ez38QWayD2G0Sm0BUUzUFkY6lvwHKQ=
-----END PUBLIC KEY-----

Coming from the old viska-remote service? The installer takes over its token and Ollama key, so paired phones keep working, and switches the old service off.

Changes.

0.2.1

Keeps your main language model on the GPU while another language loads beside it, parks idle language models in RAM, and applies a new home model right after a reload. Viska Desktop 0.7.4 shows the languages the server serves.

Package: viska_server-0.2.1-py3-none-any.whl, SHA-256 1c495139cd359dc86576252fadce9da7de18547f448e5850e0e09fd38e9bf581. The installer and the update service fetch it for you and check its signed manifest.