Settings, profiles, and analysis knobs¶
How to change TranscriptX behaviour from the GUI, env, and config files — without mixing up the several things named “profile”.
Where to start¶
Goal |
Where |
|---|---|
Everyday analysis depth (which modules run) |
Run Analysis preset: Quick / Balanced / Thorough / Custom — edit policies under Settings → Analysis |
Charts page Overview strip (enable, which charts, order) |
Settings → Configuration → Charts overview ( |
Overview / Insights page panels (layout profiles) |
Settings → Dashboard Builder — see dashboard_builder.md |
Common model and similarity knobs |
Settings → Configuration → Common Settings |
Full registry of knobs |
Settings → Configuration → enable Show advanced/raw settings editor |
Named module/workflow presets (disk JSON) |
Profiles page (sidebar) — activate from Configuration for Project / Run |
Paths, watcher, speakers, LLM models, questions, STT keyword lists |
Other Settings tabs (Storage, Watcher, Speakers, Interface, Models, Questions, Keywords, Corrections) |
Auto-name / auto-link after ingest |
Settings → Speakers — auto-identify.md ( |
Duplicate recordings / transcripts |
Settings → Storage → Duplicate library files (preview, then typed |
Show/hide instructional ⓘ tips (widget help + Speakers methodology notes) |
Settings → Interface → Help / info tips ( |
Action-menu icon vs text |
Settings → Interface → Action appearance ( |
Install capability ( |
Env / install marker — see installation details; not the Profiles page |
Speaker identity/voice stores are a separate subsystem (Settings → Speakers), including ingest auto-name / auto-link defaults (config_dir/identify.json, all off until you enable them), name-token policy, and optional Twenty CRM people lookup (env TWENTY_API_KEY / TWENTY_BASE_URL, read-only). Operator guide: auto-identify.md. Contracts: speaker_profiles_v1, speaker_profiles_voice_v1, STORAGE.md.
Analysis presets¶
When you run analysis, choose a Preset that determines which modules run:
Quick — no LLM modules and no heavy modules (fast local path). Modules that hard-depend on excluded heavy/LLM modules are omitted so the DAG cannot pull them back in.
Balanced — recommended default: non-heavy modules plus a limited heavy allowlist (
semantic_similarity) and global transcript LLM summary only (llm_summary). Experimental emotion classifiers stay off this preset — known limitations.Thorough — all suitable modules for the target (including LLM and heavy).
Custom — pick exactly which modules to run for this launch.
Edit Quick / Balanced / Thorough policies (and optional full module overrides) under Settings → Analysis. Mode quick vs full still controls depth knobs (semantic/NER limits) for the chosen preset.
Single-speaker / unnamed-speaker behavior¶
Content-first runs (T0): Some modules (topics, word clouds, global sentiment, transcript quality, exports, and similar) can run when no human names exist yet — for example after import when labels are still SPEAKER_00 or when captions had no speakers. Interaction and multi-speaker modules still skip until you name speakers, enable the ungate below, or re-transcribe with diarization.
By default, modules require human-named speakers. Diarized placeholders (SPEAKER_00, …) do not count until you name speakers in Speaker Identification. Modules that need multiple speakers (conversation loops, contagion, interactions, semantic similarity, Q&A, echoes, and others) skip when the named-speaker count is below their minimum. For group runs, the module list is filtered by the minimum named speaker count across members.
Tier |
When to use |
Knobs |
|---|---|---|
T0 |
No speaker labels or only |
Default content modules ( |
T1 |
Single-speaker monologue with one diarized label ( |
Treat as single speaker (per run or |
T2 |
Diarized multi-speaker, names optional |
Allow analysis without named speakers (global or per run) — uses turn-taking counts for gates |
T3 |
Named speakers (default policy) |
Name speakers in Speaker Identification; Balanced/Thorough presets expect human names |
To run modules on diarized labels without naming speakers (T2):
Global: Settings →
analysis.allow_unnamed_speakers(or envTRANSCRIPTX_ANALYSIS_ALLOW_UNNAMED_SPEAKERS)Per run: Run Analysis checkbox Allow analysis without named speakers
Either knob ungates the pipeline (global or per-run). When ungated, speaker-count gates use turn-taking labels and per-speaker artifacts include unidentified speakers.
For a single diarized speaker only (T1), use Treat as single speaker on Run Analysis (or CLI --treat-as-single-speaker). This is narrower than T2: it does not ungate when two or more turn-taking speakers are present.
Configuration scopes¶
Effective config for a run merges layers (highest wins first):
Environment (
TRANSCRIPTX_*)Run override (or Draft override when no run is selected)
Project
config.jsonBuilt-in defaults (plus active module/workflow profiles loaded into the runtime facade)
Authoritative precedence and path roots: STORAGE.md.
In Settings → Configuration:
Scope |
Editable? |
Persists to |
|---|---|---|
Default |
Read-only |
— |
Project |
Yes |
|
Draft override |
Yes (no Active Profiles) |
|
Run override |
Yes (needs a run selected) |
under the run directory |
Draft overrides are reported with run-layer provenance (source: run) by design — see STORAGE.
Common vs advanced knobs¶
Charts overview (Configuration, edit mode): master enable (
dashboard.overview_enabled, off by default) plus checkbox + ordered list fordashboard.overview_charts. When enabled, empty list → registry defaults for the run kind (transcript vs group). See group_charts_default_overview.md.Common Settings are a curated allowlist (
COMMON_SETTINGS_SCHEMA): models, semantic similarity, a few workflow/output/display keys.Speakers:
analysis.allow_unnamed_speakers— when on, analysis runs on diarized labels (SPEAKER_00, …) without naming; default off. Per-run override: Run Analysis checkbox.
Advanced/raw exposes every registered config leaf (except profile activation keys). Registry fields may mark
advanced=Truefor documentation; the GUI does not yet use that flag to partition the form — the toggle is the partition.Prefer Common or Analysis presets unless you know why a leaf matters.
Smart rename and rename forms¶
Settings → Configuration → Rename (also under Advanced as input.*):
Knob |
Default |
Meaning |
|---|---|---|
|
|
|
|
|
Deterministic template rendered from the recording datetime |
|
|
Legacy YYMMDD_ + stem prefill when smart mode is |
|
|
|
|
|
Default case for rename token buttons and the new file name field: |
|
|
Transcript date/title cues when suggestions run ( |
|
|
Optional local LLM pass when suggestions run in auto mode (Ollama; model from Settings → Models → |
|
|
Optional web lookup for public-event-like files (short DuckDuckGo query only; not the transcript body). Tries |
|
|
Effort tier for the rename-suggestion LLM pass ( |
Supported pattern tokens: {yymmdd}, {yyyymmdd}, {yyyy}, {yy}, {mm}, {dd}, {hhmmss}, {hhmm}, {hh}, {period} (morning/afternoon/evening/night), {n} (collision sequence), {stem}, {title} (slug from transcript/LLM/web title cues).
Device stems understood include RYYYYMMDD-HHMMSS, YYYYMMDDHHMMSS, and YYMMDD-HHMMSS, plus messaging-app and field-recorder patterns parsed in code (smart_name.py).
Rename form prefill (smart + titles)¶
On Rename Transcript and import rename (when smart_rename_mode is not off):
Device-style filename — prefills the date root (
YYMMDD_) from the recording filename or file mtime when needed. Optional clickable token:{period}(morning/afternoon/evening/night) to append to the new name.Descriptive title (already a human-readable stem, not a device pattern) — prefills
YYMMDD_plus an underscore-separated version of the current title (spaces, hyphens, and CamelCase split into words). Word token buttons help edit the title portion; common stopwords are omitted from buttons only.
Legacy prefill_rename_with_date_prefix still applies when smart rename is off.
Content rename suggestions (assistive)¶
The rename form always shows Suggest names (transcript + LLM) (or transcript only when Ollama is off). That button runs the suggestion service on demand and fills Suggested names, even when input.rename_content_suggestions is off.
When input.rename_content_suggestions is auto, the same service also runs when you open the form: transcript date and title cues (default on), optional local LLM (rename_suggestions consumer; effort via input.rename_suggestions_effort), and optional web lookup for eligible filenames, dialogue, or long descriptive title stems (short DuckDuckGo queries, YouTube-biased first — never the transcript body). If the current stem already looks like a descriptive title, its underscore form is always included (and preferred) in Suggested names. The top-ranked full stem is prefilled and alternatives appear in Suggested names; nothing is written until you submit Rename. Event dates from transcript/web/LLM beat the file’s download/mtime date (shown as “file date, not the event date”). With no event date, a title-only stem may be offered without inventing a YYMMDD_ from file time. Results are cached under {data_dir}/.cache/rename/. auto_import smart rename on import stays filename-only.
“Profile” taxonomy (do not conflate)¶
Name |
Meaning |
Surface |
|---|---|---|
Install profile |
|
|
Analysis UI preset |
Quick / Balanced / Thorough module sets |
Run Analysis + Settings → Analysis |
Module / workflow profile |
Named JSON under |
Profiles page + Active Profiles in Configuration |
In-config semantic profiles |
Mapping |
Advanced config / code — shares activation key naming with disk profiles; different store |
UI layout profiles |
Ordered blocks for Overview / Insights |
Settings → Dashboard Builder ( |
STT command profiles |
Named JSON under |
Transcribe Audio |
Merge source profile |
Match + day/gap rules for Tools → Merge suggestions / auto-merge |
Merge tab expander; |
Merge dismissed groups |
Auto-merge Don’t suggest again keys (rule + stem) |
Auto-merge tab; |
Speaker profile |
Longitudinal identity (+ optional voice) |
Settings → Speakers — see Speakers |
Tracked files under repo data/profiles/*/default.json are fixtures / allowlisted samples. Runtime defaults are virtual (dataclass/Pydantic); ProfileManager does not treat disk default as loadable user presets. Runtime profiles live under {config_dir}/profiles/ (override with TRANSCRIPTX_PROFILES_DIR).
Env overrides¶
Copy .env.example to .env. Infra path keys (TRANSCRIPTX_*_DIR, host/port, downloads, …) are separate from config-bag overrides. Set TRANSCRIPTX_CONFIG_STRICT=1 to reject unknown TRANSCRIPTX_* keys.
Legacy TRANSCRIPTX_AUDIO_*_ENABLED variables are rejected — use the corresponding *_MODE keys.
Speakers¶
Settings → Speakers controls the Speakers directory filters and optional local voice matching. Canonical files live under speaker_profiles/ (STORAGE.md, speaker_profiles_v1).
Directory toggles (session): include ignored appearances in headline totals; show archived; show merged. Speakers “show archived” is for profiles. Transcript library archive is on Library (inspector Archive / Unarchive, plus Include archived transcripts on Library and Search) — not a Settings toggle. See STORAGE.md.
Local voice matching (optional extra speaker_match):
Read the privacy notice and enable matching. Consent is
privacy.voice_settings.json. Defaults off. Opt-in enrols nothing.Set Max confirmed links per voice enrol (default 40) if you need a larger bootstrap.
Enrol trusted voice for all profiles — reference samples from every active profile that already has confirmed links. Per-profile enrol also exists on the Speakers Voice & lifecycle tab.
Pre-load voice suggestions — analyse every non-ignored managed occurrence into
.cache/voicefor Speaker Identification. Speaker ID Analyse all speakers does the same for the open transcript only.
Order: name and link a seed cast → Enrol all → Pre-load → confirm suggestions in Speaker Identification. Empty corpus → analyse succeeds with no match. Scores never auto-name. Full walkthrough: Assist naming with voice.
Assistive LLM suggestions (name dropdowns, rename prefills) can be warmed library-wide from Settings or cron — see llm-suggestion-batch.md. Distinct from voice pre-load above.
Keyword lists (STT)¶
Settings → Keywords stores named term lists (acronyms, product names) under {PROFILES_DIR}/keyword_lists/. They are not project-config registry knobs and are not Corrections known_acronyms.
On Transcribe Audio, Keyword biasing is off by default. When enabled, the selected list plus extra terms are passed to Granite Speech at decode time (cap 2,000). Whisper providers ignore the lists in this version.