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

monoline drawing demo

Freehand drawing with live smoothing — hold Ctrl and a rough circle snaps to a perfect one; symmetry mirrors strokes as you draw.

drawing import 3D model

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)
i import image, video, or 3D model (path prompt)
v paste image from clipboard
Shift+drag rotate and move a loaded 3D model
c clear the canvas (asks to confirm)
? this help overlay (escape or ? to close)
q quit (asks to confirm if there are unsaved changes)

Import images and video

Drop any image or video file onto the terminal (or press i for a path prompt, v to paste one from the clipboard, or run monoline photo.png / monoline clip.mp4) and it becomes braille art you can draw over. Still images are Floyd-Steinberg dithered with 24-bit color per cell; videos and animated GIFs play back in braille in real time. A braille cell's eight dots share one color, so chroma resolution is per-cell: that's the medium, not a bug. Erasing over media hides its dots non-destructively; undo brings the import back.

Supported video formats: MP4, WebM, MOV, AVI, MKV, M4V, and animated GIF. On Linux, clipboard paste needs xclip (X11) or wl-clipboard (Wayland).

image import demo

Import 3D models

Drop a 3D model onto the terminal (or press i and enter a path, or run monoline model.obj) to open it in a braille viewport with a ground grid and axes. The model renders as a shaded wireframe you can draw over.

Shift+drag with the mouse to rotate and move the model inside the viewport. Undo restores the previous pose or removes the import entirely.

Supported formats: OBJ, STL, GLB, GLTF, PLY, and OFF.

3D model demo

Drop an icosahedron (or any mesh), spin it with Shift+drag, then doodle over the wireframe — the ground grid shows the 3D viewport space.

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.4.0.tar.gz (1.6 MB view details)

Uploaded Source

Built Distribution

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

monoline-0.4.0-py3-none-any.whl (29.7 kB view details)

Uploaded Python 3

File details

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

File metadata

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

File hashes

Hashes for monoline-0.4.0.tar.gz
Algorithm Hash digest
SHA256 5b8603fb1bd39725198cec4a5afa8e045ec4afb06a912a9fc82ad11b5e934c60
MD5 e9984585761132d942642fc02717d9df
BLAKE2b-256 e608fdae2c872dd653a6bc5af8a71aa8778c7dcf9c9caa984a08f12f55c4b810

See more details on using hashes here.

Provenance

The following attestation bundles were made for monoline-0.4.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.4.0-py3-none-any.whl.

File metadata

  • Download URL: monoline-0.4.0-py3-none-any.whl
  • Upload date:
  • Size: 29.7 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.4.0-py3-none-any.whl
Algorithm Hash digest
SHA256 77daceb32a69c87007d57d4f0ee7c026d0f96db26e023e9c9004712fc175fd70
MD5 b75a8cbfa87b866778255301562cc3c9
BLAKE2b-256 44267e27832f978cb9bea9f56ac337fca3cffb221bef2ea50f460188361db968

See more details on using hashes here.

Provenance

The following attestation bundles were made for monoline-0.4.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