{% extends "base.html" %} {% from "fragments/export_menu.html" import export_menu %} {% block title %}Voxint — {{ media_label }}{% endblock %} {% block cb_breadcrumb %}media / {{ media_label|lower|replace(" ", "-") }}{% endblock %} {% block cb_summary %} {%- if progress.total > 0 -%} {{ progress.verified }}/{{ progress.total }} verified {%- elif selected_run -%} {{ selected_run.status }} {%- else -%} no runs {%- endif -%} {% endblock %} {% block body %} {# Media detail page with the editor island (Console 2.0 P3a/P3b, issues #156/#157). Renders run metadata, a run chooser, and — when a completed run is selected — the media-editor island with a server-rendered transcript table as JS-off fallback. #}
{# ---- Main column: transcript or empty state ---- #}
{% if selected_run and island_props %} {# Media editor island (#157). The server-rendered table inside is the JS-off / hydration-failure fallback. #}
{% if not token %}

Read-only view. Claim this run to edit.

{% endif %} {% for seg in island_props.segments %} {% endfor %}
Time Speaker Text
{{ "%.1f"|format(seg.start) }}s {{ seg.speaker or seg.label or "—" }} {{ seg.text }}
{{ export_menu(selected_run) }}
{% elif selected_run %}

Run {{ selected_run.id.hex[:8] }} is {{ selected_run.status }}. The transcript will be available once the run completes.

View run details

{% else %}

No runs for this media file yet.

Back to the library

{% endif %}
{# ---- Side rail: run chooser and media info ---- #}

Media

File
{{ media_label }}
{% if detail.media.duration_seconds is not none %}
Duration
{{ format_duration(detail.media.duration_seconds) }}
{% endif %} {% if detail.media.size_bytes is not none %}
Size
{{ format_size(detail.media.size_bytes) }}
{% endif %}
{% if detail.chooser %} {% endif %}
{% endblock %}