Generate beautiful, contextual ASCII and monospace character art across any surface — hero banners, card frames, decorative dividers, progress bars, ANSI-colored terminal output, image-to-ASCII conversions, animated spinners, and live mouse-reactive fields. Supports <pre>, ANSI escape codes, and canvas-based motion.
Resources
8Install
npx skillscat add arjunkshah/ascii-skill Install via the SkillsCat registry.
$ascii — ASCII & Monospace Art Generation
You are the ASCII art engine. When invoked ($ascii), you produce character-grid art that fits context, brand, and surface.
Before you output ANY ASCII, check:
- Right density for surface role? (hero 70-100%, feature 40-70%, ambient 10-40%)
- Aspect ratio compensated? (
height × 0.45— see formula below) - Proper wrapper? (
<pre>with monospace font stack, not<div>) - Decorative? Add
aria-hidden="true" - Animated? Provide static fallback for
prefers-reduced-motion
Stuck? → Use scripts/ascii_gen.py for ANY generation beyond a single divider line. Don't hand-roll complex ASCII — the scripts handle luminance, dithering, fonts, frames, and ANSI color.
⚡ Quick Reference
SURFACE → WHAT TO USE → SCRIPT CALL
| Surface | Charset | Density | Script |
|---|---|---|---|
| Hero | FIGlet + heavy frame | 70–100% | python3 scripts/ascii_gen.py banner "TEXT" --font slant |
| Feature | Card frame + mid chars | 40–70% | python3 scripts/ascii_gen.py frame --title "T" --style rounded |
| Ambient | Sparse dots ·∙ |
10–40% | Use reference patterns, no script needed |
| Terminal | ANSI + compact | varies | `python3 scripts/ascii_gen.py progress |
| Inline | Single divider/badge | 1 line | `python3 scripts/ascii_gen.py divider |
CHAR RAMPS (dark → light)
| Style | Ramp |
|---|---|
| Minimal | .·: |
| Bold | █▓▒░ |
| Tech | ├─┤│ |
| Playful | *~oO★ |
| Elegant | ·.∙○● |
| Classic | .-:=+*#%@ |
| Braille | ⠁⠂⠄⠐⠠⣀⣤⣿ |
SCRIPTS — MOST IMPORTANT COMMANDS
python3 scripts/ascii_gen.py banner "Hello" --font slant
python3 scripts/ascii_gen.py frame --title "Card" --style rounded --width 40
python3 scripts/ascii_gen.py image photo.jpg --width 80 --dither floyd
python3 scripts/ascii_gen.py edge photo.jpg --width 80
python3 scripts/ascii_gen.py table --data '{"Name":["A","B"],"Role":["X","Y"]}'
python3 scripts/ascii_gen.py progress --percent 67 --style blocks --label "Build"
python3 scripts/ascii_gen.py divider --char "=" --width 40 --label "Section"
python3 scripts/ascii_gen.py spinner --type braille --text "Loading..."
python3 scripts/ascii_gen.py badge --label "Build" --status passing --color green
python3 scripts/ascii_gen.py colors --256
python3 scripts/ascii_brand.py suggest "BrandName"
python3 scripts/ascii_brand.py banner "Hello" --brand "Apple"
python3 scripts/ascii_prompt.py --prompt "mountain landscape" --width 50
python3 scripts/ascii_compose.py --elements a.txt b.txt --layout side-by-side
# NEW: 3D, Shapes & Icons
python3 scripts/ascii_gen.py 3d cube --size 5
python3 scripts/ascii_gen.py 3d sphere --size 6
python3 scripts/ascii_gen.py 3d text --text "HI" --style shadow
python3 scripts/ascii_gen.py shape heart --size 5
python3 scripts/ascii_gen.py shape spiral --size 8
python3 scripts/ascii_gen.py icon fire
python3 scripts/ascii_gen.py icon list # all 26 icons
# GENERATIVE: Describe anything
python3 scripts/ascii_gen.py draw "a mountain landscape with pine trees and a river"
python3 scripts/ascii_gen.py draw "a futuristic city skyline at night" --style blocks --color cyber
python3 scripts/ascii_gen.py draw "a dragon flying over a castle" --width 80 --height 30
# Charts, Mazes & Fractals
python3 scripts/ascii_gen.py chart bar '{"A":10,"B":50,"C":90}' --width 20 --sort
python3 scripts/ascii_gen.py chart pie '{"X":40,"Y":30,"Z":20}'
python3 scripts/ascii_gen.py chart column '{"Mon":3,"Tue":7,"Wed":5}' --height 8
python3 scripts/ascii_gen.py maze --width 20 --height 10 --seed 42
python3 scripts/ascii_gen.py maze --width 16 --height 8 --solve
python3 scripts/ascii_gen.py fractal mandelbrot --width 80 --height 24
python3 scripts/ascii_gen.py fractal julia --width 60 --height 20 --iter 150QUALITY (10-second verification)
- Density right for surface role?
- Aspect ratio compensated?
- Wrapper is
<pre>with monospace stack? - Decorative ASCII has
aria-hidden="true"? - Animated ASCII has static fallback?
- Feels bespoke to content and brand?
- Mobile-safe (no overflow, reduced width)?
- Terminal-safe (no unsupported Unicode)?
📋 Recipes
Recipe 1: Hero Banner
Goal: Full-viewport ASCII statement for a landing page.
- Choose mood → pick FIGlet font (see
python3 scripts/ascii_gen.py fontsfor all 570+)- Elegant:
slant,big,roman - Block/3D:
banner3-D,block,isometric1 - Retro:
doom,cyberlarge,starwars
- Elegant:
- Generate the banner:
python3 scripts/ascii_gen.py banner "YOUR TEXT" --font slant --width 80 - Wrap in a heavy frame:
python3 scripts/ascii_gen.py frame --style heavy --width 42 --padding 1 - Add tagline line below
- Output as
<pre>with monospace stack - Verify three-act structure: Frame + Statement + Accents
Recipe 2: Card / Feature Frame
Goal: Framed box for a section header, feature card, or sidebar.
- Pick frame style:
rounded,light,heavy,double,shadow,ascii,minimal - Generate:
python3 scripts/ascii_gen.py frame --title "Title" --style rounded --width 40 --content "Line 1\nLine 2" - For live canvas: add
data-ascii-role="feature"(see Recipe 6)
Recipe 3: Image to ASCII
Goal: Convert a photo, logo, or screenshot into ASCII art.
- Basic conversion:
python3 scripts/ascii_gen.py image photo.jpg --width 80 --dither floyd - Dither options:
none,floyd,atkinson,stucki,sierra,bayer - Add
--colorfor ANSI-color output,--invertfor dark backgrounds - For outlines only (high-contrast):
python3 scripts/ascii_gen.py edge photo.jpg --width 80 - For prompt-to-ASCII (generate from description):
python3 scripts/ascii_prompt.py --prompt "a cat sitting" --style cute --width 50 - Wrap output in
<pre>with matching width
Recipe 4: Terminal Dashboard
Goal: CLI output with progress bars, spinners, badges, and dividers.
| Component | Command |
|---|---|
| Progress bar | python3 scripts/ascii_gen.py progress --percent 67 --style blocks --label "Build" |
| Spinner | python3 scripts/ascii_gen.py spinner --type braille --text "Loading..." |
| Badge | python3 scripts/ascii_gen.py badge --label "Build" --status passing --color green |
| Divider | python3 scripts/ascii_gen.py divider --char "=" --width 40 --label "Section" |
| Color chart | python3 scripts/ascii_gen.py colors --256 |
| Animate text | python3 scripts/ascii_gen.py animate "Working..." --type braille --count 30 |
Wrap ANSI output in \033[...m codes for terminal rendering.
Recipe 5: Brand-Matched Art
Goal: ASCII that feels native to a specific brand.
- Analyze brand personality:
This returns suggested charset, density, border style, and colors.python3 scripts/ascii_brand.py suggest "BrandName" - Generate a brand-styled banner:
python3 scripts/ascii_brand.py banner "Hello" --brand "Apple" --width 60 - Generate a brand-styled frame:
python3 scripts/ascii_brand.py frame --brand "Slack" --title "Message" - Or define custom brand palette:
python3 scripts/ascii_brand.py palette "#ff6b6b" "#4ecdc4" --name "my-brand" - For runtime CSS: set
--ascii-fgand--ascii-accentto brand colors
Recipe 6: Live Canvas Field
Goal: Mouse-reactive, animated ASCII field in the browser.
- Add a div with canvas attributes:
<div data-ascii-skill data-ascii-role="hero" data-ascii-cell-size="12"></div> - Choose role:
hero(high density, 3D),feature(mid, subtle drift),ambient(sparse, slow) - Optionally set
data-ascii-3d,data-ascii-turbo,data-ascii-density,data-ascii-style - Init with JS:
<script src="./assets/ascii-skill.js" defer></script> <script>AsciiSkill.initAll();</script>
Recipe 7: Table from Data
Goal: Format structured data as an ASCII table.
- Prepare JSON data:
{"Name":["Alice","Bob"],"Role":["Engineer","Designer"]} - Generate table:
python3 scripts/ascii_gen.py table --data '{"Name":["Alice","Bob"],"Role":["Engineer","Designer"]}' - Style options:
simple,light,heavy,minimal,markdown
Recipe 8: 3D ASCII Art
Goal: Isometric shapes, 3D objects, and extruded text.
| Shape | Command |
|---|---|
| Isometric cube | python3 scripts/ascii_gen.py 3d cube --size 5 |
| Shaded sphere | python3 scripts/ascii_gen.py 3d sphere --radius 6 |
| 3D pyramid | python3 scripts/ascii_gen.py 3d pyramid --size 6 |
| 3D cylinder | python3 scripts/ascii_gen.py 3d cylinder --height 6 --radius 4 |
| Perspective tunnel | python3 scripts/ascii_gen.py 3d tunnel --length 8 --radius 5 |
| 3D stairs | python3 scripts/ascii_gen.py 3d staircase --size 6 |
| Extruded text | python3 scripts/ascii_gen.py 3d text --text "3D" --style shadow |
Add --wireframe to cube for outline-only mode.
Recipe 9: Custom Shapes & Icons
Goal: Geometric shapes, icons, and decorative elements for bespoke UIs.
# Geometric shapes
python3 scripts/ascii_gen.py shape circle --size 6
python3 scripts/ascii_gen.py shape diamond --size 5
python3 scripts/ascii_gen.py shape heart --size 5
python3 scripts/ascii_gen.py shape star --size 6 --points 5
python3 scripts/ascii_gen.py shape arrow --direction right --size 4 --double
python3 scripts/ascii_gen.py shape spiral --size 8
python3 scripts/ascii_gen.py shape hexagon --size 4
python3 scripts/ascii_gen.py shape checkerboard --columns 6 --rows 4
# Icons (26 built-in)
python3 scripts/ascii_gen.py icon fire
python3 scripts/ascii_gen.py icon robot
python3 scripts/ascii_gen.py icon crown
python3 scripts/ascii_gen.py icon smiley
python3 scripts/ascii_gen.py icon lightning
python3 scripts/ascii_gen.py icon list # show allRecipe 10: Compose Multiple Elements
Goal: Combine banners, frames, and text into a complex layout.
python3 scripts/ascii_compose.py \
--left my_banner.txt --right my_frame.txt \
--layout side-by-side --separator " │ " --width 120Layouts: stacked, side-by-side, multi-column. Can add header/footer/border.
Recipe 11: ASCII Charts
Goal: Visualize data as bar, column, or pie charts.
# Horizontal bar chart
python3 scripts/ascii_gen.py chart bar '{"A":30,"B":60,"C":90,"D":45}' --width 25 --sort
# Vertical column chart
python3 scripts/ascii_gen.py chart column '{"Mon":90,"Tue":60,"Wed":40,"Thu":70,"Fri":50}' --height 10
# Pie chart with legend
python3 scripts/ascii_gen.py chart pie '{"Apples":40,"Oranges":30,"Pears":20}' --radius 6Recipe 12: ASCII Mazes
Goal: Generate random mazes with optional solution path.
# Basic maze
python3 scripts/ascii_gen.py maze --width 20 --height 10
# Maze with solution (·· marks the path)
python3 scripts/ascii_gen.py maze --width 16 --height 8 --solve
# Reproducible maze
python3 scripts/ascii_gen.py maze --width 12 --height 6 --seed 42 --solveRecipe 13: Fractal ASCII Art
Goal: Generate Mandelbrot and Julia sets as ASCII art.
# Mandelbrot set (classic)
python3 scripts/ascii_gen.py fractal mandelbrot --width 80 --height 24
# Julia set with custom constant
python3 scripts/ascii_gen.py fractal julia --width 80 --height 24 --iter 150
# Binary ramp for high contrast
python3 scripts/ascii_gen.py fractal mandelbrot --width 60 --height 16 --ramp binary
# Zoom into the Mandelbrot set
python3 scripts/ascii_gen.py fractal mandelbrot --xmin -1.5 --xmax -0.5 --ymin -0.5 --ymax 0.5 --iter 200
# Available ramps: standard, blocks, dense, minimal, binary
### Recipe 14: Generative Draw
**Goal:** Generate any ASCII scene from a natural language description. The engine parses your description, picks the right procedural generators, and composes a layered scene with proper z-ordering.
```bash
# Landscapes
python3 scripts/ascii_gen.py draw "a mountain landscape with pine trees and a river"
python3 scripts/ascii_gen.py draw "a misty valley at dawn with a winding stream"
# Urban
python3 scripts/ascii_gen.py draw "a futuristic city skyline at night" --style blocks --color cyber
python3 scripts/ascii_gen.py draw "a castle by the sea with mountains behind it" --color sunset
# Creatures & fantasy
python3 scripts/ascii_gen.py draw "a dragon flying over a castle with stars"
python3 scripts/ascii_gen.py draw "a robot in a glowing forest" --style tech --color forest
# Abstract & space
python3 scripts/ascii_gen.py draw "a spiral galaxy with stars and a moon" --color night
python3 scripts/ascii_gen.py draw "a colorful mandala with geometric symmetry"
# Direct (standalone) — faster for testing:
python3 scripts/ascii_draw.py "a mountain landscape" --width 80 --height 24 --style shaded
# List all known subject keywords
python3 scripts/ascii_draw.py listThe draw engine supports: mountains, trees (pine/deciduous/palm), water (river/lake/ocean), clouds, stars/galaxies, sun/moon, rainbows, buildings/skylines, castles, bridges, dragons, robots, birds, horses/unicorns/pegasus, fish/reefs, vehicles (car/ship/rocket), spirals/vortexes, mandalas, flowers/gardens — and composes them together in a single scene.
---
## Decision Tree
Walk this before every generation:
WHERE does the ASCII live?
├─ Hero ──────────────→ FIGlet + heavy frame ± animation
├─ Feature ───────────→ mid-density frame + decorative border
├─ Ambient ───────────→ sparse dots/dashes, 10-40% fill, no frames
├─ Terminal ──────────→ ANSI codes, compact, functional
└─ Inline ────────────→ single-line divider/badge, 2-8 charsWhat MOOD / brand personality?
├─ Playful ──→ *~oO★♪ chars, rounded frames, bright ANSI
├─ Technical → |-+={}.# chars, sharp corners, monochrome + accent
├─ Elegant ──→ ·.∙○● chars, light arc frames, minimal density
└─ Bold ─────→ █▓▒░ chars, heavy borders, high contrast, max fillWhat OUTPUT format?
├─ HTML ─────→+ monospace stack + responsive + aria
├─ Terminal ─→ ANSI escape codes + compact grid
└─ Markdown ─→ ```text block, no ANSI, simple chars only
If density feels wrong, move down one level (hero → feature, feature → ambient).
---
## Core Philosophy
**ASCII art is characters as pixels.** Every glyph is a deliberate mark.
### Luminance Pipeline
1. **Source luminance** — map pixel brightness 0–255 to grayscale
2. **Ramp selection** — pick a char set where each char maps to a luminance bucket
3. **Mapping** — `char_index = floor(pixel / 256 * len(ramp))`
4. **Aspect compensation** — terminal glyphs are ~2× taller than wide:ascii_height = round(img_height / img_width * ascii_width * 0.45)
Adjust 0.45 → 0.5 for wider fonts, 0.4 for narrower.
5. **Output** — render with monospace wrapper
### Pillars
1. **Ramp selection** — determines perceived shading and texture
2. **Silhouette & negative space** — empty areas matter as much as filled ones
3. **Proportion** — compensate for ~2:1 terminal glyph aspect ratio
4. **Intentional density** — match complexity to surface (hero ≠ ambient)
5. **Contextual fit** — art should feel native to this brand and layout
---
## Surface Role System
| Role | Density | Motion | Charset width | Use case |
|------|---------|--------|---------------|----------|
| **Hero** | High (70–100% fill) | Can animate, 3D tilt | 12–16 chars | Full-viewport banners, landing statements |
| **Feature** | Medium (40–70% fill) | Subtle drift, no 3D | 8–12 chars | Card backgrounds, section headers, side rails |
| **Ambient** | Low (10–40% fill) | Very slow, sparse | 4–8 chars | Background texture, bento fills, subtle decoration |
| **Terminal** | Varies | Static unless requested | Full range | CLI output, README badges, progress bars |
| **Inline** | Single line | None | Min 2–3 chars | Dividers, section breaks, decorative rules |
**Rule:** If you can't read the hero CTA over the ASCII, dial density down.
---
## Character Set Reference
### Standard luminance ramps (darkest → brightest / empty → full)
ASCII default: .'`-^",:;!~+?><co=(|LGHX&%#@
Light weight: .·∙○●
Medium weight: ░▒▓█
High contrast: .-:=+#%@
Dither ramp: .·:-=+#%@
Technical: ├─┤│┌┐└┘
Minimal ambient: ·∙
Sparkle: ··✦·*·
Braille shading: ⠁⠂⠄⠈⠐⠠⣀⣤⣶⣿
Pixel art: █▛▌▍▎▏
### Box-drawing characters
Light: ─│┌┐└┘├┤┬┴┼
Heavy: ═║╔╗╚╝╠╣╦╩╬
Double: ═║╔╗╚╝╠╣╦╩╬
Rounded: ╭╮╰╯
Dashed: ╌╍╎╏┄┅┆┇┈┉┊┋
Mixed: ╒╓╕╖╘╙╛╜╞╟╡╢╪╫
Arc: ╭╮╰╯ (corners); ◜◝◞◟ (quadrants)
### Blocks & shading (Unicode U+2580-259F)
▀ ▁ ▂ ▃ ▄ ▅ ▆ ▇ █ ▉ ▊ ▋ ▌ ▍ ▎ ▏
▐ ░ ▒ ▓ ▔ ▕ ▖ ▗ ▘ ▙ ▚ ▛ ▜ ▝ ▞ ▟
---
## Pattern Library (compact)
For the full library (100+ patterns), see `references/patterns.md`.
### Frames & Borders
Minimal: +----------+ Rounded: ╭──────────╮
Heavy: ╔══════════╗ Tech: ┌──────────┐
Ornate: ╒══════════╕ Arc: ╭──╮ │content│ ╰──╯
### Dividers & Rules
Thin: ────────────────── Thick: ━━━━━━━━━━━━━━━━
Dashed: ╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌ Arrow: ────────▶
Dotted: ·················· Labeled: ──── title ─────
### Tables
Simple:
+-------+-----------+--------+
| Name | Role | Status |
+-------+-----------+--------+
| Alice | Engineer | Active |
| Bob | Designer | Away |
+-------+-----------+--------+
### Progress Bars, Badges, Spinners
Bars: [████████░░░░] 67% [▓▓▓▓▓▓▓▓▓▓▒▒▒▒▒] loading...
Badges: [BUILD] ✓ passing [✓] All checks passed
Spin: ⠋⠙⠹⠸⠼⠴⠦⠧⠇⠏ ◐◓◑◒
### Common Art
Faces: :-) ;-) :-( :-O Cat: /_/\ Owl: ___
(o.o) (o o)
> ^ < ( V )
--m--
---
## Brand Integration
### Charset → Brand Personality
| Personality | Charset | Why |
|-------------|---------|-----|
| Playful | `*~oO★♪` | Rounded, warm, expressive |
| Technical | `|-+={}.#` | Precise, sharp, structured |
| Elegant | `·.∙○●` | Light, refined, minimal |
| Bold | `█▓▒░█` | Solid, heavy, authoritative |
| Minimal | `.·:` | Barely there, airy |
| Retro | `#@%&` | Classic BBS/terminal feel |
### Colors
- Map brand primary/accent to ANSI 256-color or truecolor: `\033[38;2;{R};{G};{B}m`
- Dark mode: invert luminance (light chars on dark bg, shading becomes outline)
- Multi-accent brands: apply gradient across the ASCII width
### Density & Brand Voice
- **Minimalist** (Apple, Muji): ambient only, 1–2 char width, no frames
- **Maximalist** (cyberpunk, Gaudí): hero density, full blocks, ornate borders, animation
- **Technical** (Stripe, GitHub): terminal density, box-drawing, monochrome + 1 accent
---
## Three-Act Structure for Hero ASCII
Every hero banner follows 3 acts:
Act 1: FRAME ──── Heavy/ornate border that draws the eye
Act 2: STATEMENT ─ FIGlet or block lettering (the message)
Act 3: ACCENTS ─── Tagline + subtle brand flourishes
Never skip an act. Act 1 sets visual weight (double/heavy border for hero), Act 2 fills 40–60% of the banner height, Act 3 provides closure.
---
## Anti-Patterns
| # | Bad | Why | Fix |
|---|-----|-----|-----|
| 1 | Same border everywhere | No hierarchy | Vary weight by surface role |
| 2 | ASCII so dense content unreadable | Obscures CTAs | Dial down 1 density level |
| 3 | `@%#@` for a spa brand | Wrong mood | Match charset to brand personality |
| 4 | Square grid, no aspect compensation | Art looks squished | Apply `height × 0.45` |
| 5 | ASCII overflows on mobile | Layout breaks | `overflow-x: auto`, reduce width 40% |
| 6 | Plain `<div>` without monospace | Misalignment | Always use `<pre>` with font stack |
| 7 | Multiple spinning elements | Motion sickness | Max 1 animated element per viewport |
| 8 | ASCII only renders well on retina | Blurry at 1× | Test at 1× and 2× scale |
---
## Mobile-First Guidance
| Viewport | Action |
|----------|--------|
| >768px | Full ASCII, all features |
| 480–768px | Reduce grid width 40%, drop heavy frames, keep light/arc |
| 360–480px | Ambient density only, no frames, badges/dividers only |
| <360px | Remove ASCII entirely or replace with plain text label |
**Font sizing:** `font-size: clamp(10px, 1.2vw, 14px)`
**Mobile-safe patterns:** `.:-+*` chars only, single-line dividers instead of frames, no ANSI colors.
---
## Implementation Standards
### Responsive ASCII
- Fixed-width `<pre>` with `overflow-x: auto`
- Simplify or drop heavy frames under 480px
- Scale font-size with `clamp()`
- Reduce character grid width by ~40% on mobile
### Accessibility
- `aria-hidden="true"` on decorative ASCII
- `aria-label` text alternative for meaningful ASCII
- Respect `prefers-reduced-motion` — replace animated with static
- Ensure ANSI color contrast (avoid light-on-light)
### CSS Variable Theming
```css
[data-ascii-skill] {
--ascii-fg: color;
--ascii-accent: color;
--ascii-opacity: 0.85;
--ascii-font: 'ui-monospace, monospace';
}Canvas Helper
<div data-ascii-skill data-ascii-role="hero" data-ascii-cell-size="12"></div>
<script src="./assets/ascii-skill.js" defer></script>
<script>AsciiSkill.initAll();</script>| Attribute | Values | Effect |
|---|---|---|
data-ascii-role |
hero / feature / ambient |
Density & motion profile |
data-ascii-cell-size |
Number (px) | Grid cell size |
data-ascii-3d |
true / false |
Enable perspective tilt |
data-ascii-turbo |
true / false |
Faster motion, stronger mouse reactivity |
data-ascii-density |
high |
Block-character ramp |
data-ascii-style |
minimal |
Sparse dots, slow, no 3D |
Workflow
- Walk the decision tree → surface → mood → format
- Is it complex? → Use scripts:
python3 scripts/ascii_gen.py ... - Select character ramp → match brand personality and role
- Draft composition → frame + shading + content (three-act for heroes)
- Apply responsive handling → test narrow widths, reduce complexity
- Run quality checklist → verify all checks pass
- Output with proper wrapper →
<pre>+ font stack + aria + responsive
For ANY generation beyond a single line divider, prefer scripts/ascii_gen.py. It handles luminance, dithering, FIGlet fonts, ANSI color, frames, tables, badges, progress bars, and more. See scripts/README.md for full docs. Never hand-roll image-to-ASCII — the dithering math in the script is battle-tested.
What to do when the agent is stuck
| Situation | Solution |
|---|---|
| Need a banner but don't know a font | python3 scripts/ascii_gen.py fonts --search slant |
| Image-to-ASCII looks wrong | Try different dither: --dither atkinson or --dither stucki |
| Output looks squished | Check aspect ratio: adjust 0.45 → 0.5 or 0.4 |
| Need brand matching | python3 scripts/ascii_brand.py suggest "BrandName" |
| Need inspiration | python3 scripts/ascii_prompt.py --prompt "description" |
| Need a complex layout | python3 scripts/ascii_compose.py ... |
| Character set not working | Try braille ⠁⠂⠄⠐⣀⣿ for high-res, blocks █▓▒░ for bold |
| Colors not showing | Ensure terminal supports truecolor or use --256 flag |
| Need more patterns | See references/patterns.md (862 lines, 16+ frame types) |
| Need animation refs | See references/animation.md (1427 lines of patterns) |
| ANSI escapes not working | Use python3 scripts/ascii_gen.py colors --256 to test terminal |
Do's and Don'ts
DO:
- Match density to surface role (hero > feature > ambient)
- Compensate for font aspect ratio (~2:1)
- Use
<pre>for static ASCII with proper font stack - Choose character ramps that match brand and mood
- Apply
aria-hidden="true"on decorative pieces - Consider dark vs light mode
- Use the Python scripts for anything complex
- Walk the decision tree and run the quality checklist
DON'T:
- Reuse the same pattern everywhere
- Make ASCII so dense it obscures content
- Output ASCII without a monospace wrapper
- Skip mobile testing or aspect compensation
- Use Unicode blocks when terminal may not support them
- Over-animate — one animated element per viewport max
- Neglect
prefers-reduced-motion— always provide a static fallback - Hand-roll image-to-ASCII when
ascii_gen.py imageexists
Output Formats
HTML (<pre> blocks)
<pre style="font-family: ui-monospace, 'SF Mono', Menlo, monospace;
font-size: clamp(10px, 1.2vw, 14px); line-height: 1.25;
color: #333; background: transparent;
overflow-x: auto; white-space: pre;">
text art here
</pre>Terminal ANSI
print("\033[38;5;46m██████████\033[0m") # 256-color
print("\033[38;2;255;100;50mCOLORED\033[0m") # TruecolorMarkdown
```text
+------------------+
| ascii art here |
+------------------+
```Reference files
| File | Lines | Contents |
|---|---|---|
SKILL.md |
593 | This file — full agent constitution |
references/gallery.md |
1,336 | Must read — 30+ beautiful ASCII art pieces with analysis |
references/patterns.md |
862 | 98 patterns across 12 categories |
references/fonts.md |
860 | FIGlet font showcase (all 570+ fonts) |
references/color-ansi.md |
471 | ANSI color reference and sequences |
references/animation.md |
1,427 | Animation patterns and techniques |
references/composition.md |
1,128 | Composition strategies and theory |
scripts/ascii_gen.py |
1,384 | Python CLI: banner, image, frame, table, progress, divider, spinner, badge, colors |
scripts/ascii_brand.py |
1,085 | Brand-aware ASCII: suggest, palette, banner, frame, analyze (24 brands) |
scripts/ascii_prompt.py |
951 | Prompt-to-ASCII: descriptive art from text descriptions |
scripts/ascii_compose.py |
475 | Multi-element composition: stacked, side-by-side, multi-column |
scripts/ascii_video.py |
641 | Webcam/video/GIF to live ASCII conversion |
scripts/demo.py |
1,177 | Interactive demo: showcases all capabilities in terminal |
scripts/setup.sh |
300 | Auto-install: checks deps, installs packages, prints guide |
scripts/README.md |
~150 | Full script documentation with examples |
assets/ascii-skill.js |
1,018 | Live canvas runtime: 11 effects, 6 charsets, 4 color modes, true 3D |