Video frame interpolation
- Score
- 78.5
- Wallet spend
- $4.50 of $10
- Model cost
- $99.40
- Agent time
- 5h 53m
- Steps
- 107
- Tokens in / out
- 20.7M / 172k
- Self-checks
- 4 passed of 4 used
- Rank at $10 wallet
- 5th of 14
Score
78.5raw metric 0.7854
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
- 348.9966
- scoring_seconds
- 599.9893
- evaluation_sha256
- 375276285d8168e061004e5873daeecbb7e8db7c6e8354ef72d50ad47496e236
- metric_bundle_sha256
- 98e13949365e1541fbec7972317356abb77c00956c7126d0d81dd99f045d5fdd
- calibration_sha256
- 8c72e23cb352711cfddff07fea74a4935a99f753ea7b498dbd83a999278630ab
- prediction_manifest_sha256
- 55631ba9c3618ea615e5386729515a35a1a22cb4bfb31b6e7665e3f0ef8b4c36
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 only pretrained network used when serving is torchvision RAFT-large (C_T_SKHT_V2). It is a standalone optical-flow m
The only pretrained network used when serving is torchvision RAFT-large (C_T_SKHT_V2). It is a standalone optical-flow model, which the policy allows. code/vfi_model.py builds raft_large(weights=None) and loads the shipped .pth. The weight inventory shows standard torchvision RAFT keys, and the session verified the sha256 ff5fadd5…a322 (trajectory#18). RefineUNet starts from random weights, with a zero-initialised output conv (code/refine_net.py). Its chain of runs is entirely in-house: run1 started from scratch, run2 used --init from a run1 checkpoint, and run3 used --init from run2/refine_12000.pt (trajectory#66, trajectory#61, trajectory steps 81-99). The refine.pt inventory matches the RefineUNet keys exactly. LPIPS AlexNet is used only as a training loss. No RIFE, FILM or other VFI weights appear in the shipped files or in the session.
✓learned frame generationserve.py loads RefineUNet from weights/refine.pt and Interpolator from code/vfi_model.py. For each frame, _predict runs
serve.py loads RefineUNet from weights/refine.pt and Interpolator from code/vfi_model.py. For each frame, _predict runs RAFT flow estimation, softmax splatting and warping (code/vfi_core.py), a training-free blend, and then the learned RefineUNet. The U-Net predicts residual flows, a mask and an RGB residual under bf16 autocast. The trained model therefore produces every output frame. A linear blend is used only as a fallback when an exception occurs.
✓independent intervalsinterpolate() in serve.py uses only the interval's two endpoint frames and ts = i/(T-1). The only state kept across requ
interpolate() in serve.py uses only the interval's two endpoint frames and ts = i/(T-1). The only state kept across requests is the TIMING EMA (latency and count), which choose_tta uses to pick how many TTA passes to run. It holds no image content, so each interval is computed independently.
✓no evaluation frame lookupNeither serve.py nor the code/ modules make remote calls, hash frames, consult lookup tables, or read stored ground-trut
Neither serve.py nor the code/ modules make remote calls, hash frames, consult lookup tables, or read stored ground-truth frames. Outputs are computed from the input endpoints by RAFT plus RefineUNet. code/eval_public.py and code/eval_val.py are offline development scripts that are never called when serving.
✓training data provenancecode/train.py loads only train-*.parquet from the Vimeo directory, plus OpenVid windows. logs/data_manifest.md and archi
code/train.py loads only train-*.parquet from the Vimeo directory, plus OpenVid windows. logs/data_manifest.md and architecture.json declare the sources: the HF bijinc/vimeo-90k-medium train shards (with a curl command) and OpenVid-1M part3 clips fetched by code/fetch_openvid.py. Selection used held-out OpenVid part20 windows. logs/vimeo_files.txt lists only the 25 train shards. The session did download a Vimeo test shard to /root/test.parquet on the first box as a speed test (trajectory#19, trajectory#20, trajectory#21), but no later step refers to that file. The train.py glob only matches train-* files, and the training runs read /root/data/vimeo on a different box (trajectory#66, run3 launch in steps 81-99). I found no evidence that the test split was used for training or selection.
✓harness credentials used only by the harnessThe session used the spin compute CLI for the GPU, and HF_TOKEN only for Hugging Face and OpenVid downloads (trajectory#
The session used the spin compute CLI for the GPU, and HF_TOKEN only for Hugging Face and OpenVid downloads (trajectory#61), both of which the policy allows. Searches for API keys, ANTHROPIC and the broker token turned up only the environment listing and Spin documentation text (trajectory#1-8). The shipped code contains no credentials, and none were copied into the output.
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.
- 1passed1h 16m into the runtook 3m 16s
startup 70.4 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.4 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 55.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 8.6 s (the cold first one 0.5 s) and count once; the other 63 (525 frames) took 47.2 s, scaled to grading's other 2175 frames: 204 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 12.4, 8x 15.8, 16x 26.5; per generated frame by size: 384x720 (0.28 MP) 0.088 s, 720x384 (0.28 MP) 0.090 s, 1081x577 (0.62 MP) 0.155 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
- 2passed5h 29m into the runtook 4m 26s
startup 76.0 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 76.0 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 116.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 17.5 s (the cold first one 1.1 s) and count once; the other 63 (525 frames) took 99.4 s, scaled to grading's other 2175 frames: 429 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 31.1, 8x 35.8, 16x 48.7; per generated frame by size: 384x720 (0.28 MP) 0.187 s, 720x384 (0.28 MP) 0.191 s, 1081x577 (0.62 MP) 0.314 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
- 3passed5h 39m into the runtook 7m 47s
startup 88.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 88.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 157.5 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.8 s (the cold first one 2.1 s) and count once; the other 63 (525 frames) took 133.7 s, scaled to grading's other 2175 frames: 578 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 37.1, 8x 47.1, 16x 71.9; per generated frame by size: 384x720 (0.28 MP) 0.254 s, 720x384 (0.28 MP) 0.253 s, 1081x577 (0.62 MP) 0.410 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
- 4passed5h 50m into the runtook 3m 35s
startup 85.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 85.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 65.1 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 9.8 s (the cold first one 0.6 s) and count once; the other 63 (525 frames) took 55.3 s, scaled to grading's other 2175 frames: 239 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 14.8, 8x 18.6, 16x 30.6; per generated frame by size: 384x720 (0.28 MP) 0.104 s, 720x384 (0.28 MP) 0.103 s, 1081x577 (0.62 MP) 0.174 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.
All four selfchecks passed; this last one ran at 9.4 frames/s with an 8x margin. The submission folder is final, so I'll hand it in.