~/satyajit

TrackEverything: dense 3D tracking that grows with the scene, not the video

mdjsonmcp

2026-09-27 · 27 min · 3d · point-cloud · computer-vision · video-understanding · slam · benchmarks

Why read this

Notabletop 60%

Explains TrackEverything's voxel de-duplication and 3D WAFT, then checks its claims: the 20-point lead is APD-P over one baseline, 10+ FPS excludes geometry.

  • Checked against the source
  • A lasting reference
  • A new technique

3D & spatialNeeds a workstation GPUResearch paper

How this was scored
Is it new?
2 of 3: A real new idea, method or capability
Can I trust it?
3 of 3: Reproduces the headline result, or shows from primary files it is wrong
Can I run it?
0 of 3: Closed, nothing to run
Will I understand it?
2 of 3: Mechanism from first principles with figures
Can I act on it?
1 of 3: General advice
Will it last?
2 of 3: A reference for a year or more
Does it affect many?
1 of 3: A specialist community
Only here?
2 of 3: A teardown or measurement few others did

Score 60 of 100, ranked 394 of 701 rated articles. Each question is answered 0–3 by hand, and a 3 is rare. How articles are scored

A repost on X summed TrackEverything up in five claims. It treats the video as a 3D scene and removes duplicate points. It separates static from dynamic points and tracks the moving ones efficiently. 3D WAFT makes 4D correlation efficient. It runs at 10+ FPS on a 40 GB GPU. It tracks 1000+ frame videos.

The paper is TrackEverything: Long Horizon Dense Tracking via De-Duplicating 3D Scene Representations (arXiv 2609.30222, posted 24 September 2026), by Ayush Jain, Sreeharsha Paruchuri, Ishita Gupta, Fan Zhang, Tanner Schmidt, Jakob Engel, Katerina Fragkiadaki and Adam W. Harley, of Carnegie Mellon and Meta. I read v1 and the project page.

Three hold as written. WAFT does not make correlation efficient; it removes the correlation volume. The frame rate is the tracker's alone: with its geometry model in the loop, the paper's end-to-end figure is 7.2 FPS. The code was not out when I first wrote this; it came out on 20 October, and the section on it checks it against the paper.

The idea underneath is an old one from SLAM: store the world, not the observations. The map in FAST-LIO2 from scratch downsamples each new scan into voxels it already has. TrackEverything does that to a point tracker's memory.

Left, top: a log-scale plot of active tokens against frames processed. A red line of frame-local tokens climbs from about 200 thousand to 4.86 million at 400 frames; a green line for the persistent 3D scene state stays near 10 thousand, ending at 13.4 thousand, annotated 362 times fewer. Left, bottom: a bar chart of 3D APD with D4RT and VDPM marked OOM and TrackEverything at 31.2. Right: six input videos (a show jumper, big cats, sheep in snow, a herd of horses, two robot arms) each with its dense 3D point tracks drawn as coloured trails over a grey point cloud.
The teaser: frame-local tokens grow linearly with video length while the de-duplicated scene state stays near flat, and dense 3D tracks on six videos, with trails drawn only for moving points (TrackEverything paper, Figure 1).

Why dense tracking forks in two

A point tracker takes a pixel at time tt and returns where that bit of surface is in every other frame. Count what "every point" means for TT frames of H×WH \times W pixels.

Memory grows with length because the representation is frame-local. Every frame arrives as a full grid of tokens whether it shows anything new or not: a camera panning across a desk re-encodes the same desk every frame. Tokens grow as P⋅TP \cdot T for PP tokens per frame, and whatever correlates tracks against frames grows faster. RAFT's all-pairs correlation volume for two frames holds (hw)2(hw)^2 similarities, one per pair of feature pixels, hence "4D". At an eighth of a 512 × 512 frame's resolution that is 4,096² ≈ 16.8 million entries, 67 MB in fp32 per pair; at a quarter, TrackEverything's feature resolution, sixteen times that, about 1.07 GB (both reasoned).

The way out follows from what a video is: 2D projections of one 3D world. The desk is one desk. Keep state per piece of surface in world coordinates, and a frame that re-observes the desk adds nothing.

A persistent world-frame scene track

A scene track is a token that stands for a piece of physical surface rather than a pixel. It carries:

