Skip to content

seanwevans/4splat

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

66 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

splat!
  โ•ญ .4spl File Format โ•ฎ
โ•ญโ”€โ•ฏ                   โ•ฐโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฎ
โ”‚ The 4Splat Codec is a palette-based, lossless video compression format. โ”‚
โ”‚ It generalizes indexed-color images to 3D and 4D spatial-temporal data: โ”‚
โ”‚ (x, y, z, frame). Pixels across all frames are compressed into the      โ”‚
โ”‚ global color palette, and each pixel stores an index into this          โ”‚
โ”‚ palette. All values are little-endian and indices are row-major order:  โ”‚
โ”‚ t-major -> z-major -> y-major -> x-major.                               โ”‚
โ•ฐโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฏ

  โ•ญ Binary Layout โ•ฎ
โ•ญโ”€โ•ฏโ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ•ฐโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฎ
โ”‚โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ”‚
โ”‚โ–’โ–’โ•ญ Header โ•ฎ โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ”‚
โ”‚โ–’โ•ญโ•ฏ        โ•ฐโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฎโ–’โ”‚
โ”‚โ–’โ”‚ name         size        encoding    value      hex                 โ”‚โ–’โ”‚
โ”‚โ–’โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”คโ–’โ”‚
โ”‚โ–’โ”‚ magic        4 bytes     ASCII       "4SPL"     0x34 0x53 0x50 0x4C โ”‚โ–’โ”‚
โ”‚โ–’โ”‚ version      4 bytes     uint8[4]    {1,0,0,0}  0x01 0x00 0x00 0x00 โ”‚โ–’โ”‚
โ”‚โ–’โ”‚ width        4 bytes     uint32      Width                          โ”‚โ–’โ”‚
โ”‚โ–’โ”‚ height       4 bytes     uint32      Height                         โ”‚โ–’โ”‚
โ”‚โ–’โ”‚ depth        4 bytes     uint32      Depth                          โ”‚โ–’โ”‚
โ”‚โ–’โ”‚ frames       4 bytes     uint32      Frames                         โ”‚โ–’โ”‚
โ”‚โ–’โ”‚ paletteSize  4 bytes     uint32      PSize                          โ”‚โ–’โ”‚
โ”‚โ–’โ”‚ flags        4 bytes     bitmask     Flags                          โ”‚โ–’โ”‚
โ”‚โ–’โ•ฐโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฏโ–’โ”‚
โ”‚โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’ 32 bytes โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ”‚
โ”‚โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ”‚
โ”‚โ–’โ–’โ•ญ Palette โ•ฎโ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ”‚
โ”‚โ–’โ•ญโ•ฏ         โ•ฐโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฎโ–’โ”‚
โ”‚โ–’โ”‚              โ•ญ Splat4D PSize-1 โ•ฎ                                    โ”‚โ–’โ”‚
โ”‚โ–’โ”‚           โ•ญ โ”€ ... โ”€ โ”€ โ•ฎ        โ•ฐโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”คโ–’โ”‚
โ”‚โ–’โ”‚        โ•ญ Splat4D 2 โ•ฎ  โ•ฐ โ”€ โ”€ โ”€ โ”€ โ”€ โ”€ โ”€ โ”€ โ”€ โ”€ โ”€ โ”€ โ”€ โ”€ โ”€ โ”€ โ”€ โ”€ โ”€ โ”€ โ”€ โ•ฎ โ”‚โ–’โ”‚
โ”‚โ–’โ”‚     โ•ญ Splat4D 1 โ•ฎ  โ•ฐโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฎ    โ”‚โ–’โ”‚
โ”‚โ–’โ”‚  โ•ญ Splat4D 0 โ•ฎ  โ•ฐโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฎ  โ”‚  โ”‚ โ”‚โ–’โ”‚
โ”‚โ–’โ”‚ โ•ญโ•ฏ           โ•ฐโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฎ  โ”‚  โ”‚    โ”‚โ–’โ”‚
โ”‚โ–’โ”‚ โ”‚ name         size        encoding   purpose            โ”‚  โ”‚  โ”‚  โ”‚ โ”‚โ–’โ”‚
โ”‚โ–’โ”‚ โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค  โ”‚  โ”‚    โ”‚โ–’โ”‚
โ”‚โ–’โ”‚ โ”‚ mu_x         4 bytes     float      mean position in x โ”‚  โ”‚  โ”‚  โ”‚ โ”‚โ–’โ”‚
โ”‚โ–’โ”‚ โ”‚ mu_y         4 bytes     float      mean position in y โ”‚  โ”‚  โ”‚    โ”‚โ–’โ”‚
โ”‚โ–’โ”‚ โ”‚ mu_z         4 bytes     float      mean position in z โ”‚  โ”‚  โ”‚  โ”‚ โ”‚โ–’โ”‚
โ”‚โ–’โ”‚ โ”‚ sigma_x      4 bytes     float      std dev in x       โ”‚  โ”‚  โ”‚    โ”‚โ–’โ”‚
โ”‚โ–’โ”‚ โ”‚ sigma_y      4 bytes     float      std dev in y       โ”‚  โ”‚  โ”‚  โ”‚ โ”‚โ–’โ”‚
โ”‚โ–’โ”‚ โ”‚ sigma_z      4 bytes     float      std dev in z       โ”‚  โ”‚  โ”‚    โ”‚โ–’โ”‚
โ”‚โ–’โ”‚ โ”‚ mu_t         4 bytes     float      mean position in t โ”‚  โ”‚  โ”‚  โ”‚ โ”‚โ–’โ”‚
โ”‚โ–’โ”‚ โ”‚ sigma_t      4 bytes     float      std dev in t       โ”‚  โ”‚  โ”‚    โ”‚โ–’โ”‚
โ”‚โ–’โ”‚ โ”‚ r            4 bytes     float      red intensity      โ”‚  โ”‚  โ”‚  โ”œโ”€โ”คโ–’โ”‚
โ”‚โ–’โ”‚ โ”‚ g            4 bytes     float      green intensity    โ”‚  โ”‚  โ”œโ”€ โ•ฏ โ”‚โ–’โ”‚
โ”‚โ–’โ”‚ โ”‚ b            4 bytes     float      blue intensity     โ”‚  โ”œโ”€โ”€โ•ฏ    โ”‚โ–’โ”‚
โ”‚โ–’โ”‚ โ”‚ alpha        4 bytes     float  โ–ฒ   opacity            โ”œโ”€โ”€โ•ฏ       โ”‚โ–’โ”‚
โ”‚โ–’โ”‚ โ•ฐโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•‚โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฏ          โ”‚โ–’โ”‚
โ”‚โ–’โ”‚               48 bytes        references                            โ”‚โ–’โ”‚
โ”‚โ–’โ•ฐโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•‚โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฏโ–’โ”‚
โ”‚โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’ 48*PSize bytes โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ”ƒโ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ”‚
โ”‚โ–’โ–’โ•ญ Index โ•ฎโ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ”ƒโ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ”‚
โ”‚โ–’โ•ญโ•ฏ       โ•ฐโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•‚โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฎโ–’โ”‚
โ”‚โ–’โ”‚  โ•ญโ”€โ”€โ”€โ•ฎโ•ญโ”€โ”€โ”€โ•ฎโ•ญโ”€โ”€โ”€โ•ฎโ•ญโ”€โ”€โ”€โ•ฎโ•ญโ”€โ”€โ”€โ•ฎโ•ญโ”€โ”€โ”€โ•ฎโ•ญโ”€โ”€โ•‚โ•ฎโ•ญโ”€โ”€โ”€โ•ฎโ•ญโ”€โ”€โ”€โ•ฎโ•ญโ”€โ”€โ”€โ•ฎ     โ•ญโ”€โ”€โ”€โ•ฎโ•ญโ”€โ”€โ”€โ•ฎ  โ”‚โ–’โ”‚
โ”‚โ–’โ”‚  โ”‚ 0 โ”‚โ”‚ 1 โ”‚โ”‚ 2 โ”‚โ”‚ 3 โ”‚โ”‚ 4 โ”‚โ”‚ 5 โ”‚โ”‚ 6โ”›โ”‚โ”‚ 7 โ”‚โ”‚ 8 โ”‚โ”‚ 9 โ”‚ ... โ”‚I-2โ”‚โ”‚I-1โ”‚  โ”‚โ–’โ”‚
โ”‚โ–’โ”‚  โ•ฐโ”€โ”€โ”€โ•ฏโ•ฐโ”€โ”€โ”€โ•ฏโ•ฐโ”€โ”€โ”€โ•ฏโ•ฐโ”€โ”€โ”€โ•ฏโ•ฐโ”€โ”€โ”€โ•ฏโ•ฐโ”€โ”€โ”€โ•ฏโ•ฐโ”€โ”€โ”€โ•ฏโ•ฐโ”€โ”€โ”€โ•ฏโ•ฐโ”€โ”€โ”€โ•ฏโ•ฐโ”€โ”€โ”€โ•ฏ     โ•ฐโ”€โ”€โ”€โ•ฏโ•ฐโ”€โ”€โ”€โ•ฏ  โ”‚โ–’โ”‚
โ”‚โ–’โ•ฐโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฏโ–’โ”‚
โ”‚โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’ 8*I bytes โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ”‚
โ”‚โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ”‚
โ”‚โ–’โ–’โ•ญ Footer โ•ฎโ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ”‚
โ”‚โ–’โ•ญโ•ฏ        โ•ฐโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฎโ–’โ”‚
โ”‚โ–’โ”‚ name        size        encoding    value      hex                  โ”‚โ–’โ”‚
โ”‚โ–’โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”คโ–’โ”‚
โ”‚โ–’โ”‚ idxoffset   8 bytes     uint64                                      โ”‚โ–’โ”‚
โ”‚โ–’โ”‚ checksum    4 bytes     CRC32                                       โ”‚โ–’โ”‚
โ”‚โ–’โ”‚ end         4 bytes     ASCII       "LPS4"     0x4C 0x50 0x53 0x34  โ”‚โ–’โ”‚
โ”‚โ–’โ•ฐโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฏโ–’โ”‚
โ”‚โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’ 16 bytes โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ”‚
โ”‚โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ”‚
โ•ฐโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฏ

  โ•ญ flags โ•ฎ
 โ•ญโ•ฏโ–’โ–’โ–’โ–’โ–’โ–’โ–’โ•ฐโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฎ
 โ”‚โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ”‚
 โ”‚โ–’โ–’โ–’โ–’โ–’ 00 โ–’โ–’โ–’โ–’ 01 โ–’โ–’โ–’โ–’ 02 โ–’โ–’โ–’โ–’ 03 โ–’โ–’โ–’โ–’ 04 โ–’โ–’โ–’โ–’ 05 โ–’โ–’โ–’โ–’ 06 โ–’โ–’โ–’โ–’ 07 โ–’โ–’โ–’โ–’โ–’โ–’โ”‚
 โ”‚โ–’โ–’โ–’โ–’โ•ญโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฎโ–’โ–’โ”‚
 โ”‚ 00 โ”‚ ENDIANโ”‚ SORTEDโ”‚ PRECISION     โ”‚ COMPRESSION SCHEME            โ”‚โ–’โ–’โ”‚
 โ”‚โ–’โ–’โ–’โ–’โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”คโ–’โ–’โ”‚
 โ”‚ 01 โ”‚ INDEX WIDTH   โ”‚ SPLAT SHAPE   โ”‚ COLOR SPACE                   โ”‚โ–’โ–’โ”‚
 โ”‚โ–’โ–’โ–’โ–’โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”คโ–’โ–’โ”‚
 โ”‚ 02 โ”‚ INTERPOLATION TYPE            โ”‚ ENCRYPTION TYPE               โ”‚โ–’โ–’โ”‚
 โ”‚โ–’โ–’โ–’โ–’โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”คโ–’โ–’โ”‚
 โ”‚ 03 โ”‚ METADATA                                                      โ”‚โ–’โ–’โ”‚
 โ”‚โ–’โ–’โ–’โ–’โ•ฐโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฏโ–’โ–’โ”‚
 โ”‚โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ”‚
 โ”‚โ–’ Offset   Size    Flag            Bin Description                    โ–’โ”‚
 โ”‚โ–’ โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€  โ–’โ”‚
 โ”‚โ–’ 0x00     1       ENDIAN            0 Little-Endan                   โ–’โ”‚
 โ”‚โ–’                                    1 Big-Endian                     โ–’โ”‚
 โ”‚โ–’ 0x01     1       SORTED            0 No                             โ–’โ”‚
 โ”‚โ–’                                    1 Yes                            โ–’โ”‚
 โ”‚โ–’ 0x02     2       PRECISION        00 Float16                        โ–’โ”‚
 โ”‚โ–’                                   01 Float32                        โ–’โ”‚
 โ”‚โ–’                                   10 Float64                        โ–’โ”‚
 โ”‚โ–’                                   11 Float128                       โ–’โ”‚
 โ”‚โ–’ 0x04     4       COMPRESSION    0000 None                           โ–’โ”‚
 โ”‚โ–’                                 0001 Run Length Encoding            โ–’โ”‚
 โ”‚โ–’                                 0010 DEFLATE           (Katz, 1993) โ–’โ”‚
 โ”‚โ–’                                 0011 RAR             (Roshal, 1993) โ–’โ”‚
 โ”‚โ–’                                 0100 LZO          (Oberhumer, 1994) โ–’โ”‚
 โ”‚โ–’                                 0101 Zlib      Gaily & Adler, 1995) โ–’โ”‚
 โ”‚โ–’                                 0110 bzip2           (Seward, 1996) โ–’โ”‚
 โ”‚โ–’                                 0111 LZMA            (Pavlov, 1998) โ–’โ”‚
 โ”‚โ–’                                 1000 ZPAQ           (Mahoney, 2008) โ–’โ”‚
 โ”‚โ–’                                 1001 XZ              (Pavlov, 2009) โ–’โ”‚
 โ”‚โ–’                                 1010 LZ4             (Collet, 2011) โ–’โ”‚
 โ”‚โ–’                                 1011 Snappy          (Google, 2011) โ–’โ”‚
 โ”‚โ–’                                 1100 LZHAM        (Geldreich, 2013) โ–’โ”‚
 โ”‚โ–’                                 1101 Brotli          (Google, 2015) โ–’โ”‚
 โ”‚โ–’                                 1110 LZFSE            (Apple, 2015) โ–’โ”‚
 โ”‚โ–’                                 1111 Zstd          (Facebook, 2016) โ–’โ”‚
 โ”‚โ–’ 0x08     2       INDEX WIDTH      00 1-byte                         โ–’โ”‚
 โ”‚โ–’                                   01 2-byte                         โ–’โ”‚
 โ”‚โ–’                                   10 4-byte                         โ–’โ”‚
 โ”‚โ–’                                   11 8-byte                         โ–’โ”‚
 โ”‚โ–’ 0x0A     2       SPLAT SHAPE      00 Isotropic (1 ฯƒ)                โ–’โ”‚
 โ”‚โ–’                                   01 Axis-Aligned (3 ฯƒ)             โ–’โ”‚
 โ”‚โ–’                                   10 Full Covariance (6 vals)       โ–’โ”‚
 โ”‚โ–’                                   11 RESERVED                       โ–’โ”‚
 โ”‚โ–’ 0x0C     4       COLOR SPACE    0000 sRGB          (IEC 61966-2-1)  โ–’โ”‚
 โ”‚โ–’                                 0001 Linear sRGB   (IEC 61966-2-1)  โ–’โ”‚
 โ”‚โ–’                                 0010 OKLab         (Ottosson 2020)  โ–’โ”‚
 โ”‚โ–’                                 0011 Display P3  (DCI-P3 / P3-D65)  โ–’โ”‚
 โ”‚โ–’                                 0100 Rec.709        (ITU-R BT.709)  โ–’โ”‚
 โ”‚โ–’                                 0101 Rec.2020      (ITU-R BT.2020)  โ–’โ”‚
 โ”‚โ–’                                 0110 DCI-P3       (SMPTE RP 431-2)  โ–’โ”‚
 โ”‚โ–’                                 0111 ACES-AP0    (SMPTE ST 2065-1)  โ–’โ”‚
 โ”‚โ–’                                 1000 ProPhoto RGB (Kodak ROMM RGB)  โ–’โ”‚
 โ”‚โ–’                                 1001 Rec.2100      (ITU-R BT.2100)  โ–’โ”‚
 โ”‚โ–’                                 1010 CIE Lab     (CIE 1976 L*a*b*)  โ–’โ”‚
 โ”‚โ–’                                 1011 CIE XYZ D65     (ISO 11664-1)  โ–’โ”‚
 โ”‚โ–’                                 1100 ACEScg-AP1  (SMPTE ST 2065-1)  โ–’โ”‚
 โ”‚โ–’                                 1101 Rec.601      (ITU-R BT.601-7)  โ–’โ”‚
 โ”‚โ–’                                 1110 XYZ D50         (ISO 11664-1)  โ–’โ”‚
 โ”‚โ–’                                 1111 XYZ D65         (ISO 11664-1)  โ–’โ”‚
 โ”‚โ–’ 0x20     4       INTERPOLATION  0000 None                           โ–’โ”‚
 โ”‚โ–’                                 0001 Nearest Neighbor               โ–’โ”‚
 โ”‚โ–’                                 0010 Axis-align (lin/bi/tri/quad)   โ–’โ”‚
 โ”‚โ–’                                 0011 Smooth (cubic/bi/tri/quad)     โ–’โ”‚
 โ”‚โ–’                                 0100 Lanczos                        โ–’โ”‚
 โ”‚โ–’                                 0101 Gaussian                       โ–’โ”‚
 โ”‚โ–’                                 0110 Catmull-Rom                    โ–’โ”‚
 โ”‚โ–’                                 0111 NURBS                          โ–’โ”‚
 โ”‚โ–’                                 1000 Radial Basis Functions         โ–’โ”‚
 โ”‚โ–’                                 1001 Optical Flow                   โ–’โ”‚
 โ”‚โ–’                                 1010 Neural                         โ–’โ”‚
 โ”‚โ–’                                 1011 Akima Splines                  โ–’โ”‚
 โ”‚โ–’                                 1100 Inverse Distace                โ–’โ”‚
 โ”‚โ–’                                 1101 Fourier                        โ–’โ”‚
 โ”‚โ–’                                 1110 Moving Least Squares           โ–’โ”‚
 โ”‚โ–’                                 1111 Cubic Hermite                  โ–’โ”‚
 โ”‚โ–’ 0x24     8       METADATA   ???????? Anything                       โ–’โ”‚
 โ”‚โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’ 4 bytes โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ”‚
 โ”‚โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ–’โ”‚
 โ•ฐโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฏ

Test Suite

Test Description
crc32_known_value Confirms the CRC32 implementation reproduces the standard checksum for the canonical "123456789" vector.
checksum_matches_footer Ensures a freshly built video records the same checksum in its footer as produced by the compute helper.
idxoffset_helpers_agree Checks that forward and reverse idxoffset helpers agree on the palette/index boundary.
validate_succeeds_for_valid_video Verifies that a well-formed sample video passes validation.
validate_fails_for_bad_checksum Expects validation to fail when the footer checksum is tampered with.
validate_fails_for_null_video Asserts validation rejects a null video pointer.
validate_fails_for_bad_magic Confirms validation catches an incorrect magic number.
validate_fails_for_bad_version Confirms validation rejects files with an unsupported version field.
validate_fails_for_zero_width Ensures validation fails if the header width is zero.
validate_fails_for_zero_height Ensures validation fails when the header height is zero.
validate_fails_for_zero_depth Ensures validation fails when the header depth is zero.
validate_fails_for_zero_frames Ensures validation fails when the header frame count is zero.
validate_fails_for_zero_palette_size Ensures validation fails when the palette size is zero.
validate_fails_for_bad_footer_marker Confirms validation detects an incorrect footer terminator.
validate_fails_for_big_endian_flag Verifies validation flags files marked as big-endian, which the codec does not support.
validate_fails_for_unsupported_precision Ensures validation rejects headers requesting unsupported float precision.
validate_detects_corrupted_index Confirms validation catches index data corruption without a matching checksum update.
write_and_read_round_trip Exercises writing a video to disk and reading it back to guarantee structural fidelity.
write_header_rejects_null_fp Checks that header writing fails when given a null file pointer.
write_header_rejects_null_header Verifies header writing refuses to operate on a null header.
read_header_rejects_null_fp Ensures header reading fails when the file pointer is null.
read_header_rejects_null_header Ensures header reading fails when the output header pointer is null.
write_palette_rejects_nulls Confirms palette writing validates its pointers and entry count.
read_palette_rejects_invalid_inputs Ensures palette reading rejects null pointers or zero-length requests.
read_palette_fails_on_short_file Verifies palette reading detects truncated palette data.
write_index_rejects_nulls Confirms index writing validates its pointers and entry count.
read_index_rejects_invalid_inputs Ensures index reading rejects null pointers or zero-length requests.
read_index_fails_on_short_file Verifies index reading detects truncated index data.
write_footer_rejects_nulls Confirms footer writing fails with null file or footer pointers.
read_footer_rejects_nulls Ensures footer reading fails when provided null inputs.
read_footer_fails_on_short_file Verifies footer reading detects truncated footer data.
write_video_rejects_nulls Confirms video writing validates both the file pointer and video structure.
read_video_rejects_nulls Ensures video reading refuses null file pointers or video outputs.
read_video_fails_on_truncated_index Verifies video reading catches truncated index sections and cleans up allocations.
read_video_fails_on_crc_mismatch Ensures video reading fails when the stored checksum does not match the payload.
read_video_rejects_big_endian_flag Confirms video reading rejects files flagged as big-endian.
read_video_fails_on_invalid_footer_marker Ensures video reading fails when the footer terminator is corrupted.
idxoffset_sanity_mismatch Checks the idxoffset sanity helpers catch mismatched offsets between header and footer.
header_defaults_to_float32_precision Verifies header construction defaults the precision flag to float32 when unspecified.

Palette Explorer

An exploratory visualization tool lives in tools/visualize_4splat.py. It parses a .4spl video, reconstructs frames using the stored palette, and renders an interactive Matplotlib dashboard featuring:

  • Reconstructed RGB frames for the active palette entries.
  • Heat-map slices that show how palette indices are distributed across space.
  • Scatter markers for each Gaussian "splat" centered at (ฮผx, ฮผy) with marker sizes proportional to how close their temporal mean (ฮผt) is to the selected frame.
  • Checkboxes to toggle the most-used palette entries on and off for quick reconstruction experiments.

Launch it with:

python tools/visualize_4splat.py path/to/video.4spl

Use the sliders at the bottom to step through time and depth slices, and the checkboxes on the left to enable or disable palette slots.

About

Binary format and reference implementation for 4Splat (.4spl). Palette-based, lossless 4D video codec that generalizes indexed-color images to spatial-temporal data with Gaussian splats

Resources

Stars

Watchers

Forks

Contributors