Runs Without a GPU
Pure CPU tracking - no CUDA, no inference engine, no cloud. The default profile has been tested at 32+ FPS on a Raspberry Pi live video stream.
Deneb Systems / Sky Tracker
C++ tracking core, installable as a Python package. Lock onto a target in one call, get position every frame. Tested at 32+ FPS on a Raspberry Pi live video stream, no GPU, no cloud.
C++ tracking core with Python and Node.js SDK surfaces. Runs without a GPU - from a developer laptop to a Raspberry Pi 4 on the edge.
Pure CPU tracking - no CUDA, no inference engine, no cloud. The default profile has been tested at 32+ FPS on a Raspberry Pi live video stream.
Measured on real footage on a Windows laptop CPU with no GPU. Raspberry Pi live-stream testing reaches 32+ FPS with the default profile.
The tracking algorithm is compiled C++17. Install it as a Python wheel - no build step on your side. The same binary powers the CLI, Python, and Node.js surfaces.
Lock one or more targets by bounding box. Stable IDs keep close targets separate; when the image is unclear, a target briefly follows its motion instead of jumping to a neighbour.
Python bindings for frame-level OpenCV loops. Typed Node.js package for video jobs, CSV parsing, and server workflows. Same telemetry schema across all surfaces.
We're testing on real-world footage. Request a free evaluation key, run it on your target, and tell us what worked and what didn't. A short video is worth more than any metric.
defaultRecommendedBest speed/quality balance for most desktop and edge tracking jobs.
correlationIdentity firstKeeps a visually distinctive selected target stable, with less bbox resizing.
adaptiveTighter bboxFollows target width and height more closely, with additional CPU cost.
Real sky footage. Drones, birds, and aircraft tracked frame-by-frame with zero pre-training.
Visual multi-track demo with color-coded IDs, prediction vectors, and bounding boxes. Production metrics come from labeled gates.
Predicted gates and one-to-one assignment reduce ID stealing during close passes. Ambiguous tracks can coast instead of snapping to a neighbor.
After a short coast, size, color, and position cues are scored before new visual evidence is accepted.
Mark the target - watch it track in real time
Sky Tracker runs one coordinated tracking session for the objects you explicitly select. Each target keeps its own identity, motion state, visible box, and telemetry even when paths converge and the visual evidence becomes difficult to separate.
Seed each object with its own bounding box. The tracker follows what you chose instead of classifying everything in the scene.
Every selected object gets persistent state and its own telemetry stream, so downstream code can address the same target over time.
One-to-one observation ownership prevents two tracks from claiming the same visual evidence when objects move close together.
Motion predicts where each box should search next. When evidence is ambiguous, a target can coast briefly instead of jumping to its neighbor.
Selection, per-frame updates, identity ownership, and telemetry in one focused demo.
Birds, drones, and fast-moving projectiles - tracked live from raw video with zero pre-training.
Small bird sample used as visual demo footage. Customer deployments should be scored with labeled clips.
Raven in open-sky flight, useful for qualitative inspection and future customer-style labeling.
Fast object sample for qualitative scale-change demos. Accuracy claims require labeled evaluation.
High-velocity projectile sample for visual review. Use the focused gate or customer labels for metrics.
Desktop figures are measured on actual video, not synthetic benchmarks. Raspberry Pi live-stream figures come from real target hardware with the default profile. Identity results describe labeled gates, not every possible scene.
Use Python when you want direct control over frames, bounding boxes, telemetry, and OpenCV integration. It fits notebooks, evaluation scripts, and robotics pipelines.
1import cv2, sky_tracker23cap = cv2.VideoCapture("your-footage.mp4")4fps = cap.get(cv2.CAP_PROP_FPS) or 30.05dt = 1.0 / fps67# Lock onto target in the first frame8ok, first_frame = cap.read()9tracker = sky_tracker.Tracker("default")10tracker.lock(first_frame, bbox=(715, 174, 32, 20))1112while cap.isOpened():13 ok, frame = cap.read()14 if not ok:15 break16 result = tracker.update(frame, dt)17 print(18 f"[{result.frame:04d}] "19 f"center=({result.cx:.1f}, {result.cy:.1f}) "20 f"conf={result.confidence:.2f} "21 f"state={result.state}"22 )
Free 30-day key to test on your own footage. No forms, just email us. Paid plans for when you're ready to ship.
We're in early testing and want real-world feedback. Run it on your footage, tell us what worked - a short video is all we ask.
perpetual · upgrades 50% off
Perpetual licence for the current version. Single project, no redistribution. Ideal for researchers and hobbyists.
subscription · updates included
Annual subscription for teams embedding the tracker in a product or internal tool. Binary redistribution rights included.
Not sure which plan fits? Email us.
SDK evaluation
Attach the SDK request token from your target device. We review each request before issuing a key.
Opens a short form. Evaluation access is granted after review.