Modern font organization tool for managing and curating font collections
Project description
Font Organizer: Modern Font Management Tool
Font Organizer is a powerful Python-based tool for managing and organizing font collections. It provides intelligent font detection, automated organization, subsetting capabilities, and comprehensive analysis features to help you manage large font libraries efficiently.
🚀 Features
- 🔍 Smart Font Detection: Automatically discover fonts across your system
- 📁 Intelligent Organization: Sort and categorize fonts by various criteria (family, style, weight)
- 🔤 Font Subsetting: Extract specific character sets for optimized web fonts
- 📊 Analysis Tools: Examine font metrics, character coverage, and OpenType features
- 🚀 High Performance: Efficient processing of large font collections with multi-threading support
- 🔄 Duplicate Detection: Find and manage duplicate fonts by hash and metadata
- 📈 Reporting: Generate detailed HTML/PDF reports about your font collection
📦 Installation
Using pip (Recommended)
pip install font-organizer
Using uv (Fast Alternative)
uv pip install font-organizer
From Source
git clone https://github.com/twardoch/font-organizer.git
cd font-organizer
pip install -e .
🎯 Quick Start
Basic Usage
# Scan a directory for fonts
font-organizer scan ~/Fonts
# Organize fonts by family
font-organizer organize ~/Fonts --by family --output ~/OrganizedFonts
# Get information about a specific font
font-organizer info ~/Fonts/Arial.ttf
# Find duplicate fonts
font-organizer duplicates ~/Fonts
# Create a subset with basic Latin characters
font-organizer subset input.ttf output.woff2 --text "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"
Command Overview
font-organizer --help
Available commands:
scan- Scan directories for font filesorganize- Organize fonts using various criteriaanalyze- Analyze font collections and generate reportssubset- Create font subsets with specific charactersduplicates- Find and manage duplicate fontsinfo- Display detailed font informationconfig- Manage configuration settings
🔧 Configuration
Font Organizer can be configured using a YAML configuration file:
# ~/.font-organizer/config.yaml
organize:
default_scheme: family # family, style, weight, or custom
copy_mode: true # true for copy, false for move
scan:
include_system_fonts: true
recursive: true
font_extensions:
- .ttf
- .otf
- .woff
- .woff2
subset:
default_format: woff2
optimize: true
📚 Advanced Usage
Organizing Fonts
# Organize by multiple criteria
font-organizer organize ~/Fonts --by family,weight --output ~/Organized
# Use custom organization rules
font-organizer organize ~/Fonts --rules my-rules.yaml --output ~/Organized
# Dry run to preview organization
font-organizer organize ~/Fonts --dry-run
Font Analysis
# Generate comprehensive analysis report
font-organizer analyze ~/Fonts --output report.html
# Export font list to CSV
font-organizer analyze ~/Fonts --format csv --output fonts.csv
# Check character coverage
font-organizer analyze ~/Fonts --coverage "Latin,Cyrillic"
Subsetting Fonts
# Create subset with Unicode ranges
font-organizer subset input.ttf output.woff2 --unicodes "U+0020-007F,U+00A0-00FF"
# Subset for specific language
font-organizer subset input.ttf output.woff2 --language en,es,fr
# Keep specific OpenType features
font-organizer subset input.ttf output.woff2 --features "kern,liga"
🐍 Python API
from font_organizer import FontOrganizer, FontInfo
# Initialize organizer
organizer = FontOrganizer()
# Scan for fonts
fonts = organizer.scan_directory("~/Fonts")
# Get font information
for font_path in fonts:
info = FontInfo(font_path)
print(f"{info.family} - {info.style} ({info.weight})")
print(f" Characters: {len(info.characters)}")
print(f" Features: {', '.join(info.features)}")
# Organize fonts
organizer.organize(
source="~/Fonts",
destination="~/OrganizedFonts",
scheme="family"
)
# Find duplicates
duplicates = organizer.find_duplicates("~/Fonts")
for group in duplicates:
print(f"Duplicate group ({len(group)} files):")
for font in group:
print(f" - {font}")
🛠️ Development
Setting up Development Environment
# Clone the repository
git clone https://github.com/twardoch/font-organizer.git
cd font-organizer
# Install development dependencies
pip install -e ".[dev]"
# Install pre-commit hooks
pre-commit install
# Run tests
pytest
# Run linting
ruff check src tests
mypy src tests
Running Tests
# Run all tests
pytest
# Run with coverage
pytest --cov=font_organizer --cov-report=html
# Run specific test file
pytest tests/test_font_info.py
📖 Documentation
Full documentation is available at https://twardoch.github.io/font-organizer/
🤝 Contributing
Contributions are welcome! Please see our Contributing Guide for details.
- Fork the repository
- Create your 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
📄 License
This project is licensed under the MIT License - see the LICENSE file for details.
🙏 Acknowledgments
- Built with fonttools for font manipulation
- Uses rich for beautiful terminal output
- Powered by fire for CLI interface
📬 Contact
Adam Twardoch - @adamtwar - adam+github@twardoch.com
Project Link: https://github.com/twardoch/font-organizer
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file twat_font-2.7.10.tar.gz.
File metadata
- Download URL: twat_font-2.7.10.tar.gz
- Upload date:
- Size: 68.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.11.2 {"installer":{"name":"uv","version":"0.11.2","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c6b3a51cab83d6d7cffd0ba4912269a174caeed904210a47abb19e4da7342683
|
|
| MD5 |
70a6b462ae304295bd8ed29c239c1a58
|
|
| BLAKE2b-256 |
3a29e9f0bdb5e75aa91caba711b3cfee1feda6913a0d0958649911c62fa39c47
|
File details
Details for the file twat_font-2.7.10-py3-none-any.whl.
File metadata
- Download URL: twat_font-2.7.10-py3-none-any.whl
- Upload date:
- Size: 21.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.11.2 {"installer":{"name":"uv","version":"0.11.2","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
4d9086d642cca73a9fb5b623d337cc9a02b2a6e9d97d00471242c1479d88f857
|
|
| MD5 |
99e2ab5625864590943503bad82832e2
|
|
| BLAKE2b-256 |
dbb7d20710bbd84c8d3a43e4736d7b638b0e03455c006536e78316134e923b04
|