Persistent means it survives occlusion and leaving the frame: once born, it stays in the scene memory. World frame means a static point does not move when the camera does, so its whole trajectory is one 3D point, not TT of them. That is where the static/dynamic split gets its savings. For all NN unique scene points the model outputs trajectories X∈RN×T×3\mathbf{X} \in \mathbb{R}^{N \times T \times 3}, visibility logits V∈RN×T\mathbf{V} \in \mathbb{R}^{N \times T} and static/dynamic logits S∈RN\mathbf{S} \in \mathbb{R}^{N}.

How it works

The inputs are an RGB video and a per-frame pointmap, a 3D world point for every pixel, from depth sensors or a feedforward model: VGGT-Ω in the main results (the model WorldCrafter is checked with), Pi3 in some ablations. The tracker never estimates geometry or poses itself (compare Depth Anything 3 in ROS 2, where the metres also come from outside the model).

Architecture diagram in three panels. Encoding: an input video goes to a visual encoder producing 2D features and to a frozen geometry predictor producing a 3D point cloud; both are unprojected into a 3D feature cloud. Endpoint refinement: an endpoint refiner takes x-source, x-target, t-source and t-target and outputs a flow delta x at the target time, visibility in the target camera, and a static mask and a dynamic mask. Trajectory refinement for dynamic points: endpoint predictions and source positions are initialised with constant velocity into track tokens with a CLS summary token, pass through within-track attention and cross-attention to the scene (keys and values from the feature cloud), giving dense tracks for dynamic points, which are merged with static predictions into dense 3D tracks for all points.
The architecture: encode and unproject a window into a 3D feature cloud, refine every point's endpoint and classify it static or dynamic, then decode full trajectories only for the dynamic points (TrackEverything paper, Figure 2).

Encoding one window

The video is cut into non-overlapping windows of L=16L = 16 frames. A frozen DINOv3-small (20M parameters) plus a trainable ViT-Adapter head turns each frame into a feature map at a quarter resolution, H/4×W/4H/4 \times W/4 tokens of width 384. Each token is paired with the 3D point under it from the downsampled pointmap.

Within each frame, tokens are quantised into voxels of size vv (index ⌊x/v⌋\lfloor \mathbf{x}/v \rfloor) and tokens sharing a voxel are mean-pooled. Only within a frame: two surfaces can occupy the same place at different times, as when a hand passes where a cup was. The 16 frames' tokens join the tokens carried over from earlier windows (their tsrct_\text{src} is −1-1) in one space-time cloud.

The endpoint refiner

To hand points to the next window and merge duplicates, the tracker only needs each point's position at the window's last frame, so it solves that first. At inference the target frame ttgtt_\text{tgt} is always L−1L - 1.

Each point's feature gets four sinusoidal embeddings: source position, current guess of the target position, source frame, target frame. Then 3D WAFT: the 3D guess is projected into frame ttgtt_\text{tgt} with that camera's intrinsics and extrinsics, and the feature map is bilinearly sampled there, giving gtgt\mathbf{g}_\text{tgt}. The feature at the point's birth, gsrc\mathbf{g}_\text{src}, is sampled once. The transformer sees [fi;gsrc;gtgt][\mathbf{f}_i; \mathbf{g}_\text{src}; \mathbf{g}_\text{tgt}], runs self-attention over the whole cloud, and a small MLP decodes a 3D update Δx\Delta\mathbf{x}, a visibility logit and a static/dynamic logit. The guess moves, gtgt\mathbf{g}_\text{tgt} is resampled, and the loop runs again. The paper does not state the iteration count; its Figure 6 shows three.

What WAFT is

WAFT, Warping-Alone Field Transforms (Yihan Wang and Jia Deng), is optical flow built like RAFT without the cost volume. Instead of correlating every pixel with every other, it warps the second image's features by the current flow estimate, at high resolution, and lets the network compare them with the first image's. Its abstract reports first place on Spring, Sintel and KITTI at lower memory cost.

In 3D the warp is a camera projection of the 3D guess. The signal is template matching: if gtgt\mathbf{g}_\text{tgt} looks like gsrc\mathbf{g}_\text{src}, the guess is on the right surface; if not, it must move. Each point costs one feature vector per iteration, not a volume. A guess that projects off-screen is clamped to an extended canvas and sampled with replicate padding; the mismatch is what the visibility head learns to read as "not visible". (The paper expands WAFT as "warp-aligned feature transforms"; the paper it cites is titled Warping-Alone Field Transforms. Same method.)

