Skip to content

nelihdev/YEETIFF

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

8 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

YEETIFF - Yet Even Extremely Expressier Transcoded Image File Format.

Version License: MIT Rust Build Status

A modern, educational image format with transparency, compression, and animation support

Features โ€ข Quick Start โ€ข Documentation โ€ข Installation โ€ข Contributing


๐ŸŽ“ Educational โ€ข ๐Ÿ”ฌ Experimental โ€ข ๐Ÿš€ Modern โ€ข ๐Ÿ“– Well-Documented


๐Ÿ“– Overview

YEETIFF (YEET Image Format) is an open-source educational project designed to demonstrate modern image format concepts including:

  • ๐ŸŽจ Full RGBA transparency - True alpha channel support
  • ๐Ÿ—œ๏ธ Smart compression - zlib (v2), Brotli/Zstd (v3 planned)
  • ๐Ÿ’พ Flexible encoding - Human-readable hex or efficient binary
  • ๐Ÿ“Š Rich metadata - JSON-based extensible metadata
  • ๐ŸŽฌ Animation support - Multi-frame sequences (v3 planned)
  • ๐ŸŒˆ Color management - ICC profiles (v3 planned)

Why YEET?

YEET was created as an educational tool to help developers understand:

  • How image formats work at the byte level
  • Compression algorithms and their trade-offs
  • Color space management and ICC profiles
  • The evolution from simple (v1) to complex (v3) formats

Perfect for: CS students, format designers, compression enthusiasts, and curious developers!


โœจ Features

Current (v2.0 - Stable)

Feature Status Description
RGBA Support โœ… Full alpha channel transparency
Compression โœ… zlib compression (40-60% reduction)
Binary Mode โœ… Efficient binary encoding
Metadata โœ… JSON metadata (author, timestamp, etc.)
Batch Convert โœ… Process entire folders at once
GUI Viewer โœ… OpenGL-accelerated viewer with egui
Cross-Platform โœ… Windows, macOS, Linux support
v1 Compatible โœ… Reads legacy v1 format

Planned (v3.0 - In Development)

Feature Status Description
ICC Profiles ๐Ÿšง Accurate color reproduction
Animations ๐Ÿšง Multi-frame sequences (like GIF/APNG)
HDR Support ๐Ÿ“‹ 16-bit per channel
Brotli/Zstd ๐Ÿ“‹ Better compression algorithms
Extended EXIF ๐Ÿ“‹ Camera metadata

๐Ÿš€ Quick Start

Installation

Option 1: Windows Installer (Easiest)

# Download and run YeetInstaller.exe
# Automatically configures file associations

Option 2: Build from Source

# Clone repository
git clone https://github.com/jakobsstijn/YEETIFF.git
cd YEETIFF/yeet-project

# Build stable viewer (v2)
cd yeet-core
cargo build --release

# Binary will be at: target/release/yeet

Option 3: Cargo Install

cargo install --path yeet-core

Basic Usage

View a YEET image:

yeet image.yeet

Convert PNG to YEET:

# Basic conversion
yeet compile photo.png

# Optimized (recommended)
yeet compile photo.png --compress --binary

Batch convert folder:

yeet batch ./my-photos --compress --binary

๐Ÿ“Š Format Comparison

File Size (1920ร—1080 photo example)

Format Size Notes
PNG 2.1 MB Lossless, widely supported
YEET v2 (text) 6.2 MB Human-readable hex
YEET v2 (binary) 6.2 MB Raw binary data
YEET v2 (compressed) ~500 KB โญ Recommended
YEET v3 (Brotli) ~450 KB ๐Ÿšง Planned

Format Evolution

v1 (Legacy)          v2 (Stable)              v3 (Experimental)
โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€        โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€            โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
RGB only             โœ… RGBA                  โœ… RGBA + HDR
No compression       โœ… zlib                  โœ… zlib/Brotli/Zstd
Text only            โœ… Text + Binary         โœ… Advanced modes
8-byte header        โœ… 20+ byte header       โœ… Extended header
No metadata          โœ… JSON metadata         โœ… Extended EXIF
6.2 MB (1080p)       โœ… 500 KB (compressed)   ๐Ÿšง 450 KB (planned)

๐Ÿ“‚ Project Structure

yeet-project/
โ”‚
โ”œโ”€โ”€ ๐Ÿ“ฆ yeet-core/              โญ Stable v2 viewer (PRODUCTION)
โ”‚   โ”œโ”€โ”€ src/main.rs            570+ lines of production code
โ”‚   โ”œโ”€โ”€ Cargo.toml
โ”‚   โ””โ”€โ”€ README.md              Complete usage guide
โ”‚
โ”œโ”€โ”€ ๐Ÿ”ฌ yeet-v3/                Experimental next-gen (ALPHA)
โ”‚   โ”œโ”€โ”€ src/main.rs            v3 features (ICC, animation)
โ”‚   โ”œโ”€โ”€ Cargo.toml
โ”‚   โ””โ”€โ”€ README.md              v3 roadmap
โ”‚
โ”œโ”€โ”€ ๐Ÿ“œ yeet-legacy/            v1 backward compatibility
โ”‚   โ”œโ”€โ”€ src/main.rs            Original format support
โ”‚   โ”œโ”€โ”€ Cargo.toml
โ”‚   โ””โ”€โ”€ README.md              Migration guide
โ”‚
โ”œโ”€โ”€ ๐Ÿ’ฟ yeet-installer/         Windows installer
โ”‚   โ”œโ”€โ”€ installer_gui.py       Tkinter installation wizard
โ”‚   โ”œโ”€โ”€ build_installer.py     PyInstaller build script
โ”‚   โ””โ”€โ”€ README.md              Installer documentation
โ”‚
โ”œโ”€โ”€ ๐Ÿ“š docs/                   Complete documentation
โ”‚   โ”œโ”€โ”€ SPEC_v2.md             650+ lines - v2 specification
โ”‚   โ”œโ”€โ”€ SPEC_v3.md             200+ lines - v3 specification
โ”‚   โ”œโ”€โ”€ ARCHITECTURE.md        500+ lines - Code organization
โ”‚   โ””โ”€โ”€ CONTRIBUTING.md        550+ lines - Contribution guide
โ”‚
โ”œโ”€โ”€ ๐ŸŽฏ examples/               Example YEET files
โ”‚   โ””โ”€โ”€ README.md              Usage examples
โ”‚
โ”œโ”€โ”€ Cargo.toml                 Workspace configuration
โ”œโ”€โ”€ README.md                  This file
โ”œโ”€โ”€ BUILD.md                   Build instructions
โ””โ”€โ”€ LICENSE                    MIT License

๐ŸŽฏ Use Cases

Educational

  • Learn image formats: Understand headers, compression, metadata
  • CS courses: Practical example of file format design
  • Workshops: Hands-on format implementation

Development

  • Format experiments: Test new compression algorithms
  • Color science: ICC profile integration
  • Animation: Multi-frame encoding techniques

Practical

  • Transparency: Full RGBA support unlike JPEG
  • Compression: Better than uncompressed formats
  • Metadata: Rich JSON-based information

๐Ÿ’ป Command Reference

Viewing Images

# GUI viewer (default)
yeet image.yeet

# View with scrolling (large images)
# Automatic scrollable canvas for images > window size

Converting Images

# Basic conversion (uncompressed, hex text)
yeet compile photo.png

# Optimized conversion (recommended)
yeet compile photo.png --compress --binary

# Batch convert directory
yeet batch ./photos --compress --binary

# Options:
#   --compress    Apply zlib compression (40-60% smaller)
#   --binary      Use binary mode instead of hex text

Help

yeet help
yeet --help
yeet -h

๐Ÿ“– Documentation

Format Specifications

  • YEET v2 Specification - Complete byte-level format documentation

    • Header structure
    • Flags and encoding modes
    • Compression details
    • Examples and size calculations
  • YEET v3 Specification - Next-generation features

    • ICC color profiles
    • Multi-frame animation
    • Enhanced compression
    • HDR support

Developer Guides

  • Architecture Guide - Code organization

    • Component breakdown
    • Data flow diagrams
    • Build system
    • Performance considerations
  • Contributing Guide - How to contribute

    • Development setup
    • Code style guidelines
    • Pull request workflow
    • Testing requirements
  • Build Guide - Building from source

    • Prerequisites
    • Build commands
    • Troubleshooting
    • Distribution

Component READMEs


๐Ÿ”ง Technical Details

YEET v2 Format Structure

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚                         YEET v2 File Structure                      โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚ Magic Bytes       โ”‚ "YEET"                        โ”‚ 4 bytes         โ”‚
โ”‚ Version           โ”‚ 0x02                          โ”‚ 1 byte          โ”‚
โ”‚ Flags             โ”‚ Compression/Alpha/Binary      โ”‚ 1 byte          โ”‚
โ”‚ Width             โ”‚ Image width (little-endian)   โ”‚ 4 bytes (u32)   โ”‚
โ”‚ Height            โ”‚ Image height (little-endian)  โ”‚ 4 bytes (u32)   โ”‚
โ”‚ Metadata Length   โ”‚ JSON length (little-endian)   โ”‚ 2 bytes (u16)   โ”‚
โ”‚ Metadata          โ”‚ JSON string                   โ”‚ Variable        โ”‚
โ”‚ Data Length       โ”‚ Pixel data length (LE)        โ”‚ 4 bytes (u32)   โ”‚
โ”‚ Pixel Data        โ”‚ Image data (compressed?)      โ”‚ Variable        โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

Compression Ratios

Real-world performance (1920ร—1080 images):

Image Type Uncompressed Compressed Reduction
Photos 6.2 MB 2.5 MB 60%
Graphics 6.2 MB 1.9 MB 70%
Text/UI 6.2 MB 1.2 MB 80%

Dependencies

Rust (yeet-core):

  • image - Image I/O
  • eframe - GUI framework
  • egui_extras - Image widgets
  • flate2 - zlib compression

Python (installer):

  • tkinter - GUI (built-in)
  • Pillow - Image handling
  • pywin32 - Windows registry
  • PyInstaller - Exe bundling

๐Ÿค Contributing

We welcome contributions! This is an educational project designed to help people learn.

Ways to Contribute

  • ๐Ÿ› Report bugs - Found an issue? Let us know!
  • ๐Ÿ’ก Suggest features - Have an idea? Share it!
  • ๐Ÿ“ Improve docs - Better explanations and examples
  • ๐ŸŽจ Design - Logo, icons, UI improvements
  • ๐Ÿ’ป Code - Bug fixes, features, optimizations
  • ๐Ÿงช Tests - Improve test coverage

Priority Areas

  • ๐ŸŽจ Logo design - We need a YEET logo!
  • ๐Ÿ“ธ ICC profiles - Color management for v3
  • ๐ŸŽฌ Animation - Multi-frame support for v3
  • ๐Ÿ—œ๏ธ Compression - Brotli/Zstd integration
  • ๐Ÿงช Testing - Increase test coverage

Getting Started

# Fork and clone
git clone https://github.com/YOUR_USERNAME/YEETIFF.git
cd YEETIFF/yeet-project

# Build and test
cargo build --workspace
cargo test --workspace

# Format and lint
cargo fmt --all
cargo clippy --workspace

See CONTRIBUTING.md for detailed guidelines.


๐ŸŽ“ Learning Resources

Understanding Image Formats

Rust Development

Color Science


๐Ÿ“Š Project Statistics

Code Metrics

Component Lines Language Status
yeet-core 570 Rust โœ… Production
yeet-v3 500 Rust ๐Ÿšง Alpha
yeet-legacy 150 Rust โœ… Stable
installer 550 Python โœ… Working
Total Code 1,770 - -

Documentation

Document Lines Purpose
Main README 350+ Project overview
SPEC_v2.md 650+ v2 format spec
SPEC_v3.md 200+ v3 roadmap
ARCHITECTURE.md 500+ Code organization
CONTRIBUTING.md 550+ Contribution guide
Total Docs 2,400+ -

๐Ÿ—บ๏ธ Roadmap

โœ… Completed (v2.0)

  • RGBA transparency support
  • zlib compression
  • Binary encoding mode
  • JSON metadata
  • Batch conversion
  • GUI viewer
  • Windows installer
  • Complete documentation

๐Ÿšง In Progress (v2.1)

  • Unit tests
  • Example YEET files
  • Performance benchmarks
  • Cross-platform testing

๐Ÿ“‹ Planned (v3.0)

  • ICC color profiles
  • Multi-frame animation
  • Brotli/Zstd compression
  • HDR (16-bit) support
  • Extended EXIF metadata
  • Animation playback

๐Ÿ”ฎ Future Vision

  • Web viewer (WASM)
  • Animation editor
  • Plugin system
  • Package manager distribution
  • Library API (yeet-lib)

โ“ FAQ

Is YEET a production-ready format?

YEET v2 is stable and functional, but it's primarily an educational tool. For production, use PNG, JPEG, or WebP.

Why create a new image format?

YEET was created to teach how image formats work. It's easier to learn from a simple, well-documented format than complex production formats.

Can I use YEET in my project?

Yes! YEET is MIT licensed. However, consider it experimental and best suited for educational purposes.

How does YEET compare to PNG?

  • Advantages: Educational, simple structure, good compression
  • Disadvantages: Larger files than PNG, not widely supported
  • Use YEET for: Learning, experiments, education
  • Use PNG for: Production, web, wide compatibility

Does YEET support lossy compression?

No, YEET uses lossless compression (zlib). All data is preserved.

Will v3 replace v2?

No! v2 will remain stable and supported. v3 is experimental and may change frequently.


๐Ÿ† Acknowledgments

Technologies

  • Rust - Systems programming language
  • egui - Immediate mode GUI
  • image-rs - Image processing
  • flate2 - Compression

Inspiration

  • PNG - Well-designed, documented format
  • WebP - Modern compression techniques
  • APNG - Animation approach

Community

  • Rust Community - Excellent crates and support
  • Open Source - Standing on the shoulders of giants

๐Ÿ“œ License

This project is licensed under the MIT License - see the LICENSE file for details.

MIT License - Copyright (c) 2025 Stijn Jakobs

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software...

๐Ÿ‘ค Author

Stijn Jakobs

Professional Roles

  • ๐ŸŒ Network Developer @ AstroidMC
  • ๐ŸŽจ Creative Director @ Ordnary

๐Ÿ”— Links


๐ŸŽฏ Quick Links

Resource Link
Installation Quick Start
Format Spec SPEC_v2.md
Contributing CONTRIBUTING.md
Building BUILD.md
Architecture ARCHITECTURE.md
Examples examples/

Made with โค๏ธ for education and experimentation

โญ Star this repo if you find it useful! โญ

Learning โ€ข Experimenting โ€ข Building โ€ข Sharing

GitHub stars GitHub forks

About

Yet Even Extremely Expressier Transcoded Image File Format.

Topics

Resources

License

Contributing

Stars

Watchers

Forks

Packages

No packages published