Video frame interpolation
- Score
- 86.0
- Wallet spend
- $8.78 of $10
- Model cost
- $28.75
- Agent time
- 10h 3m
- Steps
- 318
- Tokens in / out
- 31.1M / 250k
- Self-checks
- 3 passed of 3 used
- Rank at $10 wallet
- 3rd of 14
Score
86.0raw metric 0.8596
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
- 429.1227
- scoring_seconds
- 948.0996
- evaluation_sha256
- 375276285d8168e061004e5873daeecbb7e8db7c6e8354ef72d50ad47496e236
- metric_bundle_sha256
- 98e13949365e1541fbec7972317356abb77c00956c7126d0d81dd99f045d5fdd
- calibration_sha256
- 8c72e23cb352711cfddff07fea74a4935a99f753ea7b498dbd83a999278630ab
- prediction_manifest_sha256
- ef4f9095b4f1d3ffebf4da01795c85fbef6e132e8ebf93daa3d63b2e327aad37
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 component that is served is torchvision RAFT-large C_T_SKHT_V2, a standalone optical-flow model, whi
The only pretrained component that is served is torchvision RAFT-large C_T_SKHT_V2, a standalone optical-flow model, which the policy permits. It was downloaded from download.pytorch.org, and its sha256 matches the official file (trajectory#311). It is loaded into raft_large(weights=None) in code/vfimodel.py. The weight inventory shows standard torchvision RAFT keys. The SplatSynth synthesis nets (synthA.pt and synthB.pt) were randomly initialized in training/train.py and trained from scratch with L1 + LPIPS loss. LPIPS/AlexNet was used only as a training loss and PWC-Net only for local metrics. No VFI checkpoint, teacher or pseudo-label was used. The SEA-RAFT clone was experiment-only and is not shipped.
✓learned frame generationserve.sh runs code/server.py, which calls the Interpolator in code/infer.py. That computes RAFT flows in both directions
serve.sh runs code/server.py, which calls the Interpolator in code/infer.py. That computes RAFT flows in both directions and runs the learned SplatSynth nets: softmax splatting, encoder/decoder, then a mask + residual head. The two nets are ensembled with time-reversal TTA, as configured in weights/serve_config.json. The linear-blend fallback runs only when an exception occurs, not as the normal output path.
✓independent intervalsEach request uses only that request's first and last input frames and its timesteps. The only cache in code/vfimodel.py
Each request uses only that request's first and last input frames and its timesteps. The only cache in code/vfimodel.py (_grid_cache) stores coordinate grids that depend on shape, not frame content or results from other intervals. No state carries over between requests.
✓no evaluation frame lookupThe serving code has no hashing, fingerprinting, stored frame bank or lookup of evaluation frames. The weights contain o
The serving code has no hashing, fingerprinting, stored frame bank or lookup of evaluation frames. The weights contain only RAFT and SplatSynth parameter tensors. Output is synthesized from the inputs by the networks.
✓training data provenanceThe training corpus is the Kinetics-400 train split from Hugging Face kiyoonkim/kinetics-400-targz at a pinned revision.
The training corpus is the Kinetics-400 train split from Hugging Face kiyoonkim/kinetics-400-targz at a pinned revision. This is declared in architecture.json and docs/DATA_PROVENANCE.md, and download commands are retained in training/setup_instance.sh and training/setup2.sh. Validation was built from the part_100 train shard (training/make_val.py), plus the shipped public examples (training/load_public.py). The trajectory shows only K400 train shards being downloaded for training; one OpenVid sample was downloaded for inspection only. No evaluation or test-split data was used.
✓harness credentials used only by the harnessThe trajectory shows no use of harness API keys and no harness CLI calls by the participant. The only credentials it sho
The trajectory shows no use of harness API keys and no harness CLI calls by the participant. The only credentials it shows are storage credentials provided by the environment (s3env.sh) for data storage, which are not harness 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 3 of 4.
- 1passed1h 32m into the runtook 3m 11s
startup 65.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 65.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 42.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 6.8 s (the cold first one 0.4 s) and count once; the other 63 (525 frames) took 36.0 s, scaled to grading's other 2175 frames: 156 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 8.4, 8x 11.8, 16x 21.3; per generated frame by size: 384x720 (0.28 MP) 0.067 s, 720x384 (0.28 MP) 0.069 s, 1081x577 (0.62 MP) 0.122 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
- 2error8h 33m into the runtook 2m 1sfree (stopped before any GPU time)
The self-check could not finish (NotFoundError: Modal Sandbox with container ID ta-01M430CA2ASXV1AWV85DZN72FS not found. This means this Sandbox has already shut down. (Error code: MG9WTTUM)).
1 gates
- ✓review prerequisites
- 3passed8h 37m into the runtook 3m 45s
startup 65.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 65.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 87.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 12.9 s (the cold first one 0.9 s) and count once; the other 63 (525 frames) took 74.6 s, scaled to grading's other 2175 frames: 322 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 17.8, 8x 25.3, 16x 43.3; per generated frame by size: 384x720 (0.28 MP) 0.141 s, 720x384 (0.28 MP) 0.136 s, 1081x577 (0.62 MP) 0.229 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
- 4passed10h 0m into the runtook 3m 31s
startup 66.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 66.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 77.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 15.2 s (the cold first one 0.7 s) and count once; the other 63 (525 frames) took 62.6 s, scaled to grading's other 2175 frames: 275 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.6, 8x 23.5, 16x 39.0; per generated frame by size: 384x720 (0.28 MP) 0.118 s, 720x384 (0.28 MP) 0.142 s, 1081x577 (0.62 MP) 0.318 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 and the session is over. The last self-check passed: server ready in 66 s of the allowed 300 s, and the projected whole-pass time is about 275 s of the 2,250 s allowed.
The shipped system runs a frozen RAFT-large flow model on both endpoint frames. Two networks I trained from scratch on Kinetics-400 train-split videos then synthesise the intermediate frames. Their outputs are averaged, each also averaged with a time-reversed pass.
On my own validation clips (hard Kinetics clips I held out, not the real evaluation) the ensemble is only slightly better than either network alone:
| Factor | LPIPS | FloLPIPS |
|---|---|---|
| 4x | 0.0513 | 0.0608 |
| 8x | 0.1012 | 0.1138 |
| 16x | 0.1191 | 0.2050 |
The improvement from longer training was nearly flat in the second half of the run. I tried a few other inference options and none helped, so none are shipped: horizontal-flip averaging, sharpening or blurring the output, hierarchical interpolation and swapping in SEA-RAFT as the flow model.
RAFT-large is the only pretrained component used, and architecture.json declares it. It also lists SEA-RAFT as an offline experiment that is not shipped, and LPIPS/AlexNet and PWC-Net as development-only helpers. No VFI checkpoints were used anywhere.
Everything is in /workspace/output/, including training code, data provenance and the training and evaluation logs.