Top row: a source frame at T equals 0 with red dots on toys on a table, then frames T equals 7 and 15 where red dots show where the zero-velocity guess projects and green dots show the true locations, joined by green arrows where they differ, mostly on a moving red cylinder and a box. Bottom: zoomed patches over iterations 0, 1 and 2. For a static point on a green toy, the sample sits on the right spot from iteration 0 onward. For a dynamic point on the red cylinder, iteration 0 samples the table beside it; by iteration 1 the sample is on the cylinder and by iteration 2 it is locked onto the right place.
3D WAFT in action. With a zero-velocity guess, camera projection alone puts static points close to the truth; a moving point's guess lands on background, and the mismatch between source and sampled features drives it onto the right surface within two iterations (TrackEverything paper, Figure 6).

The trajectory refiner, for moving points only

Only points classified dynamic get a full 16-frame trajectory, starting from constant velocity between source and endpoint. Each timestep's token combines the point's transformer feature, its gsrc\mathbf{g}_\text{src} and a feature sampled at that frame's constant-velocity position, plus a [cls] summary token per track. Layers alternate attention along one track's timesteps with cross-attention from its [cls] token to the scene cloud. Tracks never attend to each other (as in PIPs and D4RT), so training can decode a random subset and inference all of them. Static points keep their position.

Misclassification is cheap one way. A static point called dynamic just gets decoded, and can come back with zero motion. A dynamic point called static is frozen for the window, up to 16 frames of missed motion, and is reclassified in the next.

What one window predicts

De-duplication at the boundary

At the end of a window every point sits at the same timestep, and the rule that makes cross-frame merging safe applies: two things cannot occupy the same voxel at the same time. The cloud is voxelised at the predicted positions with v=0.02v = 0.02 in normalised scene units, through a sparse hash over ⌊x/v⌋\lfloor \mathbf{x}/v \rfloor, so there is no bounded grid. Tokens in a voxel are mean-pooled and keep the earliest birth. The survivors are the scene memory the next window's frames join.

Each merge also records which voxel every point went into and its offset r\mathbf{r}, so any pixel's full track can be exported by walking the maps back: Xorig(t)=Xvox[p](t)+r\mathbf{X}_\text{orig}(t) = \mathbf{X}_\text{vox}[\mathbf{p}](t) + \mathbf{r}. The offset is fixed over time, so everything within a voxel moves together.

Two rows. Top, window i: frames of a child cycling go into TrackEverything, giving 3D point tracks for the window; the points at the end of the window, 46k points, are voxelised into deduplicated points, 16k points. Bottom, window i plus 1: new frames go through a geometry predictor into a 3D point cloud of the current window, which is added to the scene memory from previous windows to make a new set of points to track; TrackEverything then produces 3D point tracks for window i plus 1.
Sliding windows and de-duplication: at one boundary, 46k end-of-window points collapse to 16k, which become the scene memory the next window's new points join (TrackEverything paper, Figure 5).

User query points, given as (t,x,y)(t, x, y), are never merged. An optional early merge (the appendix names the switch voxelize_on_endpoints) merges co-located static points after the first iteration instead of at the boundary; the labels settle in one iteration, so the rest of the window runs on fewer tokens.

The growth law

Put numbers on it with PP tokens per frame, windows of L=16L = 16, and ρ\rho the fraction of each frame that shows surface never seen before:

Nframe(T)=P T,M(T)=P (1+ρ (T−1)),A(T)=M(T−L)+L PN_\text{frame}(T) = P\,T, \qquad M(T) = P\,\bigl(1 + \rho\,(T - 1)\bigr), \qquad A(T) = M(T - L) + L\,P

