Overview Demo Architecture
Python refresher

Live TLE Satellite Visualizer

Pulls TLE sets from CelesTrak, propagates positions with SGP4, and renders satellites moving in a 3D scene at their live positions. My focus for the project was to re-fresh my Python experience and have a well layed out code structure, performance awareness, and clean separation across modules.

Python
CelesTrak TLE feed
SGP4 propagation
VisPy rendering
Satellite view around Earth
Single view: Earth context plus satellite motion.

Project overview

The app fetches TLE text, parses satellite records, propagates to the current time, then updates a marker cloud in a live render loop. Cache logic keeps network traffic low during iteration.

Input
CelesTrak TLE text, grouped as name, line 1, line 2.
Compute
Batch SGP4 propagation to ECI position vectors for the current timestamp.
Output
3D visualization showing satellites moving relative to Earth.
Example TLE lines used during development
STARLINK-33811
1 63504U 25071M   26023.28614915  .00041226  00000+0  13958-2 0  9994
2 63504  53.1611 351.1581 0001773  86.6161 273.5043 15.30212771 45751

STARLINK-33825
1 63505U 25071N   26024.21202195  .00069628  00000+0  23363-2 0  9999
2 63505  53.1620 346.2700 0001933  73.6037 286.5177 15.30265358 45960

Demo

Live Satellite Motion

Python was chosen for its balance of readability and performance. The app handles 14,000+ satellites at 30+ FPS on a standard laptop simulatenously. Here in a live view, if you look closely you can see the smooth updating of all satellite positions at 30 FPS with no lag. Satellite positions are updated in real-time using SGP4 propagation based on TLE data fetched from CelesTrak.

Real-time satellite positions move slowly. Look closely to see the smooth position updates.

Time Lapse Motion

I've also included a time-lapse version of the same run. This speeds up satellite motion so you can see how they orbit Earth over time and that they are actually following expected orbital motion.

Time-lapse video to observe orbital motion.

Technical architecture

The code splits responsibilities across small modules so each file stays readable and testable.

data_source.py
Fetches TLE text from CelesTrak and manages local caching with a TTL.
elements.py
Parses TLE triples and builds SGP4 satellite records.
propagation.py
Converts time to Julian date and propagates all satellites to ECI positions in batch.
sat_viz_app.py
Owns the VisPy scene, camera controls, and the update loop that moves markers each tick.
main.py
Wires config, data fetch, propagation, then launches the viewer.

Connect

Want to talk about Python tools, simulation work, or visualization workflows. Reach out.