Video frame interpolation
- Score
- 63.7
- Wallet spend
- $7.43 of $10
- Model cost
- $6.51
- Agent time
- 5h 11m
- Steps
- 332
- Tokens in / out
- 110.4M / 351k
- Self-checks
- 4 passed of 4 used
- Rank at $10 wallet
- 7th of 14
Score
63.7raw metric 0.6369
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
- 366.5996
- scoring_seconds
- 1131.1868
- evaluation_sha256
- 375276285d8168e061004e5873daeecbb7e8db7c6e8354ef72d50ad47496e236
- metric_bundle_sha256
- 98e13949365e1541fbec7972317356abb77c00956c7126d0d81dd99f045d5fdd
- calibration_sha256
- 8c72e23cb352711cfddff07fea74a4935a99f753ea7b498dbd83a999278630ab
- prediction_manifest_sha256
- f8b010095927b3157f4ad9c45e510e44071cf113f3ac6b5c4bf02a12dbaa0d80
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 model used at serving time is torchvision RAFT-Large (raft_large_C_T_SKHT_V2). It is a standalone op
The only pretrained model used at serving time is torchvision RAFT-Large (raft_large_C_T_SKHT_V2). It is a standalone optical-flow model, which the policy permits. The session downloaded it from download.pytorch.org and checked its sha256, and the weight inventory shows standard RAFT keys. vfi/flow.py builds raft_large(weights=None) and then loads this file. The refiner (Refiner2, v2) was trained in this task: run2 started from random init, and run4 was weights-only initialized from run2. The weight inventory of weights/refiner.pt shows only enc.* and levels.* keys, which match Refiner2 in vfi/core.py. The trajectory shows the shipped checkpoint was exported as run4, step 12000, and its sha matches the manifest. architecture.json lists no teachers, no fallback models and no specialist VFI components. LPIPS AlexNet is used only as a training loss.
✓learned frame generationserve.sh installs the bundled wheels offline and runs server.py. load_model loads RAFT and every refiner listed in weigh
serve.sh installs the bundled wheels offline and runs server.py. load_model loads RAFT and every refiner listed in weights/manifest.json via build_refiner and load_state_dict. Each request goes through vfi/infer.py interpolate_frames: RAFT bidirectional flow, quadratic init flows, learned coarse-to-fine residual flow refinement, backward warping and learned mask/residual blending. Output frames are therefore produced by learned components. Linear blending was only a dev-time baseline script.
✓independent intervalsserver.py decodes only the two endpoint frames of the current request and calls interpolate_frames with that request's t
server.py decodes only the two endpoint frames of the current request and calls interpolate_frames with that request's target timesteps. No cache, global frame store or other state carries over between requests. Model weights are the only module-level state.
✓no evaluation frame lookupServing never fingerprints, hashes or looks up evaluation frames, and it makes no network access. server.py requires exa
Serving never fingerprints, hashes or looks up evaluation frames, and it makes no network access. server.py requires exactly the two endpoint frames and computes outputs from them alone. Public examples were used only for dev evaluation and selection, which is allowed.
✓training data provenanceEvery training corpus is declared in training/data_sources.md and architecture.json and has a retained download record:
Every training corpus is declared in training/data_sources.md and architecture.json and has a retained download record: Kinetics-mini (nateraw/kinetics-mini train), the GoPro_Large train split (snah/GOPRO_Large; prep_gopro.py's regex reads only train/*/sharp, and prep_gopro.log lists 22 train sequences) and Vimeo-90K triplet train shard 00000 (danjacobellis/vimeo90k_triplet). The trajectory shows these downloads, with no SNU-FILM or GoPro test use found. Task public examples were used only for selection, which is allowed.
✓harness credentials used only by the harnessThe trajectory shows only allowed credential use: HF_TOKEN for Hugging Face downloads, the spin CLI and frontier selfche
The trajectory shows only allowed credential use: HF_TOKEN for Hugging Face downloads, the spin CLI and frontier selfcheck. Searches for ANTHROPIC, API_KEY and BASE_URL found no harness credential use; the only hit was spin help text.
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.
- 1failed1h 51m into the runtook 41sfree (stopped before any GPU time)
failed review prerequisites: Initialization metadata must declare a nonempty base_model and base_revision (or none for both when training from scratch)
1 gates
- ✗review prerequisites · Initialization metadata must declare a nonempty base_model and base_revision (or none for both when training from scratch)
- 2passed1h 52m into the runtook 2m 37s
startup 48.1 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 48.1 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 43.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 6.8 s (the cold first one 0.6 s) and count once; the other 63 (525 frames) took 36.3 s, scaled to grading's other 2175 frames: 157 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 10.1, 8x 12.4, 16x 19.3; per generated frame by size: 384x720 (0.28 MP) 0.068 s, 720x384 (0.28 MP) 0.070 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
- 3passed3h 20m into the runtook 6m 52s
startup 53.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 53.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 55.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 8.9 s (the cold first one 0.8 s) and count once; the other 63 (525 frames) took 46.6 s, scaled to grading's other 2175 frames: 202 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.5, 8x 16.0, 16x 25.1; per generated frame by size: 384x720 (0.28 MP) 0.086 s, 720x384 (0.28 MP) 0.095 s, 1081x577 (0.62 MP) 0.147 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
- 4passed4h 16m into the runtook 3m 47s
startup 64.8 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.8 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 78.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 18.4 s (the cold first one 2.2 s) and count once; the other 63 (525 frames) took 60.2 s, scaled to grading's other 2175 frames: 268 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 19.1, 8x 23.8, 16x 34.6; per generated frame by size: 384x720 (0.28 MP) 0.122 s, 720x384 (0.28 MP) 0.179 s, 1081x577 (0.62 MP) 0.243 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
- 5passed5h 7m into the runtook 3m 13s
startup 74.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 74.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 50.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 8.0 s (the cold first one 0.7 s) and count once; the other 63 (525 frames) took 41.9 s, scaled to grading's other 2175 frames: 182 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 11.7, 8x 14.3, 16x 22.7; per generated frame by size: 384x720 (0.28 MP) 0.078 s, 720x384 (0.28 MP) 0.082 s, 1081x577 (0.62 MP) 0.144 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 submitted at 11:19 UTC, and the session is closed.
I can't see the score. The only check I had is the public-interval diagnostic, which is not the held-out evaluation.
What was submitted
- Model: a frozen torchvision RAFT-Large flow model (
raft_large_C_T_SKHT_V2, a standalone optical-flow model) feeds a small refiner I trained from scratch. The refiner (v2 architecture, 1.18M parameters) predicts each intermediate frame from the two endpoints and their flows. It uses a learned mask and residual, plus context features warped with the same flows. - Final weights: run 2 (22k steps), then run 4 (12k more steps, initialized from run 2, LPIPS loss weight raised from 0.3 to 0.8).
- Serving: one direct pass per interval, RAFT at 12 iterations, no test-time ensembling. Responses are raw RGB8. Vendored cp312 torch 2.8.0+cu128 wheels are installed into
/tmpat startup.
Verification
- Four selfchecks were run and one static failure was fixed. The final output passed on an H100 80GB: startup 74 s (limit 300 s), first request 0.65 s, projected 2250-frame pass about 182 s (limit 2250 s), and healthy after all requests.
- Public intervals, LPIPS (training-time eval of the final checkpoint): 4x 0.0211, 8x 0.0369, 16x 0.0642. Linear blend on the same clip: 0.0279 / 0.0421 / 0.0744.
- Held-out Kinetics windows (never trained on): LPIPS 0.0605 / 0.0993 / 0.1306 at 4x / 8x / 16x. Linear blend on the same windows: 0.114 / 0.157 / 0.176.
- These public numbers are from one clip, and run 4 was chosen partly on them. The hidden set is probably harder (its frozen baseline is 0.0416 at 4x, while linear blending is 0.028 on the public clip), so expect the real numbers to be worse.
Things I tried that did not help
- Time-reversed and flip test-time averaging, recursive midpoint synthesis, and 24 RAFT iterations were all worse or no better.
- Averaging run 1 with run 2, or run 2 with run 3, was no better than run 2 alone.
- Plain RAFT warping without learning scored worse than linear blending on LPIPS.
Data and provenance
- Training used only training splits: Kinetics-mini train clips, GoPro_Large train sequences, and Vimeo-90K train shard 00000.
- 10 Kinetics clips and 2 GoPro sequences were held out from training for selection.
- The task's three public intervals were used only for monitoring and choosing checkpoints, as allowed. They were never training targets.
- Declared pretrained components are RAFT (served), and the AlexNet backbone plus LPIPS linear layers (training loss only), each with a checksum.
- No specialist VFI weights (RIFE, GIMM-VFI, FILM) were used, and there are no teachers or fallbacks.
Budget
About $7.43 of the $10 was spent on A100 time. The lease is stopped, and about $2.58 remains.