NframeN_\text{frame} is what a frame-local tracker holds, MM the de-duplicated memory after the last merge, AA the peak inside the window in flight (memory carried in plus the window's own frames). Both NframeN_\text{frame} and MM are linear in TT; de-duplication cuts the slope from PP to ρP\rho P. A camera in a room it has already seen has ρ→0\rho \to 0 and the memory stops growing. A camera seeing only new ground has ρ=1\rho = 1, and de-duplication saves nothing.

The teaser gives the rate. Its red line reaches 4.86M frame-local tokens at 400 frames, so P=12,150P = 12{,}150 (reasoned). Its green line ends at 13.4k, 362 times fewer: in this model that clip has ρ\rho of about 0.03%, a camera that reveals very little that is new (reasoned).

At 400 frames and ρ=0.5%\rho = 0.5\% the widget holds 4.86M tokens frame-local, 36.4k in de-duplicated memory and 229.8k at the peak of the last window, 21.1× fewer; at 1,200 frames it is 14.58M against 278.4k, 52.4× (measured in the widget). Two things fall out.

First, the window in flight is a floor: its 16 frames (194,400 tokens at this rate) are held whatever the voxel size, because merging happens only at the boundary. The voxel ablation shows the floor in gigabytes: coarsening vv from 0.05 to 0.2 moves peak memory only from 11.2 to 10.7 GB (reported). Per-frame voxelisation shrinks it in the real model; the widget leaves that out, so its green lines are an upper bound.

Second, memory still grows with new territory. The limitations section says so ("active memory still continues to expand during perpetual open-world exploration"), and throughput tracks scene extent: the tracker alone runs at 8.4 FPS on Aria Digital Twin's multi-room scenes and 41.5 FPS on Panoptic Studio's single lab (reported).

Checking the results

TAPVid-3D and "over 20% APD"

TAPVid-3D is three datasets: Aria Digital Twin (ADT, egocentric indoor, about 300 frames), DriveTrack (driving, 25-300 frames) and Panoptic Studio (PStudio, about 150 frames), 50 clips each here. Real video has no dense ground truth, so scoring is on annotated query points. APD is the fraction of predictions within a distance of the truth, averaged over thresholds: APD-P uses 1, 2, 4, 8 and 16 pixels unprojected into 3D and is the stricter; APD-M uses 0.1, 0.3, 0.5 and 1.0 m.

On the first 48 frames (paper, Table 1; APD-P per dataset, reported):

MethodKindADTDriveTrackPStudioAvg APD-PAvg APD-M
D4RT (closed, its own numbers)all-frame dense40.841.049.643.8–
VDPMall-frame dense4.814.713.110.956.8
TrackEverythingall-frame dense45.728.230.134.772.6
DeltaV2first-frame dense44.328.430.434.473.0
TAPIP-3Dsparse45.626.730.034.172.2
CoTracker3sparse43.129.729.634.172.8

Every row but D4RT and VDPM uses VGGT-Ω geometry. What the "over 20% APD" claim is made of:

The more interesting result is the tie. Tracking every point in every frame costs nothing on the annotated points: 34.7 against 34.4 for first-frame DeltaV2 and 34.1 for both sparse trackers.

Long sequences against sparse trackers

On full-length TAPVid-3D (paper, Table 1; all with VGGT-Ω, reported):

MethodADTDriveTrackPStudioAvg APD-PAvg APD-M
TrackEverything40.026.527.231.272.0
DeltaV234.727.327.729.970.7
TAPIP-3D37.224.527.629.871.2
CoTracker334.527.427.129.772.1
SpatialTracker-v236.628.123.729.571.4

Memory and speed, and on which GPU

The complexity study runs on one L40S (the paper writes L40S-46G) on PointOdyssey, with 384 query points. TrackEverything tracks every point as well; the others track only the 384.

Six line plots. Top row against number of frames up to about 900: APD-M, latency in seconds per clip, and peak GPU memory in GB, for CoTracker3, Any4D, SpatialTracker-v2, DeltaV2-sparse, DeltaV2-dense and TrackEverything. Crosses mark out-of-memory. Any4D stops near 96 frames, SpatialTracker-v2 near 150, DeltaV2-dense near 200, DeltaV2-sparse near 450 and CoTracker3 near 550; TrackEverything continues to about 900 frames, with the highest APD-M, latency rising to about 43 s and memory rising slowly to about 15 GB. Bottom row against number of query points up to 10 thousand at 120 frames: TrackEverything's latency and memory stay nearly flat while DeltaV2-sparse and CoTracker3 latency climb and SpatialTracker-v2 runs out of memory near 1 thousand points.
Scaling with video length (top, 384 query points) and with query count (bottom, 120 frames) on PointOdyssey, on one L40S; crosses mark out-of-memory (TrackEverything paper, Figure 3).

The figure ships as a vector file, so I read the curves off its path coordinates (measured from the SVG). TrackEverything's peak memory is 8.1 GB at 48 frames, 10.0 GB at 336 and 14.9 GB at 896, the last point plotted; its latency is 2.1 s at 48 frames and 43.0 s at 896, about 20.8 frames per second (reasoned). CoTracker3 goes from 4.7 GB at 48 frames to 32.4 GB at 336 and runs out of memory after its 550-frame point. That is roughly 8 MB of growth per frame against 96 MB (reasoned).

The text says memory "remains under 30 GB even at 900 frames"; the plot shows half that. The abstract claims videos "exceeding 1000 frames within 40 GB of GPU memory", but nothing plotted reaches 1,000 frames. Extending the last segment gives about 15.8 GB at 1,000 (reasoned), on this dataset; a scene that keeps revealing new surface would climb faster.

Frame rates come from the appendix (paper, Table 4, full-length TAPVid-3D, reported):

ConfigurationADTDriveTrackPStudioAvg FPS
Tracker only, early merge8.419.541.523.1
With VGGT-Ω geometry, early merge4.58.78.47.2

Without early merge the averages are 12.6 and 5.6 FPS, at 31.2 APD-P against 31.3 with it. The table names no GPU; the paper's other timings are on the L40S. So "10+ FPS on a 40 GB GPU" is half true: the 10+ is the tracker without its geometry model (ADT's 8.4 misses it even then), end to end it is 5.6-7.2, and 40 GB is the paper's memory ceiling, not the card.

