NNEIL.VISIONby neilball
/ Basketball Pose Studio STUDIO 02
SPATIAL REPLAY

The game. From your perspective.

SYNTHETIC DEMO
FREE ORBIT
P10 : 020:0030.0
10 synthetic players
Source-aware action camera
↔   Drag to orbit · Scroll to zoom
ZYX

Building your courtside view

Loading the illustrative demo…

94 × 50 FT · NCAA
TIMELINEObserved tracking00:00.000/01:30.000
FRAME 000001
3D reconstructionSource coordinates · inches → feetNEIL.VISION / by neilball
REVIEW THE DATA MODEL

Tell us what the fields mean.

The original upload is saved. Review units, time, origin and IDs before reconstruction. Confidence is never interpreted as height.

IMPORT NEEDS ATTENTION · v1.4.0

The game could not load.

You can keep this message open while troubleshooting. Files that finished uploading remain privately retained.

NEIL.VISION / UPLOAD

Upload and reconstruct.

Interrupted transfers can resume in this browser within 24 hours when you reselect the same files. Allow local site storage to keep progress after a reload.

Keep this tab open until the upload completes.

YOUR GAME, RECONSTRUCTED

Bring the game into 3D.

Upload tracking files, then reconstruct and analyze them in your browser.

Advanced format options

Use a .cvmap.json recipe to declare units, timing, axes, and columns. Unknown original files remain retained.

Uploads are retained privately by neilball for logging and troubleshooting. You will see the full notice before submitting. Videos added through the video tool stay on your device. Retention details

Pose ZIPs automatically find output.live.pose* or *pose.clean folders, including nested .output files. Large games use disk-backed playback. v1.4.0. For optional conversion, use the Python converter to create an indexed file for faster loading. See .

DATA GUIDE

From raw feed to full-court replay.

The studio reads Hawk-Eye pose clean / complete feeds, centroid-only observations, wrapped post-game combined events, and documented basketball / 3D marking tables. Both previous Courtvision v1 files and the v2 format are supported.

Load directly

Open native Hawk-Eye / marking feeds, legacy SportVU moments, JSON / JSONL / JSON sequences, CSV / TSV / semicolon / pipe tables, XML, YAML, TOML, Excel / ODS workbooks, Parquet, Arrow IPC / Feather v2, SQLite, MessagePack, CBOR, and numeric NPY / NPZ arrays. ZIP, 7z and TAR bundles are unpacked; gzip streams and bzip2 / xz compressed TAR archives are supported. Originals are saved privately before parsing. Interrupted uploads can resume in the same browser within 24 hours of starting.

Review unfamiliar data

Preview the fields and declare stable entity IDs, time basis, units, coordinate origin, axes and court dimensions. Workbooks and databases are reviewed by sheet / table; skip rosters and summaries. Long entity rows, wide entity columns, joint rows, named joints and declared COCO 17 / BODY_25 / MediaPipe 33 orders are supported. Download a reusable .cvmap.json recipe and select it alongside future files. Frame-only data needs actual FPS. A countdown game clock alone cannot establish continuous motion.

Missing height stays missing. 2D observations use floor markers. Body-local poses open in a separate inspection view; court placement, travel speed and absolute height remain unavailable. Image coordinates and bounding boxes require a calibrated image-to-court homography; no airborne depth is inferred.

Scientific and unusual containers

Use the read-only local bridge for HDF5, MATLAB numeric variables, Avro containers, different tensor-axis orders, whitespace / fixed-width tables, and single bzip2 / xz / zstd / LZ4 streams. Protocol Buffers require their schema and framing. Raw video, PDFs, executable pickles and opaque vendor binaries need a separate export or extraction workflow.

Download conversion bridge Full format catalog and support limits

Pack a full game

The included converter runs on your computer, removes repeated metadata and builds a random-access frame index. It preserves all frames and converts declared source length units to feet. It retains possession, clock flags, revisions, ball orientation/spin, and event records.

Download pack_pose.py
pip install libarchive-c
python pack_pose.py game.7z --out game.cvpose.gz

7z conversion needs libarchive. On Windows, install py7zr instead for the portable extraction fallback. JSON, .output, ZIP and folders need no extra packages. Use --out-dir for mixed games, or --chunks-dir for indexed segments.

How the reconstruction works

Action cameras and review

Choose 2K Action, 2K High, Broadcast Follow, Tactical Follow, Player Shoulder, or Player Eyes. Tune height, distance, responsiveness, lead, and direction. Use Review for A/B loops, pose ghosts, rulers, arrows, bookmarks, and two-anchor video alignment. Saved sessions use this browser’s local storage.

Feed fidelity

Ball orientation is interpreted as a rotation vector, not Euler angles. Spin is shown only when supplied. Imported event metrics remain distinct from geometry-derived measurements. Latest revisions and feed priority resolve duplicate pose frames. The Data tab reports missing intervals, lineup counts, and import errors.

Included sample

The public demonstration uses synthetic player positions and joints. It is not captured game data. Your uploads are stored privately by neilball; other visitors cannot browse them. Event-only files remain discrete participant snapshots.

Read the compact file specification ↗
THE CONTROLS

Find your perspective.

Play / pauseSpace
Previous / next observed frame← →
Jump one secondShift + ← / →
Reset cameraR
Follow selected playerF
Clear selectionEsc
Set clip start / end[ ]
Save a bookmarkB

Choose Free Orbit to drag and zoom. Dynamic camera modes can also be zoomed with the mouse wheel. Right-drag to pan. Scroll to zoom. Click a player to inspect them. Touch: one finger orbits; two fingers zoom and pan.

MAKE IT YOUR CAMERA

Stay with the action.

2K views trail the attack. Broadcast and tactical views track the ball. Player views use the selected player's head direction.

Automatic direction uses feed possession and team direction when available. A motion-based camera estimate is identified in the view. These camera estimates do not become tracking observations.

THE COURT, YOUR WAY

Choose the useful layers.

Density uses observed time only and the selected player, or all players if none is selected. Event-only feeds have no continuous motion trails or dwell-time density.

Rendering geometry can be adjusted without changing source coordinates.

ON THIS DEVICE

Your saved sessions.

Game data is saved in this browser. Video files must be reopened; bookmarks and alignment settings are retained.

GO TO A MOMENT

Find it by the clock.

If a stopped clock repeats, the nearest matching observation to the current timeline position is used.