Evaluate
A log template for evaluating AI clips
A spreadsheet or CSV template for logging your own AI clip evaluations: field definitions, allowed values, validation rules and how to correct entries.
To compare AI clippers fairly on your own streams, log every run and every clip in a spreadsheet with fixed columns and fixed allowed values. This page gives a two-table template you can copy into a spreadsheet or save as CSV, with field definitions, validation rules and a way to correct entries without losing the old value.
Sections on this page (8)
Why use fixed columns
A free-form note such as “pretty good, needed a trim” cannot be counted, and a score entered after you know which tool made the clip drifts. Fixed columns and a short list of allowed values force you to decide the definitions before you look at clips. They also let you compute the measures in the acceptance rate, processing time, facecam layout and killfeed and caption guides from one place.
The two tables
Use one sheet per table, linked by run_id.
| Table | One row per | Key |
|---|---|---|
runs |
Submission of one VOD to one tool | run_id |
clips |
Suggested clip you reviewed | run_id and clip_rank |
A run is one submission, not one tool on one VOD, because timing guides ask you to repeat the same VOD at different times of day.
Saving it as CSV
If you export to CSV, the RFC 4180 conventions are the common baseline. It describes an optional header row naming the fields, the same number of fields on every line, and double quotes around any field that contains a comma, a double quote or a line break, with a literal double quote written as two in a row. On top of that, a few choices keep a log consistent:
- lower-case snake_case column names
- times in UTC in ISO 8601, such as
2026-01-31T18:05:00Z - decimals with a point, and rates stored as fractions (0.08, not 8%)
- an empty cell means the field does not apply, and
unknownmeans it applies but could not be read, such as a queue time the tool does not show
If you want a machine-readable description of the columns, the Table Schema standard declares field types, required, unique and enum constraints, missing values, primary keys and foreign keys. That is optional for a personal log.
Field definitions: runs
| Field | Type | Allowed values | Rule |
|---|---|---|---|
run_id |
string | R plus three digits |
Unique |
vod_label |
string | Your own label | Same label for the same source VOD |
genre |
enum | fps, battle_royale, moba, sandbox, horror, just_chatting, other |
Required |
vod_minutes |
integer | 1 or more | Full source length |
attempt_no |
integer | 1 or more | Increases per repeat of the same VOD, tool and settings |
tool, plan |
string | Name as billed on the run date | Required |
tool_version_or_date |
string | Version if shown, otherwise YYYY-MM-DD |
Required |
settings_note |
string | Free text | defaults if nothing was changed. List every changed setting |
input_route |
enum | link, upload |
Required |
submitted_minutes |
integer | 1 to vod_minutes |
Length actually processed |
credits_charged |
decimal | 0 or more | Empty if the tool does not bill in credits |
started_at_utc |
datetime | ISO 8601 UTC | When the submission was confirmed |
upload_minutes |
decimal | 0 or more | Empty for link |
queue_minutes |
decimal | 0 or more, or unknown |
Included in processing_minutes |
first_clip_minutes |
decimal | 0 or more, or unknown |
No greater than processing_minutes |
processing_minutes |
decimal | 0 or more | From confirmation to all clips viewable |
run_status |
enum | complete, partial, failed, length_not_supported |
Keep failed runs in the sheet |
Field definitions: clips
| Field | Type | Allowed values | Rule |
|---|---|---|---|
run_id |
string | Existing run_id |
Must match a runs row |
clip_rank |
integer | 1 to 10 | The tool’s own order. Unique within a run |
start_seconds, end_seconds |
decimal | 0 or more | End is after start and within the submitted length |
accepted |
enum | as_is, light_edit, rejected |
Required |
edit_minutes |
decimal | 0 to 2 | 0 for as_is, up to 2 for light_edit, empty for rejected |
reject_reason |
enum | wrong_moment, bad_start, bad_end, framing, captions, duplicate, policy_risk |
Only on rejected rows |
layout_scene |
enum | usual_cam, other_cam, full_game, full_cam, mid_clip_change |
Empty if not checked |
layout_result |
enum | pass, missed_cam, wrong_region, face_cut_off, unstable_framing, gameplay_crop_error |
One primary result per clip |
hud_frames_sampled |
integer | 1 or more | Empty if not checked |
hud_frames_covered |
integer | 0 to hud_frames_sampled |
Frames with a critical HUD region under a caption |
hud_frames_cropped |
integer | 0 to hud_frames_sampled |
A frame counts in only one of covered or cropped |
notes |
string | Free text | Anything the codes cannot say |
The accepted values, the two-minute edit line and the reject reasons are the ones defined in the acceptance rate guide, and the layout and HUD columns follow the other two guides. Drop any column you do not use.
Derived values
Compute these in formula cells and do not type them in:
- strict rate = count of
as_is/ clips in the run - total rate = count of
as_ispluslight_edit/ clips in the run - processing minutes per source hour =
processing_minutes/ (submitted_minutes/ 60) - HUD covered share =
hud_frames_covered/hud_frames_sampled
Validation rules
Before you read anything off the sheet, check that:
- every
run_idis unique, and everyclipsrow has a matchingrunsrow - every enum cell holds one of the allowed values, which a spreadsheet’s data validation list can enforce
end_secondsis greater thanstart_secondsand within the submitted length- a run has no more than 10 clip rows, with ranks running from 1 without gaps
- failed and unsupported runs have no clip rows but stay in
runs accepted,edit_minutesandreject_reasonagree with each otherfirst_clip_minutesis no greater thanprocessing_minutes- covered and cropped frame counts do not exceed frames sampled
How to correct an entry
Fix mistakes without erasing your reasoning. Add a third sheet, corrections, with one row per change: corrected_at_utc, sheet, row_key, field, old_value, new_value, reason and note. A short list of reasons keeps it countable: typing_error, settings_log_error, rescored and formula_error.
- Check the raw tool output for that run against the row.
- If the value is wrong, change it in the sheet and add a corrections row giving both values in full.
- Recompute anything that depends on it, such as a rate or a share.
- If the correction changes which tool looks better, note that in the
notecolumn.
Disagreeing with your earlier judgement is not a typing error. Rescore a clip only if you applied an anchor wrongly, and log it as rescored. If you blind-score, do not look at the tool column until all clips are scored.
More guidance on each measure is on the guides hub.