Video frame interpolation
- Score
- 65.4
- Wallet spend
- $28.77 of $200
- Model cost
- $14.78
- Agent time
- 7h 52m
- Steps
- 422
- Tokens in / out
- 194.4M / 488k
- Self-checks
- 4 passed of 4 used
- Rank at $200 wallet
- 6th of 14
Score
65.4raw metric 0.6542
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
- 309.3328
- scoring_seconds
- 428.5955
- evaluation_sha256
- 375276285d8168e061004e5873daeecbb7e8db7c6e8354ef72d50ad47496e236
- metric_bundle_sha256
- 98e13949365e1541fbec7972317356abb77c00956c7126d0d81dd99f045d5fdd
- calibration_sha256
- 8c72e23cb352711cfddff07fea74a4935a99f753ea7b498dbd83a999278630ab
- prediction_manifest_sha256
- d462a84e70da741dda053de589dedbb69ff00f5069a718be2fd81ff302199cf3
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 initializationTwo pretrained components are involved. The first is torchvision RAFT-Large (C_T_SKHT_V2), a standalone optical-flow mod
Two pretrained components are involved. The first is torchvision RAFT-Large (C_T_SKHT_V2), a standalone optical-flow model. code/raft_util.py builds raft_large(weights=None) and loads weights/raft_large_C_T_SKHT_V2.pth; the inventory shows torchvision RAFT keys at the expected 21 MB size. The second is AlexNet, used only inside the LPIPS training loss. The synthesis U-Net in weights/synth.pt has its own Synth key structure (stem [64,26,3,3]). training/train.py randomly initializes it, and architecture.json says run2 trained it from scratch, with run3f warm-started only from the participant's own run2 checkpoint. No RIFE, FILM, GIMM-VFI or other VFI-specialist checkpoint, teacher or descendant appears in the code, the weights or the trajectory.
✓learned frame generationserve.sh execs code/server.py. For each target frame, _interpolate_tensors computes RAFT flows between the two endpoints
serve.sh execs code/server.py. For each target frame, _interpolate_tensors computes RAFT flows between the two endpoints, then calls synthesize() with the trained Synth network loaded from weights/synth.pt. That network handles forward-splatted intermediate flows, backward warps, a learned mask blend and a learned RGB residual. Every output frame is produced by this learned model. There is no handcrafted-only or fallback output path.
✓independent intervalsEach request is processed independently from only its own two endpoint frames (indices 0 and T-1, which the request vali
Each request is processed independently from only its own two endpoint frames (indices 0 and T-1, which the request validation enforces). The server keeps no cross-request frame state, cache or history. The only cache is the coords-grid helper in raft_util.py, which is keyed by shape and does not depend on image content.
✓no evaluation frame lookupThe serving code has no hashing, fingerprinting, retrieval or lookup of evaluation frames. Outputs come only from networ
The serving code has no hashing, fingerprinting, retrieval or lookup of evaluation frames. Outputs come only from network inference on the supplied endpoints, and no ground-truth or evaluation frames ship with the submission.
✓training data provenanceTraining data is OpenVid-1M (HF nkp37/OpenVid-1M). The parts used are declared in data/data_manifest.json, fetched by th
Training data is OpenVid-1M (HF nkp37/OpenVid-1M). The parts used are declared in data/data_manifest.json, fetched by the shipped prep scripts and recorded in the download logs, and holdout clips are listed in data/holdout_tags.txt and excluded from training. The participant downloaded one Vimeo-90K triplet train shard and inspected it (trajectory#48, trajectory#49), then explicitly abandoned it (trajectory#50); no training code uses it. No evaluation-benchmark test data was used. Losses compare against real ground-truth frames, and there is no pseudo-labeling by a prohibited model.
✓harness credentials used only by the harnessThe trajectory shows no model API calls and no copying of harness credentials into the submission. HF_TOKEN was used onl
The trajectory shows no model API calls and no copying of harness credentials into the submission. HF_TOKEN was used only for HF dataset and API reads, which is permitted, and Spin was used for compute. Searches for API-key usage (OPENAI_API, ANTHROPIC) found no violating step.
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.
- 1failed49m 20s into the runtook 36sfree (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
- 2passed54m 26s into the runtook 6m 30s
startup 66.5 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 66.5 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 36.7 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 6.1 s (the cold first one 0.4 s) and count once; the other 63 (525 frames) took 30.6 s, scaled to grading's other 2175 frames: 133 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 7.6, 8x 10.1, 16x 17.9; per generated frame by size: 384x720 (0.28 MP) 0.057 s, 720x384 (0.28 MP) 0.062 s, 1081x577 (0.62 MP) 0.115 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
- 3passed2h 37m into the runtook 2m 51s
startup 52.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 52.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 31.0 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 5.2 s (the cold first one 0.3 s) and count once; the other 63 (525 frames) took 25.8 s, scaled to grading's other 2175 frames: 112 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 5.9, 8x 8.1, 16x 15.9; per generated frame by size: 384x720 (0.28 MP) 0.047 s, 720x384 (0.28 MP) 0.051 s, 1081x577 (0.62 MP) 0.100 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 24m into the runtook 3m 8s
startup 64.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 64.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 57.6 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.7 s (the cold first one 0.6 s) and count once; the other 63 (525 frames) took 49.0 s, scaled to grading's other 2175 frames: 211 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 13.0, 8x 16.6, 16x 27.2; per generated frame by size: 384x720 (0.28 MP) 0.092 s, 720x384 (0.28 MP) 0.088 s, 1081x577 (0.62 MP) 0.163 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
- 5passed7h 51m into the runtook 2m 25s
startup 54.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 54.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 30.2 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 5.2 s (the cold first one 0.3 s) and count once; the other 63 (525 frames) took 25.1 s, scaled to grading's other 2175 frames: 109 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 5.6, 8x 7.8, 16x 15.6; per generated frame by size: 384x720 (0.28 MP) 0.046 s, 720x384 (0.28 MP) 0.051 s, 1081x577 (0.62 MP) 0.099 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 solution is submitted (14:01 UTC). The final selfcheck passed on exactly the submitted folder, but I have no held-out score, so the quality result below comes from my own proxy evaluation.
What's submitted
- Method: RAFT-Large (torchvision,
C_T_SKHT_V2, a standalone optical-flow model) gives flows between the two endpoints. Each endpoint's flow is forward-splatted to time t. A U-Net trained from scratch then predicts flow corrections, a fusion mask, and a residual. Each requested frame is predicted from that request's two endpoints only. - Pretrained components: only the RAFT flow weights, plus the AlexNet and LPIPS-linear weights used as training-only loss networks. No VFI-specialist checkpoints were used. Checksums and purposes are in
architecture.json. - Training data: random OpenVid-1M clips (CC-BY-4.0), 6,000 extracted at 384 px short side, 5,880 used for training. The 120-clip holdout is never trained on. No benchmark validation or test split was used. Commands, logs, and the holdout list are in
training/,logs/, anddata/. - Final checkpoint: run3f at 60k steps,
weights/synth.pt, sha256843365c1….
Selfchecks
- Four selfchecks total; the fourth (
7a66e31f68f6) passed on the submitted folder. Startup took 54 s (limit 300 s), and the projected generation time was 109 s of the 2,250 s allowed. - Odd and large frame sizes (33×17 up to 4096×4096) all returned correct responses in local tests.
Quality (my proxy, not the grader's score)
- The proxy uses LPIPS-Alex v0.1 and FloLPIPS with PWC-Net flows, on 40 intervals per factor from the holdout, at 384 px. Crossfade on that holdout gives values close to the frozen baselines, so it's a reasonable stand-in.
- Dev score is 0.80 against the frozen anchors, up from 0.70 for the first trained checkpoint. Only the 8x and 16x FloLPIPS components remain well below their targets.
- On the three shipped intervals, the model beats crossfade on LPIPS everywhere and on FloLPIPS at 4x and 8x. Its 16x FloLPIPS is roughly equal to crossfade. That's from 1 sequence, so it's only a rough check.
What didn't help: flip and time-reversal TTA, temporal smoothing across generated frames, 24 RAFT iterations, a second-stage refiner, a stronger motion-weighted branch, and ensembling. Details are in training/experiments/README.md.
Known issues
- Run3 diverged at about step 3,100 from a bug in my disagreement map. I fixed it, restarted from a healthy checkpoint, and kept the diverged log in
logs/. - Large-motion ghosting remains the main error source, and it's most visible in FloLPIPS.