{
  "markdown": "<div align=\"center\">\n\n# Nib\n\n### Anyone can make one good AI illustration. Making the *10th* still look like **you** is the hard part.\n\n**Nib turns an idea — or a whole article — into hand-drawn editorial illustrations for your\nblog post, newsletter, or docs.** Every image is white-background, one-idea-per-image, and\nstars **one character you own** (a mascot, a logo character, anything). The character\n*performs* the idea — pushes it, sorts it, steers it — instead of just posing. And because\nit's sent as the reference on every render, it stays on-model across the whole piece: the\n2nd, 5th, and 10th image still look like the 1st.\n\n<p>\n  <img src=\"site/gallery/marker.jpg\" width=\"32%\" alt=\"marker look\" />\n  <img src=\"site/gallery/riso.jpg\" width=\"32%\" alt=\"riso look\" />\n  <img src=\"site/gallery/woodcut.jpg\" width=\"32%\" alt=\"woodcut look\" />\n</p>\n\n*Same character, three looks — and it didn't drift.*\n\n<img src=\"site/shots/concept.png\" width=\"49%\" alt=\"Concept mode — the studio: a control rail and a plate gallery\" />\n<img src=\"site/shots/article.png\" width=\"49%\" alt=\"Article mode — a shot list you shape: select, add, or expand the ideas, then draw them in parallel\" />\n  \n<p>\n  <img src=\"site/concepts/momentum.jpg\" width=\"32%\" alt=\"building momentum — pushing a snowball uphill\" />\n  <img src=\"site/concepts/debugging.jpg\" width=\"32%\" alt=\"debugging — pulling one thread from a tangled ball of yarn\" />\n  <img src=\"site/concepts/focus.jpg\" width=\"32%\" alt=\"deep focus — working inside a glowing bubble while the world fades\" />\n</p>\n\n*Three ideas in, three scenes out — `building momentum`, `debugging`, `deep focus` — the same character performing each.*\n\n<p>\n  <img src=\"site/concepts/app-rubberduck.jpg\" width=\"32%\" alt=\"rubber-duck debugging — explaining a problem to a rubber duck\" />\n  <img src=\"site/concepts/app-shipit.jpg\" width=\"32%\" alt=\"ship it early — driving a patched-together cart, fixing it on the move\" />\n  <img src=\"site/concepts/app-interest.jpg\" width=\"32%\" alt=\"compound interest — a seesaw tipping as percentage blocks stack up\" />\n</p>\n\n*Real plates straight from the app — a different character, any concept, still on-model.*\n\n**[nib.henryzh.dev](https://nib.henryzh.dev)** · Free & open source · MIT\n\n</div>\n\n---\n\n## Install\n\nInstall the skill into your agent — one command, no app to download:\n\n| Agent | Command |\n| --- | --- |\n| **Claude Code** | `npx skills add caezium/nib --skill nib` |\n| **Codex CLI** | `codex plugin add caezium/nib` |\n| **Cursor** | Add plugin: `caezium/nib` |\n| **Gemini CLI** | `gemini extensions install caezium/nib` |\n\nThen just ask:\n\n```text\nUse nib to illustrate: \"small habits compound into a big result\"\nUse nib to make a 5-image set in riso for this article: https://paulgraham.com/ds.html\nUse nib: set my avatar to ./avatar.png, then illustrate \"saying no protects focus\" in woodcut\n```\n\n## Two ways to pay: **free**, or pennies\n\n- **Free — use your ChatGPT / Codex subscription.** If you're logged into the Codex CLI\n  (`codex login`), Nib generates on your existing subscription. No API key, no per-image\n  charge.\n- **OpenRouter — a few cents an image.** Set `OPENROUTER_API_KEY` and Nib uses\n  `google/gemini-3.1-flash-image-preview` (or any image model via `--model`). Exact 16:9. A\n  whole blog post for under a dollar.\n\nIt picks automatically: your OpenRouter key if set, else a free **Codex** or **Gemini CLI**\nlane (whichever you're signed into).\n\n## Bring a character — or grab one\n\nDon't have a mascot? Use a **bundled character**:\n\n```text\nUse nib with the \"blip\" character to illustrate \"ship small, ship often\"\n```\n\nThe [`skills/nib/characters/`](skills/nib/characters/) library ships ready-to-use\ncharacters (and **PRs adding your own are welcome** — a character is just a folder with a\none-paragraph spec + a reference image). Or bring your own avatar image, and optionally\n**describe it in words** (`--avatar-spec`) to lock its design even tighter.\n\n## How it works\n\n1. **A character** — your avatar image, a bundled pack, or a written description. It's the\n   reference on every render, so it stays recognizable.\n2. **An idea or an article.** A URL is fetched and reduced to clean text first. For an\n   article, Nib picks the **load-bearing moments** (a judgment, a flow, a before/after, a\n   trap, a loop) — 4–8 of them, not one image per paragraph.\n3. **A fresh, concrete metaphor** in which the character performs the idea — pushes it,\n   sorts it, steers it, builds it.\n4. **Generate**, reviewing each against the quality bar (white background, one idea, the\n   character performing the action, short labels only).\n\nThe methodology and the looks live in one place — `skills/nib/references/` — read by\n**both** the skill engine and the desktop app, so they never drift.\n\n## The thirteen looks\n\n`marker` · `riso` · `blueprint` · `woodcut` · `pixel` · `clay` · `gouache` · `chalk` ·\n`diorama` · `enamel` · `felt` · `manila` · `phosphor` — one per piece, so a set reads as a\nseries. See [`references/styles.md`](skills/nib/references/styles.md).\n\n## The engine\n\n```sh\npython3 skills/nib/scripts/generate.py \\\n  --idea \"trust is built one piece of evidence at a time\" \\\n  --style marker --avatar ./avatar.png --out out.png\n```\n\nFlags: `--backend auto|openrouter|codex` · `--model <id>` · `--avatar-pack <name>` ·\n`--avatar-spec \"<text>\"` · `--register explainer` · `--transparent` · `--doctor`.\nDependency-free (`python3` 3.9+ only).\n\n**Transparent cutouts.** Add `--transparent` to lift the art off its white ground into a\ntransparent PNG — for slides, stickers, or dark UI. It uses [`rembg`](https://github.com/danielgatis/rembg)\n(`pip install 'rembg[cpu]'`), which isn't bundled, so the core stays dependency-free; without\nit the opaque render is kept. Works standalone on any image too:\n`python3 skills/nib/scripts/cutout.py <image.png>`.\n\n## The desktop app\n\nA TypeScript + React desktop app (macOS) — avatar onboarding, a style picker, a generation\nhistory grid, and a zoomable lightbox. **Concept mode** draws one idea at a time; **Article\nmode** turns a post — or your own draft — into a shot list you *shape*: pick which moments\nto draw, add your own, ask for more, then generate them in parallel.\n\n<p align=\"center\">\n  <img src=\"site/shots/concept.png\" width=\"49%\" alt=\"Concept mode — the studio: a control rail and a plate gallery\" />\n  <img src=\"site/shots/article.png\" width=\"49%\" alt=\"Article mode — a shot list you shape: select, add, or expand the ideas, then draw them in parallel\" />\n</p>\n<p align=\"center\">\n  <img src=\"site/shots/avatar.png\" width=\"49%\" alt=\"Avatar setup — start from Hen, Mo, or Sumi, or bring your own character\" />\n  <img src=\"site/shots/settings.png\" width=\"49%\" alt=\"Settings — free Codex/Gemini lanes or a keyed OpenRouter model, plus a shot-list model picker\" />\n</p>\n\n*Concept and Article modes · pick a starter character · free and keyed generation lanes.*\n\n**Install (macOS, Apple Silicon):**\n\n```sh\nbrew install --cask caezium/tap/nib\n```\n\nThis is a self-signed pre-1.0 build, so the cask clears the Gatekeeper quarantine flag on\ninstall. If macOS still blocks it, right-click the app and choose **Open**. Or grab the\n`.dmg` straight from [Releases](https://github.com/caezium/nib/releases).\n\n**Run from source:**\n\n```sh\nnpm install && npm run gen   # first time\nnpm run dev                  # real generation (OpenAI or OpenRouter key)\nnpm run dev:mock             # placeholder images, no API calls\nnpm run build                # package the app\n```\n\n## Privacy & telemetry\n\nThe **desktop app** sends anonymous usage events (which mode/style, success/failure) and\ncrash reports — never your prompts, avatar, API keys, or images. Turn it off in\n**Settings → Telemetry**. The **skill** sends no telemetry.\n\n## Credits\n\nNib's house methodology is adapted from **[xiaohei (小黑)](https://github.com/helloianneo/ian-xiaohei-illustrations)**\nby [helloianneo](https://github.com/helloianneo) — the hand-drawn editorial-illustration\nskill that inspired this project. Nib reimplements its approach in its own words and code.\n\n## License\n\nMIT © 2026 Henry ([caezium](https://github.com/caezium)).\n",
  "bytes": 8126,
  "sha": "f79f74fab1a4269bd7fb6585718e0d2c8a51cdf83294c0e3a62248a74cf18b52",
  "repo_slug": "caezium/nib",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/plg_caezium_nib_48beb396/readme"
}