A modern Python-based viewer for TRS-80 Color Computer (CoCo) graphics file formats. View and convert MAX, CM3, and CLP image files from vintage Color Computer disk images.
- Multiple Format Support: MAX (CoCoMax 1/2), CM3 (CoCoMax 3), and CLP (MAX-10 Clipboard)
- Dual Interface: GUI viewer and command-line tools
- DSK Image Support: Browse and extract files from Color Computer disk images
- High-Quality Conversion: Export to modern PNG format
- NTSC Artifact Colors: Supports MAX artifact color modes (BR/RB)
- Comprehensive Documentation: Technical format specifications for developers
- Monochrome and artifact-colored bitmap images
- 256×192 resolution (typical)
- 1 bit per pixel with NTSC color artifact support
- Simple 5-byte header format
- 16-color palette-based images
- 320×192 or 320×384 resolution
- Run-length compression
- Advanced color palette system
- Embedded pictures from MAX-10 word processor
- Container format with text, rulers, and graphics
- Monochrome bitmap pictures
- Variable dimensions
- Python 3.7 or higher
- Pillow (PIL) library for image processing
git clone https://github.com/reyco2000/CoCo-Image-Viewer.git
cd CoCo-Image-Viewerpip install pillowOr create a virtual environment:
python3 -m venv .venv
source .venv/bin/activate # On Windows: .venv\Scripts\activate
pip install pillowLaunch the interactive GUI viewer:
python3 main.py gui- Click "Open DSK File" to browse for a disk image
- Navigate to the
DSK-sampledirectory - Select a DSK file (e.g.,
CM3PIC01.DSK,CCMAX.DSK,CLIPART3.dsk) - Click on any MAX, CM3, or CLP file to view it
- Images display instantly in the viewer
python3 main.py list DSK-sample/CLIPART3.dskOutput:
CATCHER.CLP
BATTER.CLP
RUNNER.CLP
SURFER.CLP
...
MAX files:
python3 main.py extract DSK-sample/CCMAX.DSK TITLE.MAX output.pngCM3 files:
python3 main.py extract DSK-sample/CM3PIC01.DSK Jinx.CM3 output.pngCLP files:
python3 main.py extract DSK-sample/CLIPART3.dsk SOCCER.CLP soccer.pngThe repository includes sample disk images in the DSK-sample/ directory:
| File | Size | Description | Contains |
|---|---|---|---|
CCMAX.DSK |
158K | CoCoMax 1/2 images | MAX format files |
CM3PIC01.DSK |
158K | CoCoMax 3 images | CM3 format files (Jinx.CM3, Snail.CM3, etc.) |
CLIPART3.dsk |
158K | MAX-10 clip art | CLP format files (Sports: BASEBALL, SOCCER, HOCKEY, etc.) |
CLRMAX-1.DSK |
158K | ColorMax images | MGE format files (not yet supported) |
For additional DSK files, visit: https://colorcomputerarchive.com/repo/Disks/Pictures/
# Browse CCMAX.DSK
python3 main.py list DSK-sample/CCMAX.DSK
# Extract from CM3PIC01.DSK (384-row image)
python3 main.py extract DSK-sample/CM3PIC01.DSK Jinx.CM3 jinx.png
# Extract from CM3PIC01.DSK (192-row image)
python3 main.py extract DSK-sample/CM3PIC01.DSK Snail.CM3 snail.png
# Extract sports clipart
python3 main.py extract DSK-sample/CLIPART3.dsk SOCCER.CLP soccer.png
python3 main.py extract DSK-sample/CLIPART3.dsk BASEBALL.CLP baseball.pngCoCo-Image-Viewer/
├── main.py # Main application (GUI + CLI)
│
├── README.md # This file
├── LICENSE # MIT License
├── .gitignore # Git ignore patterns
│
├── DSK-sample/ # Sample disk images
│ ├── CCMAX.DSK # CoCoMax 1/2 images (MAX format)
│ ├── CM3PIC01.DSK # CoCoMax 3 images (CM3 format)
│ ├── CLIPART3.dsk # MAX-10 clipart (CLP format - sports)
│ ├── CLRMAX-1.DSK # ColorMax images (MGE format)
│ └── README.md # Link to more DSK files
│
└── documentation/ # Technical documentation
├── COCO-PICS-FORMATS.md # Format specifications (630 lines)
├── CLP File.txt # MAX-10 format reference
└── shared.png # Screenshot
- main.py (620+ lines)
- Primary entry point with embedded format converters
- DSK parsing logic (DSKImage, DirectoryEntry classes)
- MAX-to-PPM conversion (artifact colors with YIQ color space)
- CM3-to-PPM conversion (decompression and palette handling)
- CLP-to-PPM conversion (MAX-10 clipboard picture extraction)
- Tkinter GUI application
- CLI with three subcommands:
gui,list,extract - Self-contained: all DSK file system logic is embedded
-
COCO-PICS-FORMATS.md (630 lines)
- Comprehensive technical reference for programmers
- Complete format specifications: MAX, CM3, CLP
- Byte-by-byte header breakdowns
- Code examples and algorithms
- Common pitfalls and optimization tips
- Color encoding details and compression algorithms
-
- Original MAX-10 technical reference by Dave Stampe
- CLP file structure specification
- Paragraph tag system documentation
- Picture format details
All disk images are 158KB DSK/JVC format (DECB file system):
- CCMAX.DSK - CoCoMax 1/2 pictures (MAX format)
- CM3PIC01.DSK - CoCoMax 3 pictures with 16-color palettes
- CLIPART3.dsk - Sports clipart: SOCCER, BASEBALL, HOCKEY, SURFER, etc.
- CLRMAX-1.DSK - MGE format images (ColorMax format - future support)
main.py is intentionally self-contained with all functionality embedded:
- No external dependencies except Pillow (PIL)
- Embedded DSK parser: Complete DECB file system implementation
- Embedded format converters: MAX, CM3, and CLP conversion logic
- Single-file distribution: Easy to deploy and understand
- Granules: 9 sectors × 256 bytes = 2,304 bytes
- FAT: Track 17, Sector 2 (granule chain tracking)
- Directory: Track 17, Sectors 3-11 (72 entry capacity)
- Granule Mapping: 2 granules per track, skipping Track 17
MAX Artifact Colors (NTSC):
- BR Mode: Blue-Red phase artifacts
- RB Mode: Red-Blue phase artifacts (reversed)
- YIQ color space conversion for composite video simulation
CM3 Palette:
- 6-bit RGB encoding (2 bits per channel)
- 16 colors from 64 possible combinations
- Scaling:
rgb8 = rgb2 × 85(0→0, 1→85, 2→170, 3→255)
CLP Bitmaps:
- 1 bit per pixel: 0=white, 1=black
- MSB first (bit 7 = leftmost pixel)
- Padding byte required at end of each line
DSK Image → Extract File → Parse Format → Convert to PPM → Save as PNG
↓ ↓ ↓ ↓ ↓
JVC/DECB granules MAX/CM3/CLP RGB pixels Pillow library
| Operation | MAX | CM3 | CLP |
|---|---|---|---|
| View in GUI | ✅ | ✅ | ✅ |
| Extract to PNG | ✅ | ✅ | ✅ |
| Artifact colors | ✅ (BR/RB) | ❌ | ❌ |
| Palette support | ❌ | ✅ (16-color) | ❌ |
| Compression | ❌ | ✅ (RLE) | ❌ |
| Multiple images | ❌ | ❌ | First only |
# Test MAX format
python3 main.py list DSK-sample/CCMAX.DSK
python3 main.py extract DSK-sample/CCMAX.DSK <filename>.MAX test.png
# Test CM3 format (192 rows)
python3 main.py extract DSK-sample/CM3PIC01.DSK Snail.CM3 test.png
# Test CM3 format (384 rows)
python3 main.py extract DSK-sample/CM3PIC01.DSK Jinx.CM3 test.png
# Test CLP format (sports clipart)
python3 main.py extract DSK-sample/CLIPART3.dsk SOCCER.CLP test.png
python3 main.py extract DSK-sample/CLIPART3.dsk CATCHER.CLP test.pngTo add support for additional Color Computer graphics formats:
- Implement a
convert_XXX_to_ppm()function inmain.py - Add format detection in GUI (
on_file_select()method) - Add format support in CLI (
extractcommand) - Update help text and documentation
- Add test cases with sample files
- MAX format only supports arte modes 0, 1, and 2 (BW, BR, RB)
- CM3 motif/pattern data is read but not used in rendering
- CLP files only extract the first picture paragraph
- Maximum CLP image size: 7,660 bytes (per MAX-10 specification)
- GUI displays one image at a time (no multi-image gallery view)
- MGE format (in CLRMAX-1.DSK) not yet supported
pip install pillow- Ensure the file is a valid MAX/CM3/CLP format
- Check that the DSK image is not corrupted
- Verify the file extension matches the actual format
- Check file paths - DSK samples are in
DSK-sample/directory
- CLP files may contain only text, rulers, or page breaks
- Only files with picture paragraphs (tag 0x01) will display
- Ensure tkinter is installed:
sudo apt install python3-tk(Linux) - On macOS, tkinter comes with Python
- On Windows, tkinter is included with Python installation
Contributions are welcome! Please feel free to submit issues, feature requests, or pull requests.
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
- Follow PEP 8 style guidelines for Python code
- Add docstrings to all functions and classes
- Update documentation for new features
- Test with sample files before submitting
- Include format specifications for new file types
- Add MGE format support (ColorMax)
- Implement multi-image gallery view in GUI
- Add batch conversion mode
- Support for other CoCo formats (RAT, HRS, VEF, PIX)
- Image preview thumbnails in file list
- Export to multiple formats (BMP, GIF, etc.)
- Zoom and pan controls in GUI
- Color palette editor for CM3 images
- Drag-and-drop DSK file loading
This project is licensed under the MIT License - see the LICENSE file for details.
- MAX/CM3: Based on CoCoMax software by Colorware
- CLP: MAX-10 Word Processor format by Dave Stampe
- coco-tools by Jamie Cho - Reference implementations
- Pillow - Python Imaging Library
- Color Computer community for format documentation and sample files
- Mathieu Bouchard - cm3toppm implementation reference
- Jamie Cho (jamieleecho) - coco-tools package and format knowledge
- Dave Stampe - MAX-10 CLP format technical documentation
- Color Computer Archive - Sample files and documentation
- Colorware - Original MAX and CM3 software
- 🤖 Developed with assistance from Claude Code
- Color Computer Archive - Software and documentation
- Color Computer Archive - Pictures - More DSK files
- CoCopedia - Color Computer wiki
- coco-tools GitHub - Format conversion utilities
- maxtoppm - MAX/ART to PPM converter
- cm3toppm - CM3 to PPM converter
- veftopng - VEF to PNG converter
- Toolshed - CoCo disk utilities
- COCO-PICS-FORMATS.md - Deep dive into MAX, CM3, and CLP formats
- CLP File.txt - Original MAX-10 format specification
- ✅ MAX format support with artifact colors
- ✅ CM3 format support with compression
- ✅ CLP format support for MAX-10 pictures
- ✅ GUI viewer for browsing DSK images
- ✅ CLI tools for extraction and conversion
- ✅ Comprehensive programmer documentation
- ✅ Sample disk images included (4 DSK files)
- ✅ Self-contained single-file design
Made with ❤️ by Reinaldo Torres — a proud CoCo enthusiast 📧 reyco2000@gmail.com
🟢 Proud member and co-creator of the CoCoByte Club https://cocobyte.co/
🔗 See more on @ChipShift https://github.com/reyco2000/
