HoloGenerator - KOTOR Configuration Generator for HoloPatcher
HoloGenerator is a GUI-only tool for automatically generating changes.ini files compatible with HoloPatcher by comparing two KOTOR installations or individual files.
🌟 Features
Multiple Interfaces
- Desktop GUI: User-friendly tkinter-based interface
- Web Application: Modern React-based web interface with real-time diffing
Note: HoloGenerator is designed exclusively for GUI usage. If you need command-line functionality, please use KotorDiff instead.
Advanced Diffing
- Real-time comparison: Fast, visual side-by-side file comparison
- Multi-format Support: GFF, 2DA, TLK, SSF, LIP, and other KOTOR file formats
- Word-level diffing: Granular change detection and highlighting
- Intelligent caching: Optimized performance for large files
Workflow Features
- Undo/Redo: Full history tracking with keyboard shortcuts (Ctrl+Z, Ctrl+Y)
- Sequential file addition: Build complex configurations by adding multiple file diffs
- Import/Export: Support for importing existing
changes.inifiles - Copy/Download: Easy sharing and distribution of generated configurations
Web Interface
- Intuitive UI: Clean, modern interface inspired by GitHub's diff viewer
- Drag & Drop: Easy file uploads with format auto-detection
- Live Preview: Real-time configuration generation and preview
- Mobile Friendly: Responsive design that works on all devices
🚀 Quick Start
Web Interface
Visit: https://th3w1zard1.github.io/hologenerator
Desktop GUI
python -m hologenerator
📦 Installation
From Source
cd Tools/HoloGenerator
pip install -e .
Development Setup
cd Tools/HoloGenerator
python setup_dev.py
🔧 Usage Examples
Desktop GUI
Launch the application:
python -m hologenerator
Using the GUI:
- Select your original and modified KOTOR installations or files
- View real-time differences in the diff viewer
- Generate a complete
changes.iniconfiguration file - Save or copy the generated configuration
Web Interface Workflow
- Upload/Paste Files: Add your original and modified file content
- Real-time Diff: See changes highlighted instantly
- Build Configuration: Add multiple file diffs sequentially
- Generate Config: Create a complete
changes.inifile - Download/Copy: Get your configuration for distribution
🗂️ File Format Support
| Format | Description | Support Level | Example Files |
|---|---|---|---|
| GFF | Game resource files | ✅ Full | .utc, .uti, .dlg, .are, .git, .ifo, .jrl |
| 2DA | Table files | ✅ Full | appearance.2da, classes.2da, spells.2da |
| TLK | Dialog/string files | ✅ Full | dialog.tlk, dialogf.tlk |
| SSF | Sound set files | ✅ Full | .ssf files |
| LIP | Lip-sync files | ✅ Full | .lip files |
| Others | Binary files | ⚡ Hash comparison | Any other format |
🏗️ Architecture
Core Components
hologenerator/
├── core/
│ ├── differ.py # File comparison engine
│ ├── changes_ini.py # HoloPatcher config generation
│ └── generator.py # Main configuration generator
├── gui/
│ └── main.py # Tkinter-based desktop interface
└── web/ # React web application
├── src/components/ # React components
├── src/hooks/ # Custom React hooks
└── src/utils/ # Utility functions
Generated Configuration Structure
The tool generates standard HoloPatcher sections:
[Settings]
WindowCaption=Generated Mod Configuration
ConfirmMessage=This mod was generated from file differences.
[InstallList]
File1=Override
[Override]
File1=modified_file.txt
[GFFList]
File1=character.utc
[character.utc]
ModifyField1=FieldModification1
[2DAList]
File1=appearance.2da
[appearance.2da]
ChangeRow1=RowModification1
[TLKList]
StrRef42=Modified
🧪 Testing
Run All Tests
./run_tests.sh
Individual Test Suites
# Python tests
python -m pytest src/hologenerator/tests/ -v
# React tests
cd web && npm test
# GUI tests (if tkinter available)
python -m unittest src/hologenerator/tests/test_gui.py
Test Coverage
- Core functionality: 100% coverage of critical paths
- Error handling: Comprehensive error scenario testing
- Integration tests: End-to-end workflow validation
- Cross-platform: Windows, Linux, and macOS compatibility
🌐 Web Deployment
The React web application is automatically deployed to GitHub Pages via GitHub Actions:
Automatic Deployment
- Trigger: Push to main branch with changes in
Tools/HoloGenerator/web/ - Build: React production build with optimizations
- Deploy: GitHub Pages deployment to
https://th3w1zard1.github.io/hologenerator
Manual Deployment
cd web
npm run build
npm run deploy
🛠️ Development
Prerequisites
- Python 3.8+ (required)
- Node.js 16+ (for web interface)
- tkinter (required, for GUI)
Development Setup
# Setup development environment
python setup_dev.py
# Start React development server
cd web && npm start
# Run in development mode
python -m hologenerator
Code Quality
- Linting: flake8, ESLint
- Formatting: black, Prettier
- Type Checking: mypy, TypeScript
- Testing: pytest, Jest
- Pre-commit Hooks: Automatic testing before commits
🤝 Contributing
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Setup development environment (
python setup_dev.py) - Make your changes with tests
- Test your changes (
./run_tests.sh) - Commit your changes (
git commit -m 'Add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
📝 License
This project is part of the PyKotor toolkit and follows the same licensing terms.
🙏 Acknowledgments
- PyKotor Team: For the core KOTOR file format libraries
- HoloPatcher: For the configuration format specification
- KOTOR Community: For feedback and testing
🔗 Links
- Web App: https://th3w1zard1.github.io/hologenerator
- Documentation: Full documentation
- Issues: Report bugs
- PyKotor: Main project
- KotorDiff: CLI alternative
Metadata
Release files for hologenerator 1.0.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| hologenerator-1.0.1.tar.gz | 26.4 kB | Without provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| hologenerator-1.0.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 54.2 kB
Release files / hologenerator-1.0.1.tar.gz
| Download URL | hologenerator-1.0.1.tar.gz |
|---|---|
| Size | 26.4 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
4503581d03f89fc87448453d9684a360d9fb377dced572c01d7fa5bfefab7837
|
|
BLAKE2b-256 checksum How to use checksums |
429c8ad1feb79cb5c0aa17c20fcd48748666f2af7f5ccadef7ade09b121b323b
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
Release files / hologenerator-1.0.1-py3-none-any.whl
| Download URL | hologenerator-1.0.1-py3-none-any.whl |
|---|---|
| Size | 27.8 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
d922e8c5fbd1f0105dc04c7e6debaf8b524a30206a43413d8964a9b5b09d0595
|
|
BLAKE2b-256 checksum How to use checksums |
a1f54db5aa9a22b717e55806b973a7513acf4c83dd8720028a19f1c469051205
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
Security for hologenerator 1.0.1
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.