{% extends "base.html" %} {# The calibration view — the one Mesopic page that puts a frame on screen (§13). The snapshot is fetched from a route that answers `Cache-Control: no-store`, drawn under an SVG overlay, and forgotten when the tab closes. Nothing here uploads it and nothing here writes it: what leaves this page on save is normalized geometry, which is why the picture is disposable and why a resolution change does not invalidate the work. Geometry is drawn in the overlay's own 0..1 coordinate space via `viewBox`, so a point is stored exactly as it is drawn and the browser does the scaling. There is no pixel arithmetic on the save path at all — the only conversion is the pointer position, and it divides by the element's own box. #} {% block scripts %}{% endblock %} {% block title %}Calibrate {{ camera.name }} — Mesopic{% endblock %} {% block heading %}{{ camera.name }}{% endblock %} {% block subtitle %} One still, held in memory for as long as this tab is open. It is never written to disk, never uploaded, and never stored — what you save is the geometry, not the picture. {% endblock %} {% block content %}
{# The ids this camera already uses, so a redraw keeps the name its labels point at rather than minting a fresh `line-1`. Ids are `[A-Za-z0-9_-]+`, so comma-joining them needs no escaping. #}
Still from {{ camera.name }}, for drawing on
{# The consequence of P3.8's close-before-swap, said before the click rather than discovered afterwards in the dwell chart. #}

Saving reloads this camera's geometry immediately. Everyone standing in a zone right now is counted out and re-enters, so dwell and occupancy will show a break — prefer a quiet moment over a busy one.

{# Revealed by a 401 from the save, never on load. A new tab rather than a link away: the drawing lives in this page until a save lands, so navigating off it would discard exactly the work the operator is trying to keep. #}

On this camera

{% endblock %}