{% extends "base.html" %} {% set labels = { "welcome": "Welcome", "media": "Media folders", "vocabulary": "Vocabulary", "llm": "Text clean-up and name hints (optional)", "services": "Readiness", "finish": "Finish", } %} {% block title %}Voxint setup — {{ labels[step.value] }}{% endblock %} {# The wizard runs before onboarding, so the protected top nav (Runs / Review) would only bounce the operator back here. Replace it with a step indicator. #} {% block nav %}
    {% for s in steps %}
  1. {{ loop.index }}{{ labels[s.value] }}
  2. {% endfor %}
{% endblock %} {% block body %}
{% if error %}{% endif %} {% if step.value == "welcome" %}

Welcome to Voxint

Voxint transcribes your audio and video, separates who spoke when, and lets you attribute each voice to a real person, so you get a searchable, speaker-labelled transcript you can trust.

This quick setup takes about two minutes. Every step is optional and you can revisit it later.

Get started →
{% elif step.value == "media" %}

Media folders

Voxint reads media from under {{ media_root }}. Browse to the folders you want it to watch and add them; optionally choose a domain pack per folder to tune transcription and enrichment. You can skip this and submit files individually later.

{% include "fragments/folder_panel.html" %}

Scan for existing media

Optionally look through your registered folders for audio/video that isn't in Voxint yet, and queue it for transcription.

Continue →
{% elif step.value == "vocabulary" %}

Custom vocabulary

Add names, jargon, acronyms, and preferred spellings — one per line. Voxint feeds these to transcription and to name attribution, so unusual terms come out right. They apply to your next run with no restart needed.

Continue →
{% elif step.value == "llm" %}

Text clean-up and name hints (optional)

When enabled, Voxint sends transcript segments to an OpenAI-compatible model to clean them up and surface likely speaker names. It's best-effort. A slow or failing model never blocks a run; enhancement is simply skipped.

{% if llm_key_present %} {% if llm_key_source == "stored" %}

An API key is saved here. ✓ (stored)

{% else %}

An LLM_API_KEY is set in the environment. ✓ (environment)

{% endif %} {% else %}

No API key is configured. Enter one below (or set LLM_API_KEY in the environment) before enabling.

{% endif %} {% if not llm_budget_ok %}

The configured LLM run budget doesn't fit the transcription stage lease, so enhancement can't be enabled until that's adjusted.

{% endif %}

Stored in Voxint's database and used for all LLM features. Never shown again after saving.

{% if llm_key_source == "stored" %}
{% endif %}
Continue →
{% elif step.value == "services" %}

Readiness checks

Voxint's transcription, diarization, and speaker-embedding run as separate model services (GPU or CPU tier), backed by Postgres and Redis. Here's whether each dependency is reachable right now: ready means good to go, failed means the pipeline can't run until you fix it, and unverified means an optional feature couldn't be confirmed:

{% for check in doctor_checks %}
{{ check.state }} {{ check.name }} {{ check.detail }}
{% if check.state != "ready" %}

{{ check.remediation }}

{% endif %} {% endfor %}

If a service is down, start the model services — the GPU overlay (compose.gpu.yaml) or, with no NVIDIA GPU, the CPU overlay (compose.cpu.yaml); see the README's quickstart. This check is advisory — you can finish setup regardless. But a run submitted while a service it needs is down will retry with backoff (about five attempts over roughly an hour and a half) and then land failed; once the services are up, requeue it from the run's page.

Re-check Continue →
{% elif step.value == "finish" %}

You're all set

{% if tutorial_error %}{% endif %}

The guided tutorial is a short, hands-on walkthrough of one full run on a bundled three-speaker sample — the quickest way to learn the console. You can re-run this setup, or the tutorial, any time from Settings.

{% if not tutorial_available %}

The tutorial's bundled sample is set up the first time you start it — no command line needed.

{% endif %} {% endif %}
{% endblock %}