{% extends "base.html" %} {% from "fragments/_chips.html" import chip %} {% from "legacy_runs/_run_row.html" import run_row %} {% from "legacy_runs/_live_poller.html" import poller %} {% block title %}Voxint — runs{% endblock %} {% block cb_breadcrumb %}runs /{% if show_archived %} archived{% endif %}{% endblock %} {% block cb_summary %} {%- if show_archived -%} Archived runs. Back to active {%- else -%} {{ pipeline_summary }} · Pipeline status {%- endif -%} {% endblock %} {% block cb_actions %} {% if shell.can_write %} {% if shell.media_enabled %} + Add media {% else %} + Add media {% endif %} {% endif %} {% endblock %} {% block body %} {% if not shell.media_enabled and shell.can_write %}

ADD MEDIA

{% if ytdlp_enabled %}

Fetching a URL lets the downloader contact other sites, including ones a link redirects to. If you fetch links you don't fully trust, run the restricted URL-download overlay (compose.ytdlp-egress.yaml) — see the operations guide, “URL ingestion & egress security”.

{% else %}

URL ingestion is disabled.

{% endif %}
{% endif %} {% for d in degraded %} {% endfor %} {% if dashboard %} {% include "legacy_runs/_progress_strip.html" %} {% endif %}

RUNS

{% if queue_paused %} {% elif not show_archived %}
{% endif %} {# Collapsible filter bar: closed by default, auto-opens when any filter is active. #} {% set has_active_filters = status or review or filters.q or filters.speaker_id or filters.source or filters.created_from or filters.created_to or filters.language %}
Filter{% if has_active_filters %} (active){% endif %}
{% if show_archived %}{% endif %} {% if active_view != LifecycleView.ALL %}{% endif %} {% if has_active_filters %} Clear {% endif %} {% set has_more_filters = filters.q or filters.speaker_id or filters.source or filters.created_from or filters.created_to or filters.language %}
More filters{% if has_more_filters %} (active){% endif %}
{% if not page.items %}

No runs match{% if has_active_filters %} these filters{% endif %}{% if active_view != LifecycleView.ALL %} in this view{% endif %}.

{% else %}
MEDIA STATUS REVIEW LANGUAGE TOOK CREATED
{% if grouped_items is not none %} {# Failed tab: grouped rendering with bulk-retry forms. #} {% for entry in grouped_items %} {% if entry.error_label is defined %} {# FailedRunGroup: summary row with bulk retry form. #}
{{ entry.error_label }}
{{ entry.items|length }} failed runs
Failed × {{ entry.items|length }} {{ format_age(entry.items[0].created_at, now=now) }} {% set batch = entry.items[:100] %}
{% for it in batch %} {% endfor %}
{% else %} {# Singleton failed run: normal row. #} {{ run_row(entry, none, now, csrf_requeue) }} {% endif %} {% endfor %} {% else %} {# Non-Failed tabs: standard row rendering. #} {% for it in page.items %} {{ run_row(it, stage_progress.get(it.run_id), now, csrf_requeue) }} {% endfor %} {% endif %}
{% endif %} {% if grouped_items is none and not show_archived and live_ids %} {{ poller(live_ids, poll_seconds) }} {% endif %} {% if next_url %}

Older →

{% endif %}
{% if aux_jobs %}
OTHER TASKS ({{ aux_jobs|length }})

Recent asset, translation, voice sample, and research jobs. These run alongside the pipeline and never block it.

KIND DETAIL STATUS TARGET CREATED
{% for job in aux_jobs %}
{{ job.family }} {{ job.detail or "—" }} {{ chip(job.status) }} {% if job.family == "research" and job.speaker_id %}speaker {{ job.speaker_id.hex[:8] }} {% elif job.pipeline_run_id %}run {{ job.pipeline_run_id.hex[:8] }} {% elif job.speaker_id %}speaker {{ job.speaker_id.hex[:8] }} {% else %}—{% endif %} {{ format_age(job.created_at, now=now) }}
{% endfor %}
{% endif %} {% if dashboard %} {% endif %} {% endblock %}