Introduction

If you skip around this video, youโ€™ll catch some incredible image sequences of Saturn, its rings, and its moons shot by Cassini.

This video was stitched together by Jon Keegan, who left behind some helpful guidance on how to follow in his footsteps. Thank you Jon!

So Iโ€™m clearly mesmerized by some of this โ€˜footageโ€™. These are jittery, gritty sequences - each frame is ~1024x1024, the sequences twitch and flash between frames. My immediate take is that these feel like natural candidates for visual loops.

Note on VJ Loops

So (in many cases) if youโ€™re controlling a visual performance (much like a musical performance) you want to be able to compose on the fly.

To stick with the musical analogy: a fully mastered audio recording of a 5 piece band is only going to have so much longevity in a performance, whereas a sample pad of melodies, beats, and instruments provides the opportunity to mix and match.

The same (for the most part) applies to the amateur VJ. If a show is dynamic, I want to be able to match that energy on the fly and that means maintaining a bank of โ€ฆ loops.

Loops are typically video files ( often animations) that:

  • loop nicely (yoink!)
  • are animated to match a certain BPM
  • have generous alpha channels for live blending

There are free loops distributed online, marketplaces for purchasing packs of loops, and artists who create or commission their own. Iโ€™ve bought some helpful ones in the past, and edited some together myself as well.

(Loops aside, whatever VJ software of choice is fully capable of incredibly robust synthesis even in the absence of a massive pallette of video files. A little goes a long way!)

Some production setups basically amass close to a feature filmโ€™s worth of animation to back a well synchronized / rehearsed performance, while others deeply integrate into musical sampling and musical improvisation.

Anyway - hereโ€™s where Iโ€™m going with this: Iโ€™m determined to homebrew my own pack of ultra-rare Cassini loops.

Goals

Clearly Jon Keegan has already walked the path for me here. It does not look pleasant, and even at the end of the road sits 1024x1024 images which are less than ideal for my purposes.

That said, we have time on our side. In the 7 years since Jonโ€™s project, the datasets involved have been continually updated, cleaned, and aggregated as recently as April of 2021. Thatโ€™s exciting!

Open Questions

  • What are the odds of upscaling these images? Thereโ€™s gotta be some magic GANN/ANN/SNN or Nvidia hockey puck that can do that right?
  • Jon also mentioned the possibility of extracting some higher fidelity imagery from NASA provided TIFF files that he passed on due to difficulty in processing the media. Thatโ€™s a possible avenue worth exploring?
  • How difficult is it going to be to hunt down the money shots / sequences in this literal multimillion record dataset of snapshots?

Planetary Data

Jonโ€™s GitHub repo points us in the right direction for downloading the entire corpus of Cassini image data, which is separated into ~120 volumes of images and their associated metadata.

Luckily, since his project, some benevolent folks have merged the metadata into its own volume, so rather than having to unpack all of these images to index them, we can just download the 1GB metadata index volume.

Feast your eyes on this unholy masterpiece of future-proof data packing:


...

PDS_VERSION_ID = PDS3
RECORD_TYPE = FIXED_LENGTH
RECORD_BYTES = 3069
FILE_RECORDS = 407299
^IMAGE_INDEX_TABLE = "COISS_2999_index.tab"

OBJECT = COLUMN
NAME = FILE_NAME
DATA_TYPE = CHARACTER
START_BYTE = 2
BYTES = 22
FORMAT = A22
DESCRIPTION = "The name of the image file as stored on the archive
media."
END_OBJECT = COLUMN

OBJECT = COLUMN
NAME = FILE_SPECIFICATION_NAME
DATA_TYPE = CHARACTER
START_BYTE = 27
BYTES = 48
FORMAT = A48
DESCRIPTION = "Path name locating images in DATA directory on data
set volumes."
END_OBJECT = COLUMN

...

What youโ€™re looking at is an excerpt of a .lbl file in a format known as PDS3, which describes a corresponding HUGE .tab file (which quacks like a CSV but is not a CSV). Iโ€™m positive that this data format was designed with intelligence and foresight that I lack the acumen to fully understand. I fully respect that, but it presents with the difficulty that there is no easy-peasy parser at my fingertips for this. (Thereโ€™s a 100 page PDF on dealing with this file but we donโ€™t have time for that.)

Things of note:

  • itโ€™s packed by # of bytes and provides us with indices of start/stop points for each field
  • some of these fields are actually arrays that have their own byte offsets
  • luckily it looks like there are only a handful of data types to account for

Snake Charming

Without parsing this into some kind of database, I have no chance of querying it or finding the sequences Iโ€™m looking for.

So letโ€™s break out the old snake charming kit, google a regex cheatsheet and parse this into something dumb and usable for my purposes.


Last Updated 10/11/2021