{% extends "base.html" %} {% block title %}Dedup — alembic{% endblock %} {% macro candidate_rows(c, mode) %} {% if c.same_title %}
{{ c.keep.title }}
{% else %}
{{ c.keep.title }} / {{ c.delete.title }}
{% endif %} {% if c.same_artist and c.same_album and c.keep.album %}
{{ c.keep.artist }} · {{ c.keep.album }}
{% elif c.same_artist %}
{{ c.keep.artist }}
{% else %}
{{ c.keep.artist }} / {{ c.delete.artist }}
{% endif %} {% if mode == 'pending' %} {% endif %} {{ c.pass_label }}
{{ c.keep.ext or '?' }} {% if c.keep.size_bytes %}{{ (c.keep.size_bytes / 1024 / 1024) | round(1) }} MB{% endif %}
{{ c.keep.display }}
{{ c.delete.ext or '?' }} {% if c.delete.size_bytes %}{{ (c.delete.size_bytes / 1024 / 1024) | round(1) }} MB{% endif %}
{{ c.delete.display }}
{% if mode == 'pending' %}
{% else %}
{% endif %} {% endmacro %} {% block content %} {% if request.query_params.get('started') %}
Scan started. It runs in the background; reload this page in a bit to see new candidates, or watch its progress under Jobs.
{% endif %}

Pending candidates

Song title up top so you can scan straight down the list; the actual file path is always shown underneath each side so you can check they're really the same file before confirming.

{% for c in candidates %} {{ candidate_rows(c, 'pending') }} {% else %} {% endfor %}
Caught byKeepDeleteAction

No pending candidates. Run a scan.

{% if candidates %} {% endif %} {% if ignored %}

Kept both

Marked as legitimate alt copies -- future scans skip these pairs.

{% for c in ignored %} {{ candidate_rows(c, 'ignored') }} {% endfor %}
Caught byKeepDelete
{% endif %} {% endblock %}