{% extends "base.html" %} {% block title %}Job · {{ job.original_filename }}{% endblock %} {% block content %}
{{ job.original_filename }}

Settings

  • Voice: {{ job.voice }}
  • Language: {{ options.languages.get(job.language, job.language) }}
  • {% if job.voice_profile %}
  • Voice profile: {{ job.voice_profile }}
  • {% endif %}
  • Speed: {{ '%.2f' | format(job.speed) }}×
  • Subtitle mode: {{ job.subtitle_mode }}
  • Audio format: {{ job.output_format }}
  • Subtitle format: {{ job.subtitle_format }}
  • GPU: {{ 'Yes' if job.use_gpu else 'No' }}
  • Save chapters separately: {{ 'Yes' if job.save_chapters_separately else 'No' }}
  • Merge at end: {{ 'Yes' if job.merge_chapters_at_end else 'No' }}
  • Separate chapter format: {{ job.separate_chapters_format|upper }}
  • Silence between chapters: {{ '%.1f'|format(job.silence_between_chapters) }}s
  • Chapter intro delay: {{ '%.1f'|format(job.chapter_intro_delay) }}s
  • Title intro: {{ 'Yes' if job.read_title_intro else 'No' }}
  • Closing outro: {{ 'Yes' if job.read_closing_outro else 'No' }}
  • Normalize chapter openings: {{ 'Yes' if job.normalize_chapter_opening_caps else 'No' }}
  • Prefix chapter titles: {{ 'Yes' if job.auto_prefix_chapter_titles else 'No' }}
  • Max words per subtitle: {{ job.max_subtitle_words }}
  • Project folder: {{ 'Yes' if job.save_as_project else 'No' }}
  • Chunk granularity: {{ job.chunk_level|replace('_', ' ')|title }}
  • Speaker analysis threshold: {{ job.speaker_analysis_threshold }}
  • Generate EPUB 3: {{ 'Yes' if job.generate_epub3 else 'No' }}

Status

{{ job.status.value|title }}

Created: {{ job.created_at|datetimeformat }}

Started: {{ job.started_at|datetimeformat }}

Finished: {{ job.finished_at|datetimeformat }}

Characters: {{ job.processed_characters }} / {{ job.total_characters or '—' }}

{% set flags = downloads or {} %} {% if flags.get('m4b') %}

Download M4B

{% elif flags.get('audio') %}

Download audio

{% endif %} {% if flags.get('epub3') %}

Download EPUB 3

{% endif %} {% if job.status in [JobStatus.PENDING, JobStatus.RUNNING, JobStatus.PAUSED] %}
{% elif job.status in [JobStatus.COMPLETED, JobStatus.FAILED, JobStatus.CANCELLED] %}
{% endif %}
{% set analysis = job.speaker_analysis or {} %} {% if analysis %} {% set preview_template = options.speaker_pronunciation_sentence or "This is {{name}} speaking." %}
Speaker analysis

Summary

{% set stats = analysis.get('stats', {}) %}
  • Total chunks: {{ stats.get('total_chunks', '—') }}
  • Explicit dialogue chunks: {{ stats.get('explicit_chunks', '—') }}
  • Active speakers: {{ stats.get('active_speakers', '—') }}
  • Unique speakers observed: {{ stats.get('unique_speakers', '—') }}
  • Suppressed speakers: {{ stats.get('suppressed', 0) }}

Detected speakers

{% set speakers = analysis.get('speakers', {}) %} {% set narrator_id = analysis.get('narrator', 'narrator') %} {% if speakers %}
    {% for speaker_id, payload in speakers.items() if speaker_id != narrator_id and not payload.get('suppressed') %} {% set spoken_name = payload.get('pronunciation') or payload.get('label') or speaker_id|replace('_', ' ')|title %} {% set preview_text = preview_template | replace("{{name}}", spoken_name) %}
  • {{ payload.get('label', speaker_id|replace('_', ' ')|title) }}
    {{ payload.get('count', 0) }} chunks Confidence: {{ payload.get('confidence', 'low')|title }} {% if payload.get('pronunciation') %} Pronunciation: {{ payload.get('pronunciation') }} {% endif %}
    {% set quotes = payload.get('sample_quotes', []) %} {% if quotes %}
    Sample quotes
      {% for quote in quotes %}
    • {{ quote }}
    • {% endfor %}
    {% endif %}
  • {% endfor %}
{% else %}

No additional speakers detected.

{% endif %} {% set suppressed = analysis.get('suppressed_details') or analysis.get('suppressed', []) %} {% if suppressed %}

Suppressed speakers: {% if suppressed[0] is string %} {{ suppressed | join(', ') }} {% else %} {{ suppressed | map(attribute='label') | join(', ') }} {% endif %}

{% endif %}
{% endif %} {% include "partials/logs_section.html" %} {% endblock %} {% block scripts %} {{ super() }} {% endblock %}