Video frame interpolation
- Score
- 64.3
- Wallet spend
- $24.43 of $50
- Model cost
- $12.02
- Agent time
- 6h 17m
- Steps
- 268
- Tokens in / out
- 90.9M / 386k
- Self-checks
- 4 passed of 4 used
- Rank at $50 wallet
- 6th of 14
Score
64.3raw metric 0.6428
The score is the raw metric (balanced LPIPS and FloLPIPS gap closed against a frozen baseline), which already runs from 0 to 1, times 100.
Verifier details
- scoring_protocol
- vfi-lpips-flolpips-two-anchor-v2
- metric_protocol
- vfi-lpips-alex01-flolpips-sequence-v1
- psnr_cap_db
- 100
- metric_seconds
- 408.8387
- scoring_seconds
- 534.3955
- evaluation_sha256
- 375276285d8168e061004e5873daeecbb7e8db7c6e8354ef72d50ad47496e236
- metric_bundle_sha256
- 98e13949365e1541fbec7972317356abb77c00956c7126d0d81dd99f045d5fdd
- calibration_sha256
- 8c72e23cb352711cfddff07fea74a4935a99f753ea7b498dbd83a999278630ab
- prediction_manifest_sha256
- abf8535e6b9b78adac38ccadc267535cc08768a7bea0894cd51b3a8d85894b45
After grading, a reviewer model reads the submission's files and the agent's trajectory and checks each of the task's rules. A failed check makes the score 0. Step numbers link into the trajectory.
✓non specialist initializationThe served interpolator (weights/vfi_interpolator.pt, sha256 1de4d385...) was trained from random initialisation. Its tr
The served interpolator (weights/vfi_interpolator.pt, sha256 1de4d385...) was trained from random initialisation. Its training chain was v1b -> v3 -> ft_final -> v6, and training/train.py only warm-starts (--init) from the candidate's own earlier runs. The checkpoint inventory holds only metric0/1, feat and synth tensors. It has no context or backbone tensors, and context=False. The only pretrained component used at serving is torchvision RAFT-large (raft_large_C_T_SKHT_V2-ff5fadd5, from download.pytorch.org). RAFT is a permitted standalone optical-flow model, and its inventory shows the RAFT tensor layout. AlexNet/LPIPS is used only as a training loss. The trajectory shows no download or use of RIFE, FILM, GIMM-VFI or any other VFI weights, whether as a teacher or otherwise. The only RIFE-related network activity was an HTTP status probe of a README file. Step 264 shows the v7 experiment was rolled back to the declared v6 weights before submission, and the shipped sha matches the manifest.
✓learned frame generationserve.py loads RAFT and the trained interpolator. run_interval calls vfi/infer.py interpolate_interval, which computes R
serve.py loads RAFT and the trained interpolator. run_interval calls vfi/infer.py interpolate_interval, which computes RAFT endpoint flows and then runs the learned MetricNet softmax splatting and the SynthNet U-Net fusion in vfi/net.py. Output frames are generated by these learned networks, not by copying or by plain blending. The weight inventories show real trained tensors that match the architecture declared in architecture.json and manifests/vfi_interpolator.json.
✓independent intervalsserve.py parse_request accepts exactly the two endpoint frames of the current request. interpolate_interval in vfi/infer
serve.py parse_request accepts exactly the two endpoint frames of the current request. interpolate_interval in vfi/infer.py processes only those frames and the requested timesteps. There is no cross-request cache, global frame store or state carried between intervals, only a lock and the models loaded once.
✓no evaluation frame lookupThe serving code makes no remote calls and does no hashing, retrieval or dataset lookup. Outputs are computed only from
The serving code makes no remote calls and does no hashing, retrieval or dataset lookup. Outputs are computed only from the two input endpoints by the networks. The public example sequence (sequence-0027) was used only for interface checks and a motion-statistics comparison (trajectory#68). It was never used as training data. SNU-FILM and GoPro test data do not appear anywhere.
✓training data provenanceThe served chain was trained on OpenVid-1M HD (HF nkp37/OpenVid-1M, OpenVidHD_part_1.zip), declared in manifests/data_op
The served chain was trained on OpenVid-1M HD (HF nkp37/OpenVid-1M, OpenVidHD_part_1.zip), declared in manifests/data_openvid1m.json, with retained download commands (training/download_commands.sh) and a prep script (training/prep_openvid.py). That gives 1960 train clips and 40 holdout clips; the selection is in openvid_selection.json. Early pipeline-test runs used GoPro_Large, and the trajectory confirms that only the train split's sharp frames were extracted ('never test', trajectory#67: 2103 frames, 22 train sequences). Those runs were dropped from the served chain, and the GoPro train split is allowed in any case. Vimeo-90K mirrors were considered but avoided (trajectory#77). No evaluation data was used.
✓harness credentials used only by the harnessTrajectory searches found no use of ANTHROPIC_API_KEY, OPENAI_API_KEY or harness *_BASE_URL variables, and no launch of
Trajectory searches found no use of ANTHROPIC_API_KEY, OPENAI_API_KEY or harness *_BASE_URL variables, and no launch of claude or codex CLIs. HF_TOKEN appears only as an Authorization header for Hugging Face API and dataset downloads, which is permitted. The only BASE_URL match is SPIN_BASE_URL in the task's compute-tool documentation. The shipped code (serve.py, vfi/*.py, training/*.py) makes no use of credentials.
LLM adversarial review is not proof of arbitrary program behavior. Host storage and task-specific deterministic checks remain required.
frontier selfcheck runs the submission on the grading infrastructure against public examples and reports each gate, so the agent can catch problems before grading. Each run gets four. This agent used 4 of 4.
- 1failed40m 53s into the runtook 54sfree (stopped before any GPU time)
failed review prerequisites: The review needs architecture.json and serve.sh at the top of the submission
1 gates
- ✗review prerequisites · The review needs architecture.json and serve.sh at the top of the submission
- 2passed42m 16s into the runtook 4m 12s
startup 71.2 s of 300 s; 1/1 gates passed; The generation rate was projected from a sample: 72 of the evaluation's 270 intervals (600 of its 2250 frames), the first 9 counted once and the rest scaled to the evaluation, not timed over a whole pass.
5 gates
- ✓review prerequisites
- ✓startup · GET /health answered 200 after 71.2 s
- ✓POST /interpolate · the first public interval (4x, 384x720): 3 raw RGB frames of the requested size, accepted by the grader's parser
- ✓generation rate · 600 frames in 111.8 s, projected from 72 of 270 requests at concurrency 1: the first 9 intervals, which bring each of the sample's 9 (size, factor) shapes for the first time, took 25.5 s (the cold first one 2.6 s) and count once; the other 63 (525 frames) took 86.2 s, scaled to grading's other 2175 frames: 383 s of the 2250 s allowed for 2250 frames, including transport and export. 72 intervals (24 per factor) were sent one at a time to a cold server, as grading sends its held-out pass, resampled from the public examples at 384x720 with one interval per factor at 720x384, 1081x577 early on (0.29 megapixels per generated frame on average). Request seconds by factor: 4x 24.7, 8x 32.6, 16x 53.3; per generated frame by size: 384x720 (0.28 MP) 0.173 s, 720x384 (0.28 MP) 0.253 s, 1081x577 (0.62 MP) 0.377 s. The requirement is per generated frame whatever its size, and held-out frame sizes may differ and may be larger: if your time per frame grows with pixels, keep a margin of several times, not just 15%.
- ✓healthy after requests
- 3passed1h 31m into the runtook 4m 5s
startup 72.3 s of 300 s; 1/1 gates passed; The generation rate was projected from a sample: 72 of the evaluation's 270 intervals (600 of its 2250 frames), the first 9 counted once and the rest scaled to the evaluation, not timed over a whole pass.
5 gates
- ✓review prerequisites
- ✓startup · GET /health answered 200 after 72.3 s
- ✓POST /interpolate · the first public interval (4x, 384x720): 3 raw RGB frames of the requested size, accepted by the grader's parser
- ✓generation rate · 600 frames in 98.9 s, projected from 72 of 270 requests at concurrency 1: the first 9 intervals, which bring each of the sample's 9 (size, factor) shapes for the first time, took 14.4 s (the cold first one 0.8 s) and count once; the other 63 (525 frames) took 84.4 s, scaled to grading's other 2175 frames: 364 s of the 2250 s allowed for 2250 frames, including transport and export. 72 intervals (24 per factor) were sent one at a time to a cold server, as grading sends its held-out pass, resampled from the public examples at 384x720 with one interval per factor at 720x384, 1081x577 early on (0.29 megapixels per generated frame on average). Request seconds by factor: 4x 20.6, 8x 32.4, 16x 44.6; per generated frame by size: 384x720 (0.28 MP) 0.159 s, 720x384 (0.28 MP) 0.162 s, 1081x577 (0.62 MP) 0.242 s. The requirement is per generated frame whatever its size, and held-out frame sizes may differ and may be larger: if your time per frame grows with pixels, keep a margin of several times, not just 15%.
- ✓healthy after requests
- 4passed3h 44m into the runtook 5m 20s
startup 72.6 s of 300 s; 1/1 gates passed; The generation rate was projected from a sample: 72 of the evaluation's 270 intervals (600 of its 2250 frames), the first 9 counted once and the rest scaled to the evaluation, not timed over a whole pass.
5 gates
- ✓review prerequisites
- ✓startup · GET /health answered 200 after 72.6 s
- ✓POST /interpolate · the first public interval (4x, 384x720): 3 raw RGB frames of the requested size, accepted by the grader's parser
- ✓generation rate · 600 frames in 160.4 s, projected from 72 of 270 requests at concurrency 1: the first 9 intervals, which bring each of the sample's 9 (size, factor) shapes for the first time, took 31.7 s (the cold first one 3.1 s) and count once; the other 63 (525 frames) took 128.7 s, scaled to grading's other 2175 frames: 565 s of the 2250 s allowed for 2250 frames, including transport and export. 72 intervals (24 per factor) were sent one at a time to a cold server, as grading sends its held-out pass, resampled from the public examples at 384x720 with one interval per factor at 720x384, 1081x577 early on (0.29 megapixels per generated frame on average). Request seconds by factor: 4x 39.4, 8x 52.8, 16x 67.0; per generated frame by size: 384x720 (0.28 MP) 0.253 s, 720x384 (0.28 MP) 0.333 s, 1081x577 (0.62 MP) 0.476 s. The requirement is per generated frame whatever its size, and held-out frame sizes may differ and may be larger: if your time per frame grows with pixels, keep a margin of several times, not just 15%.
- ✓healthy after requests
- 5passed4h 57m into the runtook 5m 10s
startup 70.2 s of 300 s; 1/1 gates passed; The generation rate was projected from a sample: 72 of the evaluation's 270 intervals (600 of its 2250 frames), the first 9 counted once and the rest scaled to the evaluation, not timed over a whole pass.
5 gates
- ✓review prerequisites
- ✓startup · GET /health answered 200 after 70.2 s
- ✓POST /interpolate · the first public interval (4x, 384x720): 3 raw RGB frames of the requested size, accepted by the grader's parser
- ✓generation rate · 600 frames in 169.3 s, projected from 72 of 270 requests at concurrency 1: the first 9 intervals, which bring each of the sample's 9 (size, factor) shapes for the first time, took 23.9 s (the cold first one 1.2 s) and count once; the other 63 (525 frames) took 145.3 s, scaled to grading's other 2175 frames: 626 s of the 2250 s allowed for 2250 frames, including transport and export. 72 intervals (24 per factor) were sent one at a time to a cold server, as grading sends its held-out pass, resampled from the public examples at 384x720 with one interval per factor at 720x384, 1081x577 early on (0.29 megapixels per generated frame on average). Request seconds by factor: 4x 39.8, 8x 60.8, 16x 67.4; per generated frame by size: 384x720 (0.28 MP) 0.273 s, 720x384 (0.28 MP) 0.284 s, 1081x577 (0.62 MP) 0.418 s. The requirement is per generated frame whatever its size, and held-out frame sizes may differ and may be larger: if your time per frame grows with pixels, keep a margin of several times, not just 15%.
- ✓healthy after requests
The agent's last message before its session ended.
The submission is in: /workspace/output was graded as submitted at 12:24 UTC. I have no official score; the closest signal is a sanity check on held-out clips I built from OpenVid-1M.
What is submitted
- Method: frozen RAFT-large endpoint flow in both directions, then learned softmax-style forward splatting of the endpoints' RGB and 16 learned feature channels to the target time, then a from-scratch fusion U-Net predicting a blend mask and residual. The model is 4.7M parameters.
- Test-time averaging (frames up to 0.35 MP, i.e. the 384×720 evaluation geometry): 24 RAFT updates, averaged over swapped and horizontally flipped endpoints. Larger frames get fewer updates and cheaper settings.
- Weights: the interpolator is trained from random initialisation on 1,960 OpenVid-1M HD clips (CC-BY-4.0), with 40 clips held out. Its chain of runs is documented in
training/NOTES.md. The only pretrained components are RAFT-large (served), plus AlexNet and LPIPS (training loss and validation only). No VFI-specialist checkpoint was used anywhere. - Evidence:
architecture.json,manifests/,training/(scripts, download commands, logs) are in the folder.
Verification
- Four
frontier selfcheckruns were used. The first failed the static review becausearchitecture.jsonwas missing, and that run was not counted. The other three passed. The submitted package is the fourth, which passed with 70 s startup (limit 300 s) and a projected 626 s full pass (limit 2,250 s). - On the three shipped public intervals (ground truth provided), LPIPS for the served weights was 0.0165 / 0.0250 / 0.0543 for 4×/8×/16×. These are single intervals, so they are noisy.
- On 60 held-out OpenVid intervals with the served settings, mean LPIPS was 0.02795.
- A FloLPIPS-style proxy using RAFT flows (not the official PWC-Net metric, so only relative comparisons are meaningful) showed no extra flicker from the LPIPS-weighted training.
Choices and caveats
- Served weights are v6, not v7. A third training cycle (v7) scored 0.6% better on the holdout check. I didn't serve it because the self-check budget was used up, and the task asks for the submitted package to be self-checked. v7's logs are kept in
training/logs/and are documented as not served. - Held-out frame sizes are unknown. The evaluation may use frames larger than 384×720. I added cheaper settings for larger frames, but at 1080p the pass is roughly 1,200 s, which is inside the limit only if the held-out geometry stays near 384×720.
- Budget: $24.43 of the $50 wallet was spent on H100 time (the lease ran until 13:30 with the rest unused).