Render any input as a portico – a three-layer ASCII visualization.
Project description
Try it locally • Try it online • Example • How it works
About
portico renders input as a three-layered visual abstraction.
- The LLM reads your input, classifies it, and decomposes it into three layers
_ii^: roof, pillars, base. - The renderer, a pure function from JSON to ASCII, turns those layers into a portico.
- The output is a tiny monument of abstraction that helps clarify concepts.
| Glyph | Layer | Meaning |
|---|---|---|
^ |
Roof | The unifying idea |
ii |
Pillars | The load-bearing components |
_ |
Base | The foundation everything rests on |
Try it locally
Install
uv tool install portico-cli
portico README.md
portico https://example.com/article
portico ./src --no-legend
echo "your text here" | portico -
Try it online
Run portico in your browser, no install required:
The space uses 🦙 Llama 3.3 70B via Groq. Paste input and render.
Example
portico "https://en.wikipedia.org/wiki/Transformer_(deep_learning_architecture)"
── encyclopedia article: Transformer ─────────────────────────────────────
◆ ◆
^^^ ▲ ^^^
╔══════════════════════════════════════════════════════════════╗
║ Attention Is All You Need ║
╚══════════════════════════════════════════════════════════════╝
////º~~º~~º~~º~~º~~º~~º~~º~~º~~º~~º~~º~~º~~º~~º~~º~~º~~º~~º~~º~~º~\\\\
░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
▀██▀ ▀██▀ ▀██▀ ▀██▀ ▀██▀
██ ██ ██ ██ ██
██ ██ ██ ██ ██
RNN to Core Training Variants and Broad
Transformer Architecture Paradigm Efficiency Applications
██ ██ ██ ██ ██
██ ██ ██ ██ ██
▄██▄ ▄██▄ ▄██▄ ▄██▄ ▄██▄
░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
╔════════════════════════════════════════════════════════════════════════╗
║ Multi-head Attention ║
╚════════════════════════════════════════════════════════════════════════╝
legend:
^ Attention Is All You Need: Replacing recurrence with multi-head self-
attention enables parallel, scalable sequence modelling.
ii RNN to Transformer: Sequential limitations of RNNs and seq2seq models
motivated the shift to parallel attention.
ii Core Architecture: Tokenization, positional encoding, encoder and decoder
layers form the transformer's structure.
ii Training Paradigm: Large-scale self-supervised pretraining followed by
task-specific fine-tuning drives performance.
ii Variants and Efficiency: Encoder-only, decoder-only, and encoder-decoder
designs, plus optimizations like FlashAttention and KV caching, adapt the
architecture to diverse needs.
ii Broad Applications: Transformers have expanded from NLP to vision, audio,
robotics, and multimodal generation.
_ Multi-head Attention: Scaled dot-product multi-head attention is the
mathematical substrate every transformer component rests on.
─────────────────────────────────────────────────────── built with _ii^ ──
Run with claude-sonnet-4-6.
Pipeline
Five stages run in strict order. Each owns one responsibility and hands a typed value to the next. The CLI (cli.py) is the only place that wires them together and translates exceptions into exit codes.
┌──────────────────────────────┐
│ LLM provider │
│ claude / openai / gemini │
└──────────────────────────────┘
▲ ▲
│ (if oversized) │ (analyze + retry)
input ┌────────┐ ┌──────┴─────┐ ┌────────┐ ┌───┴────┐ ┌──────────┐ ASCII
─────▶ │ loader │──▶│ summarizer │──▶│ cache │──▶│analyzer│──▶│ renderer │ ──────▶
└────────┘ └────────────┘ └────────┘ └────────┘ └──────────┘
loaders/ summarize.py cache.py analyzer.py render/
- loader – reads the input (text, file, directory, URL, or repo) into a normalized
LoadedInput. - summarizer – chunks oversized inputs and recursively summarizes them via the LLM.
- cache – hashes
(text, provider, model)to JSON on disk; on hit, skips the analyzer. - analyzer – prompts the LLM for a three-layer decomposition; validates and retries on bad JSON.
- renderer – turns the analyzer's JSON into ASCII; pure function, never calls the LLM.
Inputs
- Raw text or stdin
- Local files and directories
- URLs (page content is extracted)
- Git repositories
When an input doesn't fit a three-layer shape – poems, flat lists, gibberish – portico refuses honestly rather than fake one.
Customization
| Flag | What it does |
|---|---|
--no-legend |
Hide the per-layer summary (legend renders by default) |
--reapex=N |
Pin the apex to seed N (random by default; pool of 600+ variants) |
--json |
Emit the analyzer's JSON instead of rendering |
--diagnose |
Print a pipeline report (input type, model, fit quality) and exit |
Run portico --help for the full list.
Apex
The apex is the ornament crowning the portico -- picked at render time from a pool of 600+ variants.
🎲 --reapex=SEED pins a specific composition to reproduce.
portico https://0trm.blog/data-science-at-camp-nou/ --reapex=0
── essay: Data Science at Camp Nou ─────────────────
▲ * ▲
~~~ ▲ ~~~
╔════════════════════════════════════════╗
║ Data-Driven Ticketing ║
╚════════════════════════════════════════╝
////º~~º~~º~~º~~º~~º~~º~~º~~º~~º~~º~~º~~º~\\\\
░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
▀██▀ ▀██▀ ▀██▀
██ ██ ██
██ ██ ██
Analytics Experimentation Predictive
██ ██ Modeling
██ ██ ██
██ ██ ██
▄██▄ ▄██▄ ▄██▄
░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
╔══════════════════════════════════════════════════╗
║ Fan Behavior ║
╚══════════════════════════════════════════════════╝
portico https://0trm.blog/data-science-at-camp-nou/ --reapex=1
── essay: Data Science at Camp Nou ─────────────────
◆ ◆
═══ ◆ ═══
╔════════════════════════════════════════╗
║ Data-Driven Ticketing ║
╚════════════════════════════════════════╝
////º~~º~~º~~º~~º~~º~~º~~º~~º~~º~~º~~º~~º~\\\\
░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
▀██▀ ▀██▀ ▀██▀
██ ██ ██
██ ██ ██
Analytics Experimentation Predictive
██ ██ Modeling
██ ██ ██
██ ██ ██
▄██▄ ▄██▄ ▄██▄
░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
╔══════════════════════════════════════════════════╗
║ Fan Behavior ║
╚══════════════════════════════════════════════════╝
portico https://0trm.blog/data-science-at-camp-nou/ --reapex=7
── essay: Data Science at Camp Nou ─────────────────
· · ·
░░░ ▲ ░░░
╔════════════════════════════════════════╗
║ Data-Driven Ticketing ║
╚════════════════════════════════════════╝
////º~~º~~º~~º~~º~~º~~º~~º~~º~~º~~º~~º~~º~\\\\
░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
▀██▀ ▀██▀ ▀██▀
██ ██ ██
██ ██ ██
Analytics Experimentation Predictive
██ ██ Modeling
██ ██ ██
██ ██ ██
▄██▄ ▄██▄ ▄██▄
░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
╔══════════════════════════════════════════════════╗
║ Fan Behavior ║
╚══════════════════════════════════════════════════╝
License
MIT
Built by with AI.
© trm
Project details
Release history Release notifications | RSS feed
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 portico_cli-0.1.8.tar.gz.
File metadata
- Download URL: portico_cli-0.1.8.tar.gz
- Upload date:
- Size: 25.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.11.7 {"installer":{"name":"uv","version":"0.11.7","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 |
9388daaa8f91d11565b833f7d3fe05c004172b6397746fa14597bf6b7a2f599f
|
|
| MD5 |
ed46294c83b107352e41a1f203b940f0
|
|
| BLAKE2b-256 |
4c2ac2fb34327852c22d938b7a1086585d3b4deeaee77e7268f4aa38c6d65df4
|
File details
Details for the file portico_cli-0.1.8-py3-none-any.whl.
File metadata
- Download URL: portico_cli-0.1.8-py3-none-any.whl
- Upload date:
- Size: 32.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.11.7 {"installer":{"name":"uv","version":"0.11.7","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 |
23200393cd3f179f23f8087a8f95a5ae5028e1774c74e1dded3020fef69f5a29
|
|
| MD5 |
fd189326d30e5a31428efbd18b06cdf8
|
|
| BLAKE2b-256 |
52da0904a3457183112303d223a37df27a94b743286734c0952749107441f42e
|