The gallery was sorted by filename (DL3DV, iPhone, Mip-NeRF). Sort by
dataset prefix instead so Mip-NeRF 360 comes first, then DL3DV, then
our own captures.
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
A line of plain text links below the TTB-DVSM title: Project Page / Code,
opening in a new tab (the Space runs in an iframe). The arXiv link is
prepared but left out until ARXIV_URL is filled in.
Co-Authored-By: Claude Fable 5.2 <noreply@anthropic.com>
The header keeps the TTB-DVSM title and the one-line description; the
spelled-out method name under the title is gone, which moves the app row
up by one line.
Co-Authored-By: Claude Fable 5.2 <noreply@anthropic.com>
Share one token budget between the frames and width sliders
An upload may use at most the tokens of 64 views at 960 px. Moving one
slider past the budget lowers the other just enough to fit (client side),
so a lower width buys more frames, up to 128 at 672 px. The width step
goes from 64 to 32 so that 128 frames land on 672 rather than 640.
reconstruct_cb checks the real token count as well: an input taller than
16:9 has more tokens per frame, so it is given fewer, evenly spaced frames
and the status line says so. Values outside the slider ranges are clamped.
Co-Authored-By: Claude Fable 5.2 <noreply@anthropic.com>
Rate-limit drags from the start of the previous render, not its end
During a drag the render loop skipped a render until 0.9 x the usual
iteration time had passed since last_render_t, and last_render_t was
stamped when a render finished. A new render therefore started every
(render time + 0.9 x iteration time), about half the image rate the FPS
readout shows: at Max W 960 on ZeroGPU one image per ~100 ms instead of
~52 ms. Stamp last_render_t when the render starts.
Co-Authored-By: Claude Fable 5.2 <noreply@anthropic.com>
Replace the Truck example with the mipnerf360 bonsai
Truck was the weakest-looking orbit in the gallery. Of ten orbit captures
baked the same way (64 evenly spaced inputs, long edge 960, DL3DV model),
bonsai scored highest on held-out views (27.2 dB vs 24.4 dB for Truck).
Baked with DVSM-TTB-p8-DL3DV-960p at 960x640; the thumbnail is frame 222.
The Space's 1 GB storage holds five examples, so Truck is removed.
Co-Authored-By: Claude Fable 5.2 <noreply@anthropic.com>
Use front views of the subject for the example thumbnails
The thumbnails were the middle frame of each capture, which showed the
toy from the side, the statue from behind and the truck from the rear.
Pick a frame that faces the subject instead (toy frame 38 of the 64
extracted, DL3DV scene 9 frame 162, scene 139 frame 157, Truck frame 230).
mipnerf360_garden already faced the table and is unchanged.
Co-Authored-By: Claude Fable 5.2 <noreply@anthropic.com>
The Space's 1 GB storage holds five examples; this one makes room for
iphone_toy. mipnerf360_garden stays.
Co-Authored-By: Claude Fable 5.2 <noreply@anthropic.com>
Add an iPhone video example baked with the general model
A 29 s handheld orbit of a desk toy, reconstructed the way an upload is:
64 evenly spaced frames, pi3x poses, DVSM-TTB-p8-general-960p at 960x544.
Co-Authored-By: Claude Fable 5.2 <noreply@anthropic.com>
Use the general checkpoint for uploads; drop "MLP" from the title
Uploaded images and videos are now reconstructed with
DVSM-TTB-p8-general-960p. The gallery examples were baked with
DVSM-TTB-p8-DL3DV-960p, so both models are loaded and a live session
renders each artifact with the model named in its hf_variant.
APP_MODEL_DIR now points at a directory with one sub-directory per
variant (the nvidia/DVSM layout) instead of a single model directory.
Wording: the subtitle reads "Test-time Baking ..." and the tagline says
"TTB bakes the scene ...".
Co-Authored-By: Claude Fable 5.2 <noreply@anthropic.com>
Also repair dynamo's stale CUDA interface in ZeroGPU workers
With the handler assertion out of the way, torch.compile got as far as
inductor's autotuner and failed with "Both events must be completed before
calculating elapsed time". torch._dynamo.device_interface.CudaInterface
copies torch.cuda functions when it is imported; the app imports it in the
main process, where ZeroGPU has swapped in CPU-side dummies, so the worker
kept a no-op synchronize and timed CUDA events that had not finished.
Rebind those copies to the real torch.cuda functions in the worker, next
to the earlier fix, and log what was repaired.
Co-Authored-By: Claude Fable 5.2 <noreply@anthropic.com>
Fix torch.compile AssertionError in ZeroGPU workers on torch 2.13
Rebuilding the Space picked up torch 2.13.0 from the ZeroGPU base image.
In a GPU worker, spaces 0.51.3 restores torch.cuda._maybe_exchange_device
to the _exchange_device builtin; torch 2.13's dynamo registers one handler
per function and fails on the duplicate ("Handler already registered for
<built-in function _cuda_exchangeDevice>"), so every viewer session died
during renderer warm-up.
Restore the real builtin at the start of both @spaces.GPU functions,
before anything compiles. No-op when the two are already distinct.
Co-Authored-By: Claude Fable 5.2 <noreply@anthropic.com>
The two DL3DV gallery scenes were baked from the distorted captures with
the principal point assumed at the image centre. Rebake them from the
undistorted DL3DV-140 frames with the corrected intrinsics; same 64 views,
960x544 and model as before. Thumbnails now use the undistorted frame too.
Co-Authored-By: Claude Fable 5.2 <noreply@anthropic.com>