Tierzo is an open-source, agentic tier-list asset generator. It turns messy lists, spreadsheets, links, and prompts into polished image packs, tier-board previews, and TierMaker-ready exports.
The current version includes a reusable Python core, a CLI, a FastAPI backend, a Next.js demo, text-card/card-lab rendering, job-based generation, TMDb movie poster enrichment, Review Matches, ZIP export, and manifest.json generation.
- Read
.txt,.csv, and.xlsxinputs. - Use the first column from CSV/XLSX files.
- Generate one square PNG per item.
- Auto-fit and wrap long text.
- Use basic visual presets.
- Tune cards in the web Card Lab.
- Run generation as observable jobs.
- Use Auto Agent to classify pasted lists when
OPENAI_API_KEYis configured. - Optionally enrich movie lists with TMDb posters.
- Review matches, force specific items back to text cards, and regenerate.
- Write a portable
manifest.json. - Export a TierMaker extension payload JSON.
- Export a final tier-board PNG from the web demo.
- Export a ZIP bundle.
- Keep the legacy Excel script available under
examples/.
Use Python 3.10+ and pnpm.
python -m pip install -e .
pnpm installRun the full local demo from the repo root:
pnpm devThis starts:
- FastAPI on
http://localhost:8000 - Next.js on
http://localhost:3000
Run checks from root:
pnpm verifyUseful aliases:
pnpm dev:api
pnpm dev:web
pnpm test
pnpm lint
pnpm build
pnpm demo:verifyInstall dependencies directly for the legacy script if you are not using the package install:
python -m pip install -r requirements.txtGenerate a pack from a text file:
python -m tierzo .\items.txtGenerate a styled pack with slug filenames and a ZIP:
python -m tierzo .\items.txt --preset arcade --filename-mode both --zipGenerate from Excel:
python -m tierzo .\items.xlsxChoose output folder and image size:
python -m tierzo .\items.csv --output .\output --size 768Available text-card presets:
cleandarkarcadebubblegumhero-hudmono-soulcreature-dexcyber-mintblood-moon
Example:
python -m tierzo .\items.txt --preset bubblegumUse --filename-mode to choose generated image names:
index:001.pngslug:princess-peach.pngboth:003-princess-peach.png
Example:
python -m tierzo .\items.txt --filename-mode bothFor an input file named items.txt, Tierzo creates items_tierzo by default:
items_tierzo/
001.png
002.png
003.png
manifest.json
With --zip, Tierzo also creates:
items_tierzo.zip
The original prototype is preserved for reference:
python .\examples\generate_text_images.py .\items.xlsxIt reads the first worksheet, takes every non-empty value from column A, and generates numbered PNGs. Prefer the modern CLI for new workflows:
python -m tierzo .\items.xlsx --zipapps/
api/ FastAPI app and API workspace scripts
web/ Next.js demo app
docs/ Product, roadmap, architecture, demo, extension, open-core notes
examples/ Legacy/reference scripts and sample-oriented code
scripts/ Repo helper scripts for Python discovery and local dev
src/ Python package and CLI core
tests/ Python unit/API tests
Root is intentionally kept for entrypoints and tooling: README.md, AGENTS.md, LICENSE, package configs, Python configs, and env examples.
Tierzo is heading toward:
- A deployable Next.js demo with paste/upload and shareable artifacts.
- A tier-board preview with drag-and-drop ranking and final PNG export.
- TierMaker-ready ZIP batches plus extension-guided workflows.
- Agentic list cleanup, entity resolution, and user-visible trace/review.
- API enrichers for movies, games, anime, music, and more.
- A provider/plugin contract where TMDb, Steam, Spotify, and future tools return comparable matches.
- A Chrome extension companion for guided TierMaker workflows.
The first web demo lives in apps/web and talks to the FastAPI service in apps/api.
Optional agentic planning uses OpenAI and optional movie poster enrichment uses TMDb. Without these keys, Tierzo safely falls back to deterministic text cards.
$env:OPENAI_API_KEY="your_openai_api_key"
$env:TMDB_API_KEY="your_tmdb_api_key"You can also put it in a local root .env file:
OPENAI_API_KEY=your_openai_api_key
TMDB_API_KEY=your_tmdb_api_key
FRONTEND_URL=http://localhost:3000
NEXT_PUBLIC_API_URL=http://localhost:8000
For production, set the deployed frontend origin in FRONTEND_URL so FastAPI only allows that domain.
Run both services:
pnpm devOpen:
http://localhost:3000
Verify the running demo with Playwright:
# in another terminal, keep pnpm dev running first
pnpm demo:verifyRead more:
Install locally:
python -m pip install -e .Run the CLI:
python -m tierzo --helpRun tests:
pnpm testGenerated files are ignored by git when they use the default *_tierzo, *_images, .tierzo, or .zip paths.
Tierzo is released under the MIT License.