usage: glyph-arts [-h] [--json DATA] [--file PATH] [--duckdb SQL] [--db DB] [--title TITLE] [--width WIDTH] [--height HEIGHT] [--theme THEME]
                  [--font-tier {ascii,unicode,unicode-extended,nerd}] [--font FONT] [--decor {barcode,snake,dna,random,wave}]
                  [--frame {single,double,rounded,ascii,heavy,none}] [--gradient {sunset,viridis,ocean,rainbow,none}] [--engine {ascii,pixel,interactive}]
                  [--art {low,default,high}] [--xlabel XLABEL] [--ylabel YLABEL] [--xlim MIN MAX] [--ylim MIN MAX] [--xscale {linear,log}] [--yscale {linear,log}]
                  [--orientation {vertical,horizontal}] [--output OUTPUT] [--output-dir OUTPUT_DIR] [--out-dir OUTPUT_DIR] [--formats FORMATS]
                  [--polish {ascii-motion}] [--polish-style POLISH_STYLE] [--cmd CMD] [--no-color] [--marker {circle,triangle,diamond,star,square}] [--symbols SET]
                  [--candle-style {default,geom}] [--style {bar,half-circle,full-circle,braille}] [--fps N] [--version] [--check-deps] [--all] [--sample N]
                  [--animate] [--refresh FPS] [--window N] [--duration SEC] [--frames N] [--spinner SPINNER] [--rich-progress] [--lang LANG] [--kind KIND]
                  [--message MESSAGE] [--link-data LINK_DATA] [--link-title LINK_TITLE] [--statusline] [--no-splash] [--speed {fast,normal,slow}] [--no-clear]
                  [--chart CHART]
                  TYPE [art_text ...]

glyph-arts -- terminal-visible charts for Claude Code

positional arguments:
  TYPE                  Chart type: kline | line | scatter | step | bar | pie | multibar | stackedbar | hist | heatmap | box | indicator | event | confusion |
                        sparkline | table | tree | panel | gauge | dashboard | graph | curve | uniplot | banner | art | candlestick | hires | radar | plotille |
                        rich_live | animate | record | record-replay | to-hyperframes | to-ascii-motion | code | status | splash | demo | gallery | image | video
                        (media via chafa/ffmpeg)
  art_text              Text for TYPE=art (example: glyph-arts art SHIP IT)

options:
  -h, --help            show this help message and exit
  --json DATA           JSON data string
  --file PATH           Read JSON from a file path
  --duckdb SQL          SQL query against a DuckDB database
  --db DB               DuckDB file path (required with --duckdb)
  --title TITLE
  --width WIDTH         Chart width in terminal columns (ignored for table/tree/panel/graph/sparkline)
  --height HEIGHT       Chart height in terminal rows (ignored for table/tree/panel/graph/sparkline)
  --theme THEME         plotext theme: pro dark clear matrix retro elegant + brand palettes: claude linear tesla vercel (ignored for rich/graph/sparkline)
  --font-tier {ascii,unicode,unicode-extended,nerd}
                        Terminal font capability tier (default: auto-detect)
  --font FONT           TYPE=art figlet font (default: slant)
  --decor {barcode,snake,dna,random,wave}
                        TYPE=art optional art-lib decoration
  --frame {single,double,rounded,ascii,heavy,none}
                        TYPE=art optional Rich frame
  --gradient {sunset,viridis,ocean,rainbow,none}
                        TYPE=art optional text gradient
  --engine {ascii,pixel,interactive}
                        Render backend. ascii (default) = plotext/rich/drawille text art. pixel = matplotlib + chafa true-color pixel chart (requires `pip install
                        glyph-arts[pixel]` + chafa system binary). Phase A pixel support: bar/line/scatter only. interactive = Textual keyboard-first TUI for line
                        charts (requires `pip install glyph-arts[interactive]`).
  --art {low,default,high}
                        Visual fidelity tier (only with --engine pixel). low=block(compat). default=vhalf(btop-style). high=sextant(max resolution).
  --xlabel XLABEL       X-axis label (plotext charts)
  --ylabel YLABEL       Y-axis label (plotext charts)
  --xlim MIN MAX        X-axis limits
  --ylim MIN MAX        Y-axis limits
  --xscale {linear,log}
  --yscale {linear,log}
  --orientation {vertical,horizontal}
                        Bar orientation (bar/multibar/stackedbar)
  --output OUTPUT       Save chart to file (.png with pixel engine; .txt/.ansi/.html with ascii engine; .md for table)
  --output-dir OUTPUT_DIR
                        TYPE=to-hyperframes/to-ascii-motion output directory
  --out-dir OUTPUT_DIR  Alias for --output-dir
  --formats FORMATS     TYPE=to-ascii-motion comma-separated exports (html,mp4,gif,react,svg)
  --polish {ascii-motion}
                        Route rendered chart through ASCII Motion polish
  --polish-style POLISH_STYLE
                        ASCII Motion polish style (terminal, retro, matrix, minimalist, detailed, colorful)
  --cmd CMD             TYPE=record command to run inside asciinema
  --no-color            Disable ANSI colors (respects NO_COLOR env var)
  --marker {circle,triangle,diamond,star,square}
                        TYPE=scatter marker symbol set
  --symbols SET         TYPE=bar symbol set (block, progress, braille, arrows); image/video chafa --symbols value (default: braille)
  --candle-style {default,geom}
                        TYPE=kline candle glyph style
  --style {bar,half-circle,full-circle,braille}
                        TYPE=gauge glyph style
  --fps N               Video playback frames/sec for type=video (default: 12)
  --version             show program's version number and exit
  --check-deps          Print dependency availability table and exit
  --all                 With --check-deps: also show optional deps (braille/lttb/tui)
  --sample N            Downsample any list longer than N in the input data
  --animate             Read stdin line-by-line and re-render chart after each value
  --refresh FPS         Animation refresh rate in frames/sec (default: 10)
  --window N            Keep last N data points in view (0=unlimited, default: 50)
  --duration SEC        Auto-stop after SEC seconds (0=until EOF/Ctrl-C)
  --frames N            TYPE=animate frame count (default: 30)
  --spinner SPINNER     TYPE=animate/status Rich spinner preset (dots, dots2, line, pong, ...)
  --rich-progress       TYPE=gauge render with rich.progress Progress
  --lang LANG           TYPE=code syntax language (python, javascript, ...)
  --kind KIND           TYPE=status kind: ok, warn, error, info, loading
  --message MESSAGE     TYPE=status message text
  --link-data LINK_DATA
                        OSC 8 hyperlink URL for line/scatter data labels
  --link-title LINK_TITLE
                        OSC 8 hyperlink URL for the chart title
  --statusline          Single-line ANSI-safe output for Claude Code statusLine.command
  --no-splash           Skip the first-run mascot splash
  --speed {fast,normal,slow}
                        TYPE=demo speed: fast=10s, normal=30s, slow=60s
  --no-clear            TYPE=demo do not clear the terminal between sections
  --chart CHART         TYPE=gallery pre-select chart type

Chart types (42):
  plotext  : kline candlestick line scatter step bar multibar stackedbar hist heatmap box indicator event confusion
  rich     : table tree panel gauge pie dashboard rich_live
  drawille : curve hires radar
  plotille : plotille
  uniplot  : uniplot
  misc     : graph sparkline banner art animate record record-replay to-hyperframes to-ascii-motion code status splash demo gallery
  media    : image video

Examples:
  python chart.py kline --json '{"dates":["07/04/2026"],"open":[100],"high":[102],"low":[99],"close":[101]}'
  python chart.py scatter --json '[{"label":"A","x":[1,2,3],"y":[4,2,5]}]'
  python chart.py hist --json '{"values":[1,2,2,3,3,3,4,4,5],"bins":5}'
  python chart.py heatmap --json '{"matrix":[[1,2],[3,4]],"xlabels":["A","B"],"ylabels":["X","Y"]}'
  python chart.py box --json '{"data":[[1,2,3,4,5],[2,3,4,5,6]],"labels":["A","B"]}'
  python chart.py sparkline --json '{"values":[1,3,5,2,8,4,6]}'
  python chart.py indicator --json '{"value":23.4,"label":"Total Return %"}'
  python chart.py confusion --json '{"actual":[0,1,2,0,1,2],"predicted":[0,2,2,0,0,1],"labels":["Cat","Dog","Bird"]}'
  python chart.py gauge --json '[{"label":"CPU","value":72,"max":100},{"label":"RAM","value":14,"max":32}]'
  python chart.py banner --json '{"text":"PROFIT","font":"big","color":"green"}'
  python chart.py uniplot --json '[{"label":"A","x":[1,2,3,4],"y":[2,4,3,6]},{"label":"B","y":[1,3,2,5]}]'
  python chart.py tree --json '{"label":"root","children":[{"label":"A"},{"label":"B","children":[{"label":"C"}]}]}'
  python chart.py panel --json '{"content":"Hello world","title":"Info","box":"ROUNDED"}'
  python chart.py multibar --json '{"labels":["Q1","Q2"],"series":[{"label":"Rev","values":[10,12]},{"label":"Cost","values":[8,9]}]}'
  python chart.py event --json '{"data":[1,3,5,8,13]}'
  python chart.py line --duckdb "SELECT trade_date, close FROM stock_daily LIMIT 60" --db /path/to/data.duckdb
  cat data.json | python chart.py line
