FontGallery is a desktop application for GNU/Linux that turns .deb font packages into browsable visual font albums.
The project is aimed at designers, power users, and developers who want to inspect repository fonts visually instead of treating font packages as opaque archives. Its workflow extracts fonts from Debian packages, analyzes them, separates technical fonts from design-oriented fonts, and generates outputs that can be reviewed outside the application.
On Debian-based systems, large font collections often arrive as package files. That is useful for installation, but poor for visual review. FontGallery solves that gap by building a workspace where fonts can be:
- extracted once from
.debpackages; - analyzed for metadata and Spanish coverage;
- separated into main, Spanish, and technical collections;
- exported as HTML albums and PNG specimen cards.
- Desktop GUI built with
PyQt6. - Two main GUI tabs:
WorkspaceandLog. - Application menu with
File > ExitandHelp > About.... - Localized workspace naming for English and Spanish environments.
- Extraction of fonts from
.debpackages usingdpkg-deb -x. - Duplicate detection by
SHA256. - Font metadata and charset analysis using
fc-scan. - Heuristic classification of technical and mathematical fonts.
- Derived Spanish-capable and technical sub-albums.
- HTML album generation for the three current collections.
- PNG card generation for the three current collections.
- Optional flat PNG-card export folders for the main, Spanish, and technical collections.
- Per-action progress bar in the GUI for workspace preparation, extraction, analysis, HTML generation, and PNG card generation.
- Visual step-state indicators for the main workflow: pending, in progress, and completed/current.
- Qt translation loading for English and Spanish.
- Automated tests for workspace, translations, card generation, and flat card export.
Implemented today:
- workspace preparation;
- extraction into the master collection;
- analysis of extracted fonts;
- Spanish and technical subset derivation;
- HTML generation;
- PNG card generation;
- optional flat card folder export for image-viewer browsing;
- translation loading and translation assets;
- initial automated test coverage.
Not implemented yet:
- PDF generation from the GUI;
- background workers for long-running tasks;
- advanced designer-oriented classification filters such as serif, sans, display, or monospaced families.
Core stack:
Python 3PyQt6Pillowpytest
System tools used by the workflow:
dpkg-debfc-scanpylupdate6lrelease
Important directories and files:
fontgallery/: application package and services.tests/: automated tests.translations/:.tsand.qmtranslation assets.docs/: implementation and architecture notes.main.py: desktop entry point.ROADMAP.md: development roadmap.
For Debian 12 / MX Linux 23, install at least:
sudo apt install \
python3-pyqt6 \
python3-pil \
python3-pytest \
pyqt6-dev-tools \
qtchooser \
fontconfig \
dpkgWhat each package is used for:
python3-pyqt6: GUI runtime and Qt Python bindings.python3-pil: Pillow runtime for PNG card generation.python3-pytest: test runner for the local suite.pyqt6-dev-tools: providespylupdate6for translation source updates.qtchooser: provideslreleasein this environment.fontconfig: providesfc-scanfor font metadata and charset analysis.dpkg: providesdpkg-debfor extracting.debpackages.
Repository reference lists:
packages_available_debian12_pyqt6.txtpackages_available_debian12_python3.txt
requirements.txt only covers Python packages installable with pip.
It does not replace the GNU/Linux system dependencies required by the full workflow, such as dpkg-deb, fc-scan, pylupdate6, and lrelease.
Install the Python packages with:
pip install -r requirements.txtAt the moment, requirements.txt contains:
PyQt6Pillow
On Debian-based systems, the recommended installation path for this project is still the apt package set shown above.
Typical local setup:
git clone <your-repository-url>
cd FontGallery
pip install -r requirements.txtIf you are on Debian 12 or MX Linux 23, install the system packages first, because the full extraction and analysis workflow depends on them.
This project currently uses Path.cwd() in several places, so run it from the repository root:
python3 main.pyClick Prepare workspace.
This creates or verifies the main working folders. Depending on locale and existing workspace state, the application uses English or Spanish folder names while preserving compatibility with older Spanish workspaces.
The Workspace tab contains:
Workspace Status: shows the main workspace paths, their existence status, and write access.Primary Actions: contains the five numbered workflow buttons, a progress bar, a step-state legend, and optional flat-card export actions.
The Log tab contains the built-in execution log.
The menu bar contains:
File > Exit: closes the application.Help > About...: shows author, license, website, email, technologies used, and a short description of the program.
Put your font packages into:
paquetes-debin a Spanish workspacedeb-packagesin an English workspace
Click Extract all fonts to the main album.
What happens:
- the app scans
.debfiles; - filters likely font packages;
- extracts them with
dpkg-deb -x; - copies unique fonts into the master extracted-font directory;
- skips duplicates and broken fonts.
Click Analyze and classify the master collection.
What happens:
fc-scanreads font metadata and charset information;- Spanish support is checked for
áéíóúüñÁÉÍÓÚÜÑ; - technical and mathematical fonts are detected heuristically;
- derived Spanish and technical collections are populated.
Click Generate HTML indexes.
Generated outputs:
album-fuentes/album-fuentes.htmlalbum-fuentes-espanol/album-fuentes-espanol.htmlalbum-fuentes-tecnicas/album-fuentes-tecnicas.html
In an English workspace the equivalent album names use English folder names.
At the moment, the GUI does not generate PDF files directly, but creating them manually from the generated HTML files is very easy.
Open any of these files in Google Chrome:
album-fuentes/album-fuentes.htmlalbum-fuentes-espanol/album-fuentes-espanol.htmlalbum-fuentes-tecnicas/album-fuentes-tecnicas.html
One practical workflow is:
- Right-click the HTML file.
- Open it with
Google Chrome. - Press
Ctrl + P. - In destination, choose
Save as PDF.
This produces a relatively small PDF file and the fonts are displayed well.
Click Generate PNG cards.
Generated outputs:
- one PNG card per font in the main album;
- one PNG card per font in the Spanish album;
- one PNG card per font in the technical album.
These cards are rendered from the locally extracted font files with Pillow.
If you want to browse all cards sequentially in an image viewer such as Gwenview, use the optional flat-card buttons in the Workspace tab.
These actions copy all generated PNG cards from package subfolders into a single root folder per collection:
album-fuentes/tarjetas-fuentes-raizalbum-fuentes-espanol/tarjetas-fuentes-espanol-raizalbum-fuentes-tecnicas/tarjetas-fuentes-tecnicas-raiz
Equivalent English folder names are used in English-localized workspaces:
font-album/font-cards-rootspanish-font-album/spanish-font-cards-roottechnical-font-album/technical-font-cards-root
Those buttons stay disabled until the corresponding PNG cards already exist.
Current album structure in a Spanish workspace:
paquetes-debalbum-fuentesalbum-fuentes/fuentes-extraidasalbum-fuentes/tarjetas-fuentesalbum-fuentes/tarjetas-fuentes-raizalbum-fuentes-espanolalbum-fuentes-espanol/fuentes-extraidasalbum-fuentes-espanol/tarjetas-fuentes-espanolalbum-fuentes-espanol/tarjetas-fuentes-espanol-raizalbum-fuentes-tecnicasalbum-fuentes-tecnicas/fuentes-extraidasalbum-fuentes-tecnicas/tarjetas-fuentes-tecnicasalbum-fuentes-tecnicas/tarjetas-fuentes-tecnicas-raiz
Equivalent English folder names are also supported for new English-localized workspaces.
The Workspace Status table also shows the card output directories explicitly so you can verify their Status and Write access before generating PNG cards:
album-fuentes/tarjetas-fuentesalbum-fuentes-espanol/tarjetas-fuentes-espanolalbum-fuentes-tecnicas/tarjetas-fuentes-tecnicas
The optional flat-card section also shows, per collection:
- the destination flat folder path;
- whether that folder already exists.
Tests live in tests/.
Run them with:
env QT_QPA_PLATFORM=offscreen pytest -qCurrent coverage includes:
- workspace naming for English and Spanish;
- reuse of an existing localized workspace;
- write-access validation for workspace paths;
- creation of extracted-font and PNG-card directories;
- flat-card folder naming for English and Spanish;
- translation loading;
- translation of UI and service strings;
- PNG card generation from extracted fonts;
- flat PNG card export into a single root folder.
Translation files live in translations/.
Update .ts and .qm files with:
./translations/update_translations.shThis uses:
pylupdate6lrelease
Currently supported UI languages:
- English
- Spanish
Service-oriented modules currently in use:
WorkspaceService: workspace naming, path resolution, creation, and write checks.ExtractionService:.debextraction and duplicate control.AnalysisService: metadata reading, Spanish coverage, and technical classification.HtmlGenerationService: HTML album generation.CardGenerationService: PNG card generation.FlatCardExportService: copying generated PNG cards into flat root folders for sequential browsing.
The GUI in fontgallery/main_window.py orchestrates those services, shows per-action progress and step status in the Workspace tab, exposes optional flat-card export actions, and keeps the execution log in the separate Log tab.
Near-term priorities:
- implement PDF generation;
- add background workers to prevent GUI freezing on large jobs;
- improve classification with designer-oriented filters;
- refine exclusion and reporting logic.
See ROADMAP.md for the full checklist.
- Run the application from the repository root.
- Do not assume subdirectory execution.
- If you change translatable strings, rebuild the translation files.
- If you change workspace behavior, update
tests/test_workspace.py.
This repository is distributed under the terms of the license included in LICENSE.