Ablations

From the paper's Table 2 (reported):

ChangeAPD-Ps/framePeak memory
Full model31.20.059.1 GB
Every point through the trajectory decoder31.20.2422.4 GB
Without 3D WAFT features29.3––
Without iterative refinement26.4––
No voxelisation (PointOdyssey)––out of memory
Voxel 0.005 / 0.02 / 0.2 (PointOdyssey)31.4 / 30.9 / 23.50.23 / 0.11 / 0.0324.0 / 15.0 / 10.7 GB
Window 8 / 16 / 24 frames31.3 / 31.2 / 29.80.04 / 0.05 / 0.068.1 / 9.1 / 11.3 GB

What is not in the box

The code (as of 27 September; see the 20 October section below). The repository linked from the project page, ayushjain1144/trackeverything, was at commit 5ac9cfe (24 September 2026): a README that said "Code release soon (maybe next week)" and a teaser image. Nothing in the article above the update was checked against code; the only identifier the paper leaks is the early-merge switch. The release is also to carry the authors' PointOdyssey fixes: camera poses off by one frame in 16 sequences (about 25k frames), enough to move reprojected tracks by more than 600 px in fast pans. Anyone training on PointOdyssey wants those.

Merges are permanent. Mean-pooling cannot be undone, so a tracking error that puts two surfaces in one voxel fuses them for good. The paper's mitigation is to pass important points as queries, which are never merged.

There is no eviction. Memory grows with explored space; the authors name spatial cache eviction as the next step for hour-long sequences. FAST-LIO2 deletes map points as its local window moves. This does not, yet. (The release adds an experimental cap, below.)

The tracker is only as good as its pointmaps. On PStudio, APD-P is 23.5 with Pi3 geometry, 30.1 with VGGT-Ω and 71.7 with sensor depth, with no retraining. That is a strength (better geometry is free accuracy) and a dependence: from the two frame rates above, geometry is about 70% of the end-to-end time (reasoned).

The voxel is relative. v=0.02v = 0.02 is in unit-normalised scene coordinates, so its physical size scales with the scene: if normalisation puts the average point 3 m from the first camera, a voxel is about 6 cm across (reasoned, with an assumed scene size).

The model itself is small: 61M parameters, 20M of them the frozen DINOv3-small, trained on eight L40S GPUs for 100k iterations on 32-frame clips and 300k on a mix of 32 and 64, on Kubric, PointOdyssey and Dynamic Replica.

Where it sits

Most 3D work on this site reconstructs things that hold still: the rooms in the 3D reconstruction roundup, the wreck in SurfSLAM, FAST-LIO2's map. TrackEverything keeps a map in which things may move, and pays for motion only where it happens; the voxel as the unit of memory is the move VoxelTTO makes for Gaussians. The result is a tracker whose memory follows the scene rather than the clock, level on the annotated points with trackers that follow a few hundred. The code will say whether the mechanism is as clean as the paper.

20 October: the code is out

On 20 October Ayush Jain posted that the code and weights are out. The release commit, f0c18dd, adds 208 files to the repository; a link to a hosted demo followed on 22 October (c86f550, the commit I read).

ayushjain1144/trackeverything@c86f550 · snapshot 2026-10-23
tracked files
209
license
CC-BY-NC-4.0
branch
main
tests
none found
source
1.8 MB
commit date
2026-10-22
source by language
Python1.7 MB(76)CUDA124.0 kB(3)Shell13.2 kB(5)C4.7 kB(3)C++2.1 kB(2)

by size of tracked source at this commit, file counts in brackets; docs, data and vendored trees excluded

local clone, 2026-10-23 at c86f550 — branch, commit, commitDate, fileCount, hasTests, languages, license, licenseFile

What it contains:

katefgroup/TrackEverything@bc7fdfa · snapshot 2026-10-23
repo size
3.29 GB
task
keypoint-detection
library
trackeverything
license
cc-by-nc-4.0
largest file
546.1 MB
files
3
downloads
0
likes
6
gated
auto
3d-trackingpoint-trackingvideo

repo last modified 2026-10-22

Against the paper

The configs agree with the paper where the article could check it (all read from the configs): 16-frame windows, a 0.02 voxel, 384-wide features, three refinement iterations (the paper did not say; its Figure 6 showed three, and num_iters defaults to 3), 400k training steps (100k on 32-frame clips, then alternating 32 and 64), eight GPUs, PointOdyssey, Dynamic Replica and Kubric. 3D WAFT is what the paper describes: project the 3D guess with the camera, then bilinearly sample the feature map, with projections clamped to twice the image size and border (replicate) padding. Training runs at 384 × 512, which is 12,288 feature tokens a frame at a quarter resolution, close to the 12,150 I backed out of the teaser earlier (reasoned).

Where it departs:

Licence and access

Code and weights are CC BY-NC 4.0: no commercial use. The weights are gated on Hugging Face; access is approved automatically, but needs an account and a token. The vendored VGGT-Ω code is under the FAIR Noncommercial Research License, its weights are gated separately, and the default checkpoint path for it is a directory on the authors' cluster, so demo.py with default settings needs --vggt_omega_checkpoint or --geometry_backend pi3 on any other machine.

What I ran

I did not run the released checkpoint: it is gated, and the rules for this site's runs allow no tokens. Pi3, the open geometry model, is 3.8 GB, too big for the run budget. The repository has no unit tests. So I built the model from its configs with random weights and ran the inference path, demo_hf.py with supplied geometry, on a synthetic 16-frame clip at 192 × 256: a textured plane, a panning camera and a square moving in front. On two threads of a shared 4-core cloud VM, CPU only, it took 314.4 s, about 0.05 FPS, at 2,356 MB peak memory (measured). That says the CPU path works end to end and how slow it is; with random weights the static/dynamic split is arbitrary, so it is not a speed benchmark and says nothing about accuracy. One snag: a stray from re import T in the point-attention module breaks on Python 3.13 (the README tests 3.10); I shimmed it from my script.

The paper's accuracy is still unchecked here. The release makes it checkable for anyone with a GPU, a Hugging Face account and the TAPVid-3D data.

How I checked

For the original article I read the paper (v1) and project page and read Figure 3's curves off its SVG paths. For the 23 October update I read the release post and its replies through the fxtwitter mirror, cloned the repository at c86f550 and read its README, docs, configs, the WAFT and projection code and the PointOdyssey manifest, and read the Hugging Face metadata for katefgroup/TrackEverything (the weights download returned 401, gated). The parameter count and the CPU run come from the released code with random weights, in a scratch virtualenv with CPU-only PyTorch 2.8. Not verified: any benchmark number, the checkpoint's contents, and the FAQ's claims about small windows.

Cite this article

For attribution, please use the following reference or BibTeX:

Satyajit Ghana, "TrackEverything: dense 3D tracking that grows with the scene, not the video", ai.satyajit.si, September 2026.

bibtex
@misc{ghana2026trackeverything,
  author = {Satyajit Ghana},
  title  = {TrackEverything: dense 3D tracking that grows with the scene, not the video},
  url    = {https://ai.satyajit.si/articles/trackeverything},
  year   = {2026}
}
share