Texture Channel Packing/Unpacking Tool for Game Development
ChannelSmith is a desktop application that allows game developers and technical artists to efficiently manage texture channel packing. It reduces texture memory usage by combining multiple grayscale maps (Roughness, Metallic, Ambient Occlusion, etc.) into a single RGBA image.
β
Pack multiple grayscale textures into one RGBA image
β
Unpack existing packed textures to extract individual channels
β
Repack textures with different template formats (e.g., ORM β ORD)
β
Replace individual channels without recreating entire textures
β
Smart defaults for missing texture channels
β
Template system with predefined and custom packing configurations
- π Reduce memory usage by ~75% (4 textures β 1)
- β‘ Faster loading times in game engines
- π Flexible workflows for different engine requirements
- π― Industry-standard templates (ORM, ORD)
No Python required! Download the latest release:
| Platform | Download |
|---|---|
| Windows 10+ | ChannelSmith-Windows.zip |
| macOS 12+ | ChannelSmith-macOS.zip |
| Linux | ChannelSmith-Linux.tar.gz |
Extract and double-click to run. Browser opens automatically.
See full installation guide β
- Python 3.8 or higher
- pip (Python package manager)
-
Clone or download the project:
git clone <repository-url> cd ChannelSmith
-
Create virtual environment:
python -m venv venv source venv/bin/activate # On Windows: venv\Scripts\activate
-
Install dependencies:
pip install -r requirements.txt
ChannelSmith features a modern web-based interface with Flask backend and Tailwind CSS styling!
Double-click launch_web_ui.bat or run:
python -m channelsmithMake scripts executable (first time only):
chmod +x launch_web_ui.sh launch_simple.sh install.shThen run the launcher:
./launch_web_ui.shOr for setup first time:
./install.shThe browser opens automatically at http://localhost:5000
- π¨ Modern Dark Theme - Professional Tailwind CSS design
- π±οΈ Drag-and-Drop - Upload images by dragging to zones
- ποΈ Live Preview - See channels in real-time as you upload
- π₯ Download Results - Get packed or unpacked images instantly
- π No External Tools - Everything in your browser
Pack Textures:
- Open http://localhost:5000 (auto-opens in browser)
- Stay on "Pack Channels" tab
- Select template (ORM, ORD, etc.)
- Drag or click to upload Red, Green, Blue channels
- (Alpha channel optional)
- Click "Pack Texture"
- Download packed PNG immediately
Unpack Textures:
- Switch to "Unpack Texture" tab
- Upload your packed texture
- Select correct template
- Click "Unpack Texture"
- Download extracted channels as individual PNG files
See WEB_UI_TESTING.md for:
- Automated API tests (22 tests, all passing)
- Manual testing workflows
- Edge case testing
- Browser compatibility
- Performance benchmarks
For automation or scripting:
from channelsmith.core.packing_engine import pack_texture_from_template
from channelsmith.templates.template_loader import load_template
from channelsmith.utils.image_utils import load_image, save_image
# Load template
template = load_template("channelsmith/templates/orm.json")
# Load individual texture maps
ao_map = load_image("textures/ao.png")
roughness_map = load_image("textures/roughness.png")
metallic_map = load_image("textures/metallic.png")
# Pack into single texture
textures = {
'ambient_occlusion': ao_map,
'roughness': roughness_map,
'metallic': metallic_map
}
packed = pack_texture_from_template(textures, template)
# Save result
save_image(packed, "output/material_orm.png")- INSTALL.md β START HERE - Complete installation guide (3 methods)
- SETUP.md - Environment setup for developers
- cs_wiki.md - User guide with workflows and FAQs (also in-app)
- WEB_UI_TESTING.md - Web UI testing guide
- CONTRIBUTING.md - How to contribute and code standards
- CLAUDE.md - Architecture and development guidelines
- CHANGELOG.md - Version history and release notes
- docs/RELEASE_PROCESS.md - Release workflow (maintainers)
ChannelSmith/
βββ channelsmith/ # Main package
β βββ core/ # Packing/unpacking engine
β βββ api/ # Flask REST API (NEW)
β β βββ app.py # Flask app factory
β β βββ routes.py # API endpoints (pack, unpack, templates)
β β βββ utils.py # Image utilities & validation
β βββ frontend/ # Web UI
β β βββ index.html # Single-page app
β β βββ styles.css # Tailwind CSS styling
β β βββ app.js # Vanilla JavaScript logic
β βββ templates/ # Template JSON files & loader
β βββ utils/ # Utilities
βββ tests/
β βββ test_api/ # API endpoint tests
β βββ test_core/ # Core engine tests
β βββ ...
βββ docs/ # Documentation
βββ WEB_UI_TESTING.md # Web UI testing guide (NEW)
βββ SETUP.md # Installation guide
βββ requirements.txt # Python dependencies
βββ README.md # This file
Goal: Deliver production-ready web UI with full pack/unpack workflows
Progress:
- β Core packing/unpacking engine (Alpha - Complete)
- β Template system with ORM/ORD templates
- β Web UI MVP - Flask REST API + Tailwind CSS frontend (NEW)
- β Full pack/unpack workflows
- β Drag-and-drop support
- β Live preview with Base64 encoding
- β Browser auto-launch
- β API tests (22 comprehensive tests, all passing)
- β Core tests (207 tests, all passing, no regressions)
- π Advanced features (batch processing, custom templates UI)
Test Coverage:
- Core Engine: 207 tests β
- REST API: 22 tests β
- Total: 229 tests passing
- Alpha: Core engine β
- Beta: Web MVP with Flask + Tailwind β
- RC: Bug fixes, performance optimization, advanced features
- v1.0: Production release
# Run all tests
pytest
# Run with coverage report
pytest --cov=channelsmith --cov-report=html
# Run specific test file
pytest tests/test_core/test_packing_engine.pyContributions are welcome! Please read CONTRIBUTING.md for:
Code of conduct Development setup Coding standards Pull request process Testing requirements
This project is licensed under the MIT License - see LICENSE for details.
- Read SETUP.md for environment setup
- Read CLAUDE.md for architecture overview
- Check ALPHA_TASKS.md for current tasks
- Review docs/MVP_Documentation.md for full specs
- Activate virtual environment:
source venv/bin/activate - Create feature: Work on
devbranch - Write tests first (TDD approach)
- Core logic:
tests/test_core/ - API endpoints:
tests/test_api/
- Core logic:
- Format code:
black channelsmith/ - Run tests:
pytest tests/(expect 229+ passing) - Run API tests specifically:
pytest tests/test_api/ -v - Commit:
git commit -m "feat(scope): description"
See WEB_UI_TESTING.md for complete guide including:
- Quick start (2 minutes)
- Automated API tests
- Manual testing workflows
- Edge case testing
- Browser compatibility
- File naming: snake_case
- Type hints: Required on all functions
- Docstrings: Google style, required on all public APIs
- Testing: pytest, >80% coverage target
- Formatting: black
- Linting: pylint
This project is licensed under the MIT License - see the LICENSE file for details. Copyright (c) 2026 Giuseppe Alfano
- GitHub Issues: Report bugs or request features
- Email: For commercial inquiries or private discussions reach out to giuseppe.alfano.3d@gmail.com
Version: 0.3.0 Last Updated: February 9, 2026