LangThemeGenerator Overview
LangThemeGenerator takes the 16-color palettes that AptlantisLogos extracts from each logo and turns them into ready-to-use IDE and terminal themes: one palette in, six theme formats out — VSCode, Notepad++, JetBrains .icls, Windows Terminal, Alacritty, and a web design-token JSON file.
:::info Direct pipeline from AptlantisLogos
This project's entire input is AptlantisLogos' palettes/*.txt output. It's the second stage of a two-project pipeline: extract a palette from a logo, then turn that palette into a full set of matching editor themes.
:::
Who it's for
The operator, wanting every language/tool they work with to have a matching, semantically-consistent editor and terminal theme derived from that language's own Aptlantis logo palette — rather than hand-picking colors per IDE.
The core concept
generate_theme.py is intentionally a zero-argument batch script, not a flag-driven CLI: it scans the entire palettes/ directory, and for every palette file with at least 8 parseable colors, generates a full theme set:
palettes/*.txt <-- input: 16-color ImageMagick exports
│
▼ generate_theme.py (no flags — processes everything found)
themes/
vscode/apt-<name>-theme.json
notepadpp/apt-<name>-theme.xml
jetbrains/apt-<name>-theme.icls
terminal/windows/apt-<name>-theme.json
terminal/alacritty/apt-<name>-theme.toml
web/apt-<name>-tokens.json
vscode/apt-themes-extension/ <-- packageable VSCode extension folder
Palettes that fail to parse or have fewer than 8 usable colors are skipped with a warning to stderr, not silently dropped — the script prints OK or SKIP per palette as it runs.
Why this shape
Semantic token assignment (mapping raw palette colors to roles like background/foreground/accent/syntax-highlight groups) is the one piece of real logic here; once tokens are assigned, generating each target format is a mechanical serialization step. Batch-processing everything in palettes/ rather than taking a single --input argument matches how it's actually used: regenerate all themes whenever AptlantisLogos' palette set changes, not one at a time.