FLUX DOCUMENTATION SYSTEM Layer 4 — INFRASTRUCTURE | generator flux.dantesisofo.com/wiki/generator/
There are two distinct FLUX generators. They are not interchangeable.
The personal generator is the core production tool that converts a session of original photographs into a complete FLUX issue, assigned to the permanent personal chronological archive.
Canonical photo count: 36 photographs per issue.
What it does:
timeline.json, issue page HTML, explore.htmlWhat it does not do:
The generator is a translation machine. Originals in. Publication out.
Invocation:
python3 generate_flux_issue.py 305 # generate issue 305
python3 generate_flux_site.py # rebuild site
python3 deploy_s3.py --bucket flux-dantesisofo --issues 305 --cloudfront E1QJZ6W1R67CZD
The public generator is a separate tool accessible at:
https://flux.dantesisofo.com/generator/
It allows any photographer to run the FLUX protocol on their own photographs without requiring access to Dante Sisofo's personal archive or file system.
Status: Live. Launched 2026-05-12. Browser-based, no installation required.
Canonical photo count: 36 photographs per issue.
The 36-frame count is not a default — it is the standard. It is the same for personal issues and public issues.
Implementation:
Image system:
createImageBitmap({ imageOrientation: "from-image" }) — portrait images stored as landscape with EXIF rotation tag are correctly oriented before processingeffectiveGridH computed per-batch from minimum width-limited landscape height — adapts to 3:2, 4:3, or mixed batches automaticallyIMG_SCALE = 0.98 applied to all drawn image dimensions — 2% optical reduction, centering anchor unchanged, adds ~2.2 mm breathing room per horizontal edgeDownload system (mobile Safari):
The generator uses a Service Worker (/generator/sw.js) to deliver the generated PDF as a native file download on all devices, including iOS Safari. This prevents the PDF from opening in a new browser tab. The page remains visible throughout the download. The Service Worker activates automatically on first visit and is transparent to the user.
Gutter margins:
Generated PDFs use canonical spread-aware gutter margins (inner margin = 1.375 in, outer margin = 0.875 in, mirrored recto/verso) to compensate for the stapled binding. This is identical to the margin system used in personal FLUX volumes and public catalog PDFs. See ZINE SPECIFICATION for the full PDF structure specification.
Output difference from personal generator:
The public generator does not assign issue numbers from Dante Sisofo's personal chronological sequence. Public generator output is a standalone artifact — a complete FLUX issue, submitted for inclusion in the public catalog, not the personal archive.
Catalog entries are numbered CAT_001, CAT_002, and so on — a separate sequence from FLUX_001, FLUX_002. See PUBLIC CATALOG for the full distinction and submission process.
Before photographs are formally assigned to a numbered issue, they enter the FLUX Queue.
The queue is a staging area inside FLUX_ISSUES/FLUX_QUEUE/. Photographs in the queue have been processed (renamed, derivatives generated, manifests built) but have not yet received an issue number.
The queue is visible in the public archive as an unnumbered stream of recent work. When the queue contains 36 photographs for a session, a new numbered issue is published.
Workflow:
FLUX_UPLOAD/./flux_update.commandThe QR code structure differs between personal archive issues and public generator issues.
QR 1 — Protocol page (p.03), bottom-right:
Target: https://flux.dantesisofo.com/generator/
QR 2 — Manifest page (p.43), bottom-left:
Target: https://flux.dantesisofo.com/issues/FLUX_NNN/
Personal issues carry both QRs. The protocol QR is a standing invitation to any reader. The manifest QR connects the physical object to its permanent digital record.
QR 1 — Protocol page (p.03), bottom-right:
Target: https://flux.dantesisofo.com/generator/
The public generator embeds the protocol page QR only.
The manifest page (p.43) is present and contains the full frame list — timestamps, GPS coordinates, frame numbers. It is documentation. It does not carry a QR code.
Reason: The public archive infrastructure does not yet exist. Placeholder or optional manifest QR behavior — user-provided URLs, generator redirects, blank spaces — creates inconsistent printed artifacts and premature infrastructure complexity.
Public generator output = downloadable issue only.
No automatic publishing. No manifest QR.
The public generator feeds into the public FLUX catalog.
After generating, the photographer fills in a submission form — name, email, title, date range, location, optional description — and submits. The issue uploads automatically.
Every submission is reviewed before publication. If approved, the issue receives a permanent catalog number (CAT_NNN) and a catalog page at flux.dantesisofo.com/catalog/CAT_NNN/. The photographer receives an email with their catalog page URL and PDF link.
The catalog page contains the full image sequence, contact sheet, downloadable PDF, and frame index — the same structure as a personal issue page.
Public generator output = complete FLUX issue, submitted to the catalog.
Catalog entries are permanent once published.
See PUBLIC CATALOG for the full submission process and the distinction between the personal archive and the catalog.
The FLUX system has operated under three different frame-count logics. These are distinct implementations, not variants of the same protocol.
Context: Experimental specification for an early public generator concept.
Status: Superseded. Never built or deployed.
Not part of the canonical FLUX protocol.
This count was chosen arbitrarily as a lower barrier for public participation. It produced a 22-page PDF. The logic was never implemented in a working generator. The specification is documented here only for historical completeness.
Context: The original personal archive queue logic. Dante Sisofo's first 304 issues were generated using this batch size.
Status: Historical. No new issues will be generated at 50 frames.
Not the canonical protocol — a production artifact of the early system.
This count was not derived from any photographic tradition or formal constraint. It was a working batch size chosen for the personal archive pipeline. It produced a 58-page PDF with a 10×5 contact sheet grid (50 cells for 50 frames). The grid was portrait-oriented, meaning landscape and portrait thumbnails rendered at different heights — the grid lock did not hold.
Context: Current and permanent standard for all FLUX issues — personal and public.
Status: Locked. All future generators use this count.
This is the protocol.
36 = one roll of 35mm film. The constraint is not arbitrary — it comes from the physical medium FLUX references. It produces a 44-page PDF, a 6×6 contact sheet grid (36 cells for 36 frames), and a clean spread sequence with no orphaned pages.
The 6×6 grid is the correct geometry for 36 frames. Both landscape and portrait thumbnails are height-limited in the cell, so all 36 frames render at the same height — the same grid lock that governs full-page image placement extends to the contact sheet.
Personal archive:
FLUX_001 FLUX_002 ... FLUX_NNN
Canonical filename format:
YYYY-MM-DD_HH-MM-SS_PhotographerName_OriginalCameraFilename.JPG
Example:
2026-05-07_20-40-55_DanteSisofo_R0022598.JPG
Collaborative project filenames:
{project-slug}_NNN_{photographer-slug}_{YYYY-MM-DD}_{HH-MM-SS}.jpg
| Document | Layer | Relationship |
|---|---|---|
| ZINE SPECIFICATION | Layer 2 — Protocol | The PDF format the generator produces |
| ARCHIVE | Layer 2 — Protocol | The archive the generator deploys to |
| CATALOG | Layer 4 — Infrastructure | The public catalog the public generator feeds |
| BOOTSTRAP | Layer 4 — Infrastructure | The autonomous ingest pipeline that extends the generator |
| INTELLIGENCE | Layer 5 — Intelligence | The keeper model that will automate generator input selection |
FLUX_WIKI_v1.3 — flux.dantesisofo.com/wiki/generator/ — updated 2026-05-16