Skip to main content

Aesthetic drawing in your terminal — smooth braille strokes, shape correction, palettes, symmetry.

Project description

monoline

Aesthetic drawing in your terminal — smooth braille strokes, tldraw-style shape correction, curated palettes, symmetry, and a dot grid.

CI

🚧 Under construction — screenshot coming soon.

Install

pip install monoline    # or: pipx install monoline / uv tool install monoline

Quick start

monoline                    # start on a blank canvas
monoline drawing.mono.json  # open (or create) a named drawing

Click and drag with the mouse to draw. Hold Ctrl while dragging to snap the stroke to a line, circle, ellipse, or rectangle. Press ? any time for the in-app cheat sheet, c to clear, q to quit.

Keymap

Keys Action
drag draw
Ctrl+drag snap to shape (line / circle / ellipse / rect)
d / e pen / eraser
1-9 pick color
p / P next / previous palette
s cycle symmetry (off → vertical → horizontal → radial4)
g toggle dot grid
u / Ctrl+Z undo
r / Ctrl+Y redo
Ctrl+S save
x export (.txt = ANSI, .svg = SVG)
c clear the canvas (asks to confirm)
? this help overlay (escape or ? to close)
q quit (asks to confirm if there are unsaved changes)

Palettes

Cycle through with p / P, or set a default in the config file:

  • tokyonight (default)
  • catppuccin
  • gruvbox
  • nord
  • pastel
  • neon
  • mono

Configuration

monoline reads a TOML config file on startup, creating it with defaults on first run:

  • Linux: ~/.config/monoline/config.toml
  • macOS: ~/Library/Application Support/monoline/config.toml
  • Windows: %LOCALAPPDATA%\monoline\monoline\config.toml
# monoline configuration
shape_correct = "ctrl"   # ctrl | always | off
palette = "tokyonight"   # see the palette list above
smoothing = 0.5           # 0.0 - 1.0
  • shape_correct — when Ctrl+drag snaps to a recognized shape. "ctrl" (default) snaps only while Ctrl is held; "always" snaps every stroke without needing Ctrl (useful if your terminal swallows Ctrl+drag); "off" disables shape recognition entirely.
  • palette — the color palette to load on startup. Overridden automatically when opening a saved file that recorded a different palette.
  • smoothing — how much Chaikin smoothing/resampling is applied to freehand strokes, from 0.0 (raw mouse samples) to 1.0 (maximally smoothed).

File formats

  • .mono.json — monoline's native format: versioned JSON containing canvas size, background, palette, and every stroke. Fully reopenable and editable — this is what Ctrl+S saves.
  • .txt (ANSI) — a plain-text export with embedded truecolor ANSI escape codes. cat it in any truecolor-capable terminal to see the drawing.
  • .svg — a vector export of the strokes, suitable for viewing in a browser or editing in a vector graphics tool.

Pick the format by the extension you type when exporting with x.

Terminal support

monoline draws with Unicode braille characters and needs mouse reporting, so your terminal matters:

  • Windows: use Windows Terminal. The legacy conhost.exe console does not support the mouse reporting monoline needs for drawing.
  • Font: pick a braille-capable monospace font — Cascadia Code/Mono, any Nerd Font, or the default monospace font on macOS/Linux all work.
  • Ctrl+drag not registering? Some terminal emulators swallow the Ctrl modifier on mouse drags. If shape snapping never triggers, set shape_correct = "always" (snap every stroke) or "off" (disable it) in your config file.

License

MIT

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

monoline-0.1.0.tar.gz (49.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

monoline-0.1.0-py3-none-any.whl (19.5 kB view details)

Uploaded Python 3

File details

Details for the file monoline-0.1.0.tar.gz.

File metadata

  • Download URL: monoline-0.1.0.tar.gz
  • Upload date:
  • Size: 49.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for monoline-0.1.0.tar.gz
Algorithm Hash digest
SHA256 65cf36f2657fa1df9acc1aca93e409a8144d2b497338b121151da3ecd3c01a8c
MD5 4c206003fc83e4f0ce321f8563946982
BLAKE2b-256 36d3737907e533ad4baa7950c8b1beb2001b5ea59f94fc84d7918d9d2af0bb85

See more details on using hashes here.

Provenance

The following attestation bundles were made for monoline-0.1.0.tar.gz:

Publisher: release.yml on ByapakSigdel/monoline

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file monoline-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: monoline-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 19.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for monoline-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 8bfcec9a0b62c59353e8ccb4b1b443392c06fa36f1d8e73521af64d545753fc1
MD5 2292604acd3b0fc69e19f1a99b1d84d6
BLAKE2b-256 499d85f2170d97ee7e9ad593e4e57a7d377b927e5e5e05fe90c7f67158d96489

See more details on using hashes here.

Provenance

The following attestation bundles were made for monoline-0.1.0-py3-none-any.whl:

Publisher: release.yml on ByapakSigdel/monoline

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page