Where Each ALE Column Comes From
SlateX writes an ALE as tab-delimited text: a file-level header, one column-name line, one line per clip. These columns do not share one kind of provenance — some values were transcribed on set, some were already stored in the record, some are assembled by the software, and one family holds text that exists but cannot ship. A missing value here has a single appearance: empty. When a file arrives, ask where each cell came from before deciding what checking work it can carry.
Hand-written values, software-assembled identifiers and empty cells coexist in the same row; the grid does not tell them apart for you.
Read the header as file-level claims, not per-row facts
The header states the delimiter, picture format, audio format, a global tape name and a frame rate. VIDEO_FORMAT lands on a raster tier only when a camera’s resolution was recorded. The AUDIO_FORMAT line is written but left empty, because the record holds no audio sample-rate reading — filling it with a software constant would declare a sound specification for media we never measured. The global FPS takes the most-declared rate among rows that declared one, and stays empty if no camera declared. The global TAPE is written only when the whole batch maps to one real card; with several cards it is left to the per-row cells, and with none transcribed it is omitted.
These are file-level single values, not per-row truth. Each row carries its own FPS, and the two can disagree.
Identity columns: one source, four shapes
Name is the clip name, held to 31 characters and to ASCII. It takes the roll-plus-clip name of the camera on that row, and only when the take has no camera row at all does it use a name the take already has — the shot name if one was recorded, otherwise the scene number, and failing that the shot number, with the take number appended — the same string on every export, with no promise that two rows will differ; take numbers are typed in, so verify identity row by row. It is a marker, not a file key.
Most of the cells used to recognise source media follow the card number you typed, each in a different shape; Soundroll is the exception. Tape needs the whole card name to be ASCII letters and digits before it upper-cases and cuts at 31; a non-Latin character, a space or a hyphen empties the cell, and we will not pick characters out to build a number you never wrote. Camroll carries that same card and needs it pure ASCII, so a card name with non-Latin characters leaves that cell empty. Reel # is contracted as numeric, so a card name containing any letter empties it — we do not strip a prefix to manufacture a number. Soundroll carries the roll number from the sound ledger through the same ASCII gate, but it is a separate source from the card. When a card name holds non-Latin text, those three cells go blank together: one source lost, three cells, not three unrelated events. Tape, Reel # and Camroll share one origin — the card number; Soundroll has its own. The four are not independent identity signals.
The display number the software counts — a camera letter plus a three-digit increment — corresponds to no physical card: it reaches the human-readable columns of CSV and PDF and travels inside the ALE Name as part of the file name, but it does not enter the cells used to recognise a source — Tape, Reel # and Camroll take the transcribed card number. Camera is the camera label, limited to those 26 letters.
Time columns: both readings are typed by hand, and the span comes from them
Start takes the one in-point timecode this row holds; there is no second column to fall back to. A string failing a shape or range check ships empty. You will not see 00:00:00:00 in this file: that string’s fault was looking legal, leaving receivers unable to tell a genuine on-set zero from a padded one.
End takes the out-point stored on the record, and the record has two ways to get it: the recording chain captures the reading on the screen at the moment of stop, while the new-take and edit-take pages each hold an out-point box the supervisor can copy off the camera. Neither happened, nothing ships: we do not advance an in-point by a duration to fill it, which would pass off a calculated number as the reading on the camera. An empty cell surfaces on the reconcile sheet as TC_OUT_MISSING, judged as: in-point present, out-point absent.
This cell recognises a reading taken on set. No reading, no cell — rather than a calculated stand-in.
Duration is no longer the stopwatch figure. The column is the frame-accurate span between the two on-screen readings, tail frame excluded, so it equals End − Start; miss either reading and the cell ships empty — the span is a derived value and must be reviewed as one. That same span is the read-only “TC duration” on the take’s screen; the “Scene duration” the supervisor types travels in its own appended column, SlateX Set Time, side by side with Duration: preroll, the slate and a director who rolls early all sit inside the stopwatch, so the two numbers differing is a set norm rather than somebody’s mistake, and the reconcile sheet flags that case as DURATION_MISMATCH without changing any value. FPS has a value only when that row declared a rate; the column never shows a rate this camera did not report. TC Mode can hold one token only, DF; blank means no drop-frame declaration, which is not non-drop-frame. Only rows declaring DF write Start, End and Duration with semicolons, and the header states verbatim that this is our display convention. Sound TC goes over as written: shape judged, frame positions never trimmed.
Text columns: flattened first, then gated
Description joins whatever the scene summary, shot description and shot notes already hold, with a fixed separator. Comments comes from take notes, Camera Notes from the camera record, and Director from the shooting day the take belongs to. All four travel one road: line breaks and tabs are flattened to spaces, then an ASCII gate applies — a value carrying non-Latin characters ships as an empty cell, verbatim in the CSV and the PDF.
So a blank here can mean two different things: never recorded, or recorded in text this file cannot carry. The reconcile sheet will not resolve the second case — it judges whether the record holds a value — so those columns get checked against what you actually typed.
State and the rest: the mark is in the file, the track token is not a channel map
Rating carries the on-set mark as text — Circle, Keep, Hold, N/G, always English and never following the interface language — and is empty when no mark was left. Circled take carries TRUE or FALSE; that is a second question, so it gets a second column. Tracks is a four-form token: V for MOS, A1A2 for a wild track, VA1A2 for sync sound, and an empty cell as the fourth form — written run together, with no spaced V A1 A2 form; a row with no sound fact stays empty rather than defaulting to sync. It is a track marker, not a channel map, and it carries no sample rate. What the Tracks token leaves unsaid is covered in What the Tracks Column Does Not Tell You. VFX_Type assembles that camera’s four flags; VFX_Count exists as a column but has no manual field; only the bundled demo projects bring a value, and it stays empty otherwise. The shooting day has no column of its own; the date has its own Shoot date column (yyyy-MM-dd), and the unit sits in Unit.
What this ALE carries, and what it plainly does not
It carries: Source File Name and Source File as two text cells — the second is folder text, not a relinkable media address — card and sound roll, sound timecode, the mark and the circled flag, scene and take numbers, unit and date, the out-point read on set — captured at stop or copied off the camera — and “Scene duration” in its own column. It does not carry: the media itself, lens parameters beyond timecode (focal length, ISO, aperture, shutter and resolution exist in the app but have no column here), a channel map, or the two ASC columns. The link between a take and a file travels only with what you registered: a row whose source file name was recorded in ASCII carries that row’s scene number, take number and the file name and folder for its camera, while rows with nothing recorded, with a per-camera name missing on a multicamera take, or with a value emptied because it was not ASCII carry no such link — which take belongs to which clip stays a job recorded on set.
Three column names are ours, and the product name inside them says so: SlateX Description, SlateX Comments, SlateX Set Time. Those three cells are our own fields, prefixed precisely so they do not pose as generic columns — no receiver should be assumed to read them as semantic fields. Check column names against the strings actually present in the file: a near-synonym in your template is not guaranteed to map onto the same field.
FAQ
Do Reel # and Tape verify each other?
No. Both derive from the single card number you transcribed, each behind its own gate (all-digits, all-ASCII-alphanumeric). Agreement between them says one source was written twice.
Is End recorded on set?
Only if somebody read it down. Two paths put a value there: the recording chain captures the screen reading at stop, and the supervisor can copy it off the camera into the out-point box on the take’s pages. Read it, the cell ships; missed it, the cell stays empty and TC_OUT_MISSING names it. We infer nothing from in-point plus duration. Even when it has a value, it is a reading to verify against the media in your own import template.
Is Tracks in the ALE a channel map?
No. It is a four-form track marker (V, A1A2, VA1A2 or empty) derived from how the take was recorded. It says nothing about which sound source sits on each channel, sample rate, or routing in the edit.
Why still check column by column?
Because one file holds values transcribed by hand, identifiers assembled by software, and cells that go empty because the text would not fit. Each column has its own rule. A file that opens proves the text is readable, not that every field’s source was verified.
Axiom One LLC — SlateX