PUNCH
Public FITS Data Visualization Workflow
I built an independent workflow for turning public NASA PUNCH Level 3 FITS data into readable stills, frame sequences, timestamp overlays, and animation through Python processing and visual post-production.
Overview
PUNCH began as a question about whether public heliophysics data could be turned into useful visual products without already having a mission visualization pipeline. The project used public data from NASA’s Polarimeter to Unify the Corona and Heliosphere mission and developed a practical route from unfamiliar FITS files to processed images, ordered frame sequences, overlays, and animation.
The work involved more than applying a filter to a single image. I inspected multidimensional FITS structures, worked through certificate and download-host problems, extracted science planes, tested normalization and stretching methods, indexed thousands of frames, mapped cadence and timestamps, generated transparent overlay sequences, and completed crops and loops in After Effects.
The resulting case study is about technical translation: entering an unfamiliar scientific-data environment, building a repeatable visual pipeline, and communicating the output without confusing independent processing with official mission products or new scientific measurement.
How It Started
On October 27, 2025, I asked whether PUNCH data could be used with Python and FITS tooling to create imagery related to 3I/ATLAS. I wanted to know whether the data could be processed for free and whether the result would be actual image information rather than a fabricated visualization.
The work quickly became a practical processing project. Early experiments rendered individual files and running-difference views. Later stages expanded into batch download and conversion, consistent stretching, full sequence export, cadence correction, timestamp overlays, and animation finishing.
The project also required careful interpretation. Enhancing faint structure can make motion more visible, but it does not create new measurements or prove that every visible feature has the interpretation a viewer first assigns to it.
Can unfamiliar public mission data be translated into a transparent, repeatable visual workflow while preserving the boundary between processing, interpretation, and scientific claim?
Architecture
Acquire and Inspect
The workflow locates public PUNCH Level 3 products, downloads date-specific FITS files, and inspects their dimensions, headers, and usable image planes. Download issues led to a change in host and a more reliable acquisition path.
Extract and Normalize
Python and Astropy/FITS-style tooling extract the image data, remove invalid values, clip extreme percentiles, normalize the range, and apply asinh or related stretches to make faint structure visible without treating the transformed image as a new measurement.
Cadence and Frame Mapping
The production pipeline scans the FITS set into an index, builds a corrected cadence table, exports ordered frames, and writes a frame map that preserves the timestamp associated with each image. One recovered run indexed 9,838 frame rows.
Output and Overlays
The workflow produces still images, high-bit-depth exports, full sequential frames, running-difference products, and transparent timestamp overlays. The selected presentation used clean bottom-left timestamps aligned to the science frames.
After Effects was used to crop, loop, and assemble the final visual sequence. Public captions and outreach language identified the work as independent processing of public PUNCH data and credited the mission without implying official authorship or endorsement.
Development Timeline
Project origin
The project began with a question about using PUNCH FITS data, Python, and image processing to visualize data around 3I/ATLAS.
Initial rendering and comparison
FITS inspection, science-plane extraction, running-difference ideas, target overlays, and early PNG output were developed.
Acquisition and image-processing pipeline
Certificate and host problems were resolved, and the workflow produced visible 4096 × 4096 image output from mission data.
Stretching and publication work
Normalization, asinh stretching, high-bit-depth output, public captions, and responsible sharing language were refined. A 255-frame animation was described in the public-copy work from this period.
Sequence production
The pipeline expanded into full-sequence export, FITS indexing, cadence correction, frame maps, timestamp overlays, and After Effects finishing.
Portfolio framing
The completed workflow was recognized as a bridge between visual-production experience and scientific or mission-data visualization.
Results and Current Boundaries
Complete data-to-image path
The project established a repeatable route from public FITS files to processed stills, ordered sequences, overlays, and animation-ready output.
Production-scale sequence handling
The workflow moved beyond one-off images into thousands of indexed frame rows, cadence mapping, sequential export, and aligned timestamp graphics.
Technical learning made visible
An unfamiliar scientific file structure and Python environment were successfully inspected, debugged, and converted into a usable visual pipeline.
This is an independent visualization workflow using public PUNCH data. It is not an official NASA, Southwest Research Institute, or PUNCH mission product, and the visual processing does not constitute new scientific measurement or a peer-reviewed discovery.
Behind the Build
This project was less about writing one script and more about learning how to move through an unfamiliar scientific format without losing the connection between the source data and the final image.
What I built
A Python workflow for inspecting FITS files, locating image data, normalizing and stretching it, exporting frames, building cadence maps, generating timestamp overlays, and finishing the sequence in After Effects.
The key idea
Scientific files are not automatically presentation-ready images. The workflow preserves the source order and timestamps while translating a wide numerical range into something a viewer can actually see.
Selected technical detail
Mapping scientific values into visible pixels
lo, hi = min(values), max(values)
if hi == lo:
pixels = [0 for _ in values]
else:
pixels = [
int((value - lo) * 255 / (hi - lo))
for value in values
]This simplified step maps the numerical range into visible grayscale values. The historical workflow used more refined stretching and filtering, but the principle is the same: reveal structure without pretending the processing created new measurements.
Evidence to show on the page
These are the strongest visual proof points for a recruiter or technical reviewer. The image and video URLs can be inserted after the Squarespace asset list is finalized.
A raw or minimally viewed frame beside the processed result.
The finished or shortened animation built from the processed frames.
FITS inspection, frame export, cadence mapping, overlays, and final assembly.