{% extends "base.html" %} {% from "_macros.html" import empty %} {% block title %}New collection — Video to LLM{% endblock %} {# Defaults rather than hard dependencies: Jinja reloads templates from disk per request while route code lives in process memory, so a new template can be served against an older route's context. #} {% set candidates = candidates | default([], true) %} {% set problems = problems | default([], true) %} {% block content %}

New collection

Nothing is processed again. This reuses work you have already done.

{# These five used to be a decorative header above a single flat form, two of whose steps had no interface at all. They are links to the real sections now. A label that names a step the page does not have is the same failure as placeholder data: it describes something that is not there. #} {% if problems %} {% endif %} {% if not candidates %}
{{ empty("No processed videos yet.", "Run a job first, or bring in earlier work.") }}
{% else %}
{# The user's explicit order. Never inferred from filename, date, or content. #}

1 · Name it

2 · Choose the videos

{% for candidate in candidates %} {% set source = candidate.source %} {% endfor %}
Videos available to include
Include VideoLength VersionWorth knowing
{{ source.display_name }} {{ status.format_duration(source.duration_seconds) }} {# The value carries both ids: the checkbox names the video, this names which processed version of it to pin. One fixed field name for every row, rather than a field name generated per video. #} {% if candidate.versions | length > 1 %} {% else %} v{{ source.source_version }} {% endif %} {% if source.has_warning %} {{ source.warning_label }} {% else %} Ready {% endif %}

Anything marked can still be included — you are just told what is imperfect about it first. A collection pins the version you choose here: processing a video again later makes a new version and leaves this collection alone.

3 · Set the order

They are read in this order. Drag them, or use the buttons — the order is yours and is never guessed from the filenames or the dates.

    Nothing chosen yet. Tick a video above and it appears here.

    {# Announced rather than only shown: a move made with the keyboard has to be confirmable without seeing the list redraw. #}

    4 · Choose the shape

    What shape should the result be?
    {# Three numbers with no units and no reason given. "200000" of what, held back from what, and why that number — none of it was on the screen, and all three change what the build produces. #}

    In tokens — very roughly a short word each. This is your model's context window: how much it can be given at one time. 200,000 is common; check the figure for the model you actually use.

    Kept free inside that limit for your question and the model's answer. A part that fills the window exactly leaves no room to reply.

    Recorded with the collection so you can tell later what it was sized for. It changes nothing about how the parts are cut.

    Off by default. Cuts land on a natural break, never mid-sentence, and each part repeats a little of the one before so the thread is not lost.

    5 · Check and build

    Choose a video to see what you get.

    {# What the size figure is, and — more usefully — what it is not. It is a raw count of every character in the document, converted at a fixed ratio. Two things follow that the number alone does not say, and both change how someone should read it. First, it is not a real tokenisation. Every model counts differently and this is deliberately a documented ratio rather than a per-model tokeniser, which would be a second implementation to keep correct for every provider. Second, and the part people are most often surprised by: this is the size of what you hand over, not the work the model does with it. A model given a large document does not have to read all of it evenly — it can search it, skim it, and quote the parts that matter. On this product's own output that gap is wide, because the per-picture descriptions are most of the bulk and the transcript is most of the meaning. Saying so is more honest than letting a large number read as a large cost. #}
    What does the size figure mean?

    It is a raw estimate of the whole document: every character counted and divided by a fixed ratio — about {{ chars_per_token }} characters per token. It is not a real tokenisation — each model counts a little differently — so treat it as a guide for what will fit, not an exact figure.

    It is also the size of what you hand over, not the amount a model has to read. A model given a long document can search it, skim it, and use only the parts that answer your question, so the effort of an answer is usually far smaller than this number suggests.

    That gap is wide here in particular. The picture descriptions are most of the length and the spoken transcript is most of the meaning, so a collection that looks far too big to use is often mostly detail a model will pass over. Sizing the parts to fit is still worth doing — it is what stops a paste being refused — but a large total is not by itself a reason to include less.

    Cancel

    Building is free, happens on this computer, and takes seconds. Nothing is processed again and nothing is sent anywhere.

    {% endif %} {% endblock %} {% block scripts %} {% endblock %}