asciify-engine 4.19.0 → 4.20.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "asciify-engine",
3
- "version": "4.19.0",
3
+ "version": "4.20.0",
4
4
  "description": "Framework-agnostic ASCII art engine. Convert images, videos, and GIFs into ASCII art rendered on canvas, or run full-bleed GPU character fields with a fluid cursor wake.",
5
5
  "type": "module",
6
6
  "main": "./dist/index.cjs",
@@ -2,13 +2,13 @@
2
2
  name: asciify-engine
3
3
  description: Apply Asciify the way asciify.org does - ASCII components and backgrounds that belong in a real interface, inked from the theme, clear around text, inside the page's radii and motion. Use for UI components in characters (loading, status, toasts, tabs, AI states, charts, transitions, pages), animated ASCII backgrounds, and also photo, video and GIF conversion, GPU character fields, artwork looks for wallpapers, posters and prints, art styles and export, hover and motion, layered typography and rendering performance.
4
4
  metadata:
5
- tested-engine: "4.19.0"
5
+ tested-engine: "4.20.0"
6
6
  updated: "2026-10-17"
7
7
  ---
8
8
 
9
9
  # Asciify Engine
10
10
 
11
- Use the published `asciify-engine` npm package. Tested against **4.19.0**. Check the application's installed version and its public types before using newer options; a local checkout can contain unpublished changes.
11
+ Use the published `asciify-engine` npm package. Tested against **4.20.0**. Check the application's installed version and its public types before using newer options; a local checkout can contain unpublished changes.
12
12
 
13
13
  - Agent entry: https://asciify.org/skill (redirects to this Markdown document).
14
14
  - Components: https://asciify.org/components · Looks: https://asciify.org/looks · Backgrounds: https://asciify.org/backgrounds
@@ -36,7 +36,7 @@ Most requests are a feeling ("make the loading state feel alive", "a calm backgr
36
36
  | The user wants | Use |
37
37
  | --- | --- |
38
38
  | A UI component in characters: button loading, status, toasts, tabs, pills, odometer, chart, AI thinking and streaming, transitions, sign-in, pricing, 404 | `asciify-engine/kit` ([applying-asciify.md](references/applying-asciify.md), [components.md](references/components.md), [kit.md](references/kit.md)) |
39
- | A background behind a hero, pricing, docs or a section, light or dark | Kit `fieldBackground(el, { preset: 'hero', clear })` (asciify.org's hero) or `background(el, { preset, clear })` with one of the 13 curated presets below |
39
+ | A background behind a hero, pricing, docs or a section, light or dark | Kit `fieldBackground(el, { preset: 'hero', clear })` (asciify.org's hero) or `background(el, { preset, clear })` with one of the 12 curated presets below |
40
40
  | Their word or brand in characters | Kit `wordmark`, or `background()` with `wordField` |
41
41
  | Their video in characters on the page | Kit `asciiVideo` |
42
42
  | Their photo, video or GIF converted, optionally answering the cursor | Advanced: `asciify` / `asciifyVideo` / `asciifyGif`, plus `mountHover` from `/hover` |
@@ -57,7 +57,7 @@ const b = beam(card, { palette: 'mono', mode: 'pulse' });
57
57
  // On unmount: b.destroy();
58
58
  ```
59
59
 
60
- `background()`, its presets, `lazy`, `poster`, `setFieldBudget` and `setGlobalLook` are new in 4.14.0; `halo`, `ripple`, `mesh`, `interference`, `constellation`, `cascade`, the GPU `caustics`, `contour` and `aurora`, and the `mark` option are new in 4.19.0. Check that the installed `asciify-engine/kit` exports them; if not, upgrade ([upgrading.md](references/upgrading.md)).
60
+ `background()`, its presets, `lazy`, `poster`, `setFieldBudget` and `setGlobalLook` are new in 4.14.0; `halo`, `ripple`, `mesh`, `interference`, `constellation`, `cascade`, the GPU `caustics` and `contour`, and the `mark` option are new in 4.19.0. Check that the installed `asciify-engine/kit` exports them; if not, upgrade ([upgrading.md](references/upgrading.md)).
61
61
 
62
62
  ## Backgrounds
63
63
 
@@ -68,9 +68,9 @@ import { background, swell } from 'asciify-engine/kit';
68
68
  const bg = background(pricing, { preset: swell, clear: pricingCopy });
69
69
  ```
70
70
 
71
- The 13 curated presets, as export → `id` (name), all on the GPU glyph field (WebGL2, sharing the context budget): `swell` (Swell, dots or characters), `drift` (Drift), `halo` (Halo), `caustics` (Caustics), `contour` (Contour), `aurora` (Aurora), `ripple` (Ripple), `mesh` (Mesh), `interference` (Interference), `constellation` (Constellation), `cascade` (Cascade), `wordField` → `field` (Field), `fluid` (Fluid).
71
+ The 12 curated presets, as export → `id` (name), all on the GPU glyph field (WebGL2, sharing the context budget): `swell` (Swell, dots or characters), `drift` (Drift), `halo` (Halo), `caustics` (Caustics), `contour` (Contour), `ripple` (Ripple), `mesh` (Mesh), `interference` (Interference), `constellation` (Constellation), `cascade` (Cascade), `wordField` → `field` (Field), `fluid` (Fluid).
72
72
 
73
- The retired presets (`halftone`, `dna`, `circuit`, `fire`, `grid`, `morph`, `noise`, `pulse`, `rain`, `silk`, `stars`, `terrain`, `veil`, `voidWell`, `wave`, `weave`, `dune`, `etch`, `facet`, `moire`) are still exported and marked `@deprecated` so old code runs; do not reach for them in new work. [kit.md](references/kit.md#backgrounds) maps each to its replacement. `fieldBackground` is separate: its `hero`, `brand` and `notFound` presets are the asciify.org hero ground, the same ground in the brand colour, and the 404.
73
+ The retired presets (`aurora`, `halftone`, `dna`, `circuit`, `fire`, `grid`, `morph`, `noise`, `pulse`, `rain`, `silk`, `stars`, `terrain`, `veil`, `voidWell`, `wave`, `weave`, `dune`, `etch`, `facet`, `moire`) are still exported and marked `@deprecated` so old code runs; do not reach for them in new work. [kit.md](references/kit.md#backgrounds) maps each to its replacement. `fieldBackground` is separate: its `hero`, `brand` and `notFound` presets are the asciify.org hero ground, the same ground in the brand colour, and the 404.
74
74
 
75
75
  Templates already downloaded from asciify.org/backgrounds (`asciiBackground` from a local `./wave.js`) keep working in apps that ship them, but the site no longer offers them; move those apps to `background()` with the closest preset (kit.md maps each).
76
76
 
@@ -187,7 +187,7 @@ publishButton.addEventListener('click', async () => {
187
187
 
188
188
  ## 9. Backgrounds
189
189
 
190
- `background(element, { preset })` draws any of the 13 curated presets from asciify.org/backgrounds under the element's content. Choose by surface:
190
+ `background(element, { preset })` draws any of the 12 curated presets from asciify.org/backgrounds under the element's content. Choose by surface:
191
191
 
192
192
  | Surface | Presets | Notes |
193
193
  | --- | --- | --- |
@@ -195,7 +195,7 @@ publishButton.addEventListener('click', async () => {
195
195
  | A brand or name moment | `wordField` (id `field`), `fieldBackground` `brand` | Your word in the field; keep copy off its centre. |
196
196
  | Art-first hero with little copy | `fluid`, `mesh` | `fluid` is the original Asciify hero, 7px cells at 0.7 opacity; `mesh` is a soft gradient in characters. Not behind reading text. |
197
197
  | Quiet texture: section bands, footers, empty states, side panels | `caustics`, `contour`, `interference`, `constellation` | Fine lines, slow. Safe behind text with `clear`. |
198
- | An ambient or interactive moment | `aurora`, `ripple`, `cascade` | `aurora` sits above the copy; `ripple` drops rings where the pointer moves; `cascade` falls in three depths. Keep them away from forms and body copy. |
198
+ | An ambient or interactive moment | `ripple`, `cascade` | `ripple` drops rings where the pointer moves; `cascade` falls in three depths. Keep them away from forms and body copy. |
199
199
 
200
200
  Keep them calm:
201
201
 
@@ -487,11 +487,11 @@ Prompt:
487
487
  ```ts
488
488
  import { background, swell } from 'asciify-engine/kit';
489
489
 
490
- // One of 13 presets. Import only the one you use; bg.setPreset(other) cross-fades to another.
490
+ // One of 12 presets. Import only the one you use; bg.setPreset(other) cross-fades to another.
491
491
  const bg = background(heroSection, { preset: swell, clear: heroText });
492
492
  ```
493
493
 
494
- Any preset from [the kit reference](kit.md#backgrounds) fits the same call: `swell`, `drift`, `halo`, `caustics`, `contour`, `aurora`, `ripple`, `mesh`, `interference`, `constellation`, `cascade`, `wordField` and `fluid`, all on the GPU glyph field. `cursor: false` turns the pointer response off; `swell` takes `mark: 'glyph'` or a `charset` for characters instead of dots. For asciify.org's own hero ground, with the frosted veil and `pulse()`, use `fieldBackground(heroSection, { preset: 'hero', clear: heroText })`.
494
+ Any preset from [the kit reference](kit.md#backgrounds) fits the same call: `swell`, `drift`, `halo`, `caustics`, `contour`, `ripple`, `mesh`, `interference`, `constellation`, `cascade`, `wordField` and `fluid`, all on the GPU glyph field. `cursor: false` turns the pointer response off; `swell` takes `mark: 'glyph'` or a `charset` for characters instead of dots. For asciify.org's own hero ground, with the frosted veil and `pulse()`, use `fieldBackground(heroSection, { preset: 'hero', clear: heroText })`.
495
495
 
496
496
  ## Advanced: raw field
497
497
 
@@ -42,7 +42,7 @@ For an interface component or a background, use `asciify-engine/kit` and follow
42
42
  | A calm background for a product page, docs, pricing or SaaS hero, in light or dark | Kit `background(el, { preset: swell, clear })` or `fieldBackground(el, { preset: 'hero', clear })` | Graphite ink, clear zone plus veil. See [applying-asciify.md](applying-asciify.md#9-backgrounds). Raw `mountGlyphField` with `mark: 'dot'` only for a look the kit lacks ([glyph-field.md](glyph-field.md#halftone-for-interfaces-412)). |
43
43
  | Art styles (halftone, dither, braille, print, mosaic, LED…), saved looks, backdrops, masks, effects, PNG/MP4/GIF export | `mountStudio` from `/studio` | Studio owns motion, hover and finish. Start from `studioLook(id)` when one of the 12 looks matches the mood. |
44
44
  | Several media and text layers in one artwork | `mountStudioProject` from `/studio` | One loop and budget for up to eight layers. See [layered-projects.md](layered-projects.md). |
45
- | An ambient animated background with no media (rain, stars, waves, aurora…) | Kit `background(el, { preset })` with one of the 26 presets | Import presets by name from `asciify-engine/kit`. See [applying-asciify.md](applying-asciify.md#9-backgrounds) for which suits which surface. |
45
+ | An ambient animated background with no media (rain, stars, waves, aurora…) | Kit `background(el, { preset })` with one of the 12 curated presets | Import presets by name from `asciify-engine/kit`. See [applying-asciify.md](applying-asciify.md#9-backgrounds) for which suits which surface. |
46
46
  | A text banner or lettering | `asciifyText` / `renderTextToCanvas` | Plain text output works anywhere; canvas for color. |
47
47
  | Headline text visible through the art | Layered HTML, see [layered-hero.md](layered-hero.md) | Real text stays in the DOM. |
48
48
 
@@ -502,10 +502,9 @@ Options: `preset` (required), `palette` (one ink or `{ light, dark }`, winning o
502
502
  | --- | --- | --- |
503
503
  | `swell` | A fine grid swelling in slow rolling waves, quiet in the middle; dots by default, or characters | 10, 1, lantern |
504
504
  | `drift` | Characters drifting slowly in broad soft lobes, clear round your content | 11, 1, trail |
505
- | `halo` | A corona breathing slowly round the middle, its rays turning; the centre stays empty for a headline | 11, 1, lantern |
506
- | `caustics` | Light focused by moving water: fine bright lines that fold, part and meet | 11, 1, lantern |
505
+ | `halo` | A corona breathing slowly round the middle, shaped to the stage (wide on desktop, tall on a phone); the centre stays empty for a headline | 11, 1, lantern |
506
+ | `caustics` | Light through moving water: soft filaments that interlace and lift a little where they cross | 11, 1, lantern |
507
507
  | `contour` | Survey lines over a slowly shifting terrain, one character wide, every fifth an index line | 11, 1, lantern |
508
- | `aurora` | Curtains of light folding across the top, sharp along their hems | 11, 1, lantern |
509
508
  | `ripple` | Still water: drops ring outward here and there; the pointer drops its own (`field.pulse`) | 11, 1, drops |
510
509
  | `mesh` | Four soft lights on slow paths, a gradient mesh across the whole ramp | 11, 1, trail |
511
510
  | `interference` | Two ring grids from orbiting centres; moiré bands open and close where they cross | 11, 1, lantern |
@@ -514,6 +513,6 @@ Options: `preset` (required), `palette` (one ink or `{ light, dark }`, winning o
514
513
  | `wordField` | Your word (`text`) as a flowing field of letters | 13, 1, trail |
515
514
  | `fluid` | The original Asciify hero: flowing folds with a wake behind the cursor | 7, 1, wake |
516
515
 
517
- Retired presets are still exported, marked `@deprecated`, so code that imports them keeps running unchanged; they are no longer shown on the site or in these docs. Move to the closest current one: `halftone` → `drift` with `mark: 'dot'` (`cellSize: 14`), `dna` and `voidWell` → `halo`, `circuit` and `stars` → `constellation`, `fire`, `silk` and `veil` → `aurora`, `grid`, `weave` and `moire` → `interference`, `morph` and `noise` → `mesh`, `pulse` → `ripple`, `rain` → `cascade`, `terrain`, `dune` and `etch` → `contour`, `facet` → `caustics`, `wave` → `swell`. The retired canvas presets draw on a 2D canvas and also take `accent` and `dither`.
516
+ Retired presets are still exported, marked `@deprecated`, so code that imports them keeps running unchanged; they are no longer shown on the site or in these docs. Move to the closest current one: `halftone` → `drift` with `mark: 'dot'` (`cellSize: 14`), `dna` and `voidWell` → `halo`, `circuit` and `stars` → `constellation`, `aurora`, `fire`, `silk` and `veil` → `mesh`, `grid`, `weave` and `moire` → `interference`, `morph` and `noise` → `mesh`, `pulse` → `ripple`, `rain` → `cascade`, `terrain`, `dune` and `etch` → `contour`, `facet` → `caustics`, `wave` → `swell`. The retired canvas presets draw on a 2D canvas and also take `accent` and `dither`.
518
517
 
519
518
  Your own preset is an object with `id`, `name`, `description`, `cellSize`, `speed`, `cursor` and `mount(context)`; `mountCanvas(context, draw)` runs a 2D template with the same clock and pointer as the built-ins.
@@ -4,7 +4,7 @@ Finished artwork looks for a person's own photo, video or GIF: wallpapers, poste
4
4
 
5
5
  These are artworks, not interface components. For a loading state, a background behind text or another UI piece, use [components.md](components.md) and the kit instead.
6
6
 
7
- Twelve looks are the engine's curated presets: apply them with `studioLook(id)` and enumerate `STUDIO_LOOKS` rather than copying their values. The others are written out in full settings: render styles the presets do not cover, Composed looks that use the backdrop (blur, the photo itself, gradients, transparency) and masks, and Finished looks that turn on the optical finish (vignette, grain, bloom, scanlines, fringe, blur). All of them use the `asciify-engine/studio` entry ([studio-workspace.md](studio-workspace.md), [print-styles.md](print-styles.md)); nothing is uploaded, and the person's media stays in the browser.
7
+ Twelve looks are the engine's curated presets: apply them with `studioLook(id)` and enumerate `STUDIO_LOOKS` rather than copying their values. The others are written out in full settings: render styles the presets do not cover, Composed looks that use the backdrop (blur, the photo itself, gradients, transparency) and masks, and Finished looks that turn on the optical finish (vignette, grain, bloom, scanlines, fringe, blur), and Projects looks built for a job, which also fix the frame's `aspectRatio` (a square cover, a 3:4 poster, a 16:9 hero, a 9:16 lock screen) and name the export size. All of them use the `asciify-engine/studio` entry ([studio-workspace.md](studio-workspace.md), [print-styles.md](print-styles.md)); nothing is uploaded, and the person's media stays in the browser.
8
8
 
9
9
  ## Reproduce a look
10
10
 
@@ -61,12 +61,344 @@ Common sizes: desktop 3840×2160 (`referenceWidth: 960`), phone 1290×2796 (`430
61
61
  - The person names a look, or describes one ("newsprint", "riso", "phosphor", "Lego", "engraving", "film still"): use the entry, then adjust only what they asked for.
62
62
  - Dark, contrasty sources (a subject on black, night scenes) suit character looks and source-color tiles. Bright, high-key sources (white architecture, paper, daylight) suit the paper-ground looks: Newsprint, Two inks, Banknote, Four-color press, Riso duotone, Woodcut, Overprint.
63
63
  - Subjects with strong local color (fruit, fish, birds, a painting) suit source-color looks: Mosaic study, Brickwork, Pixel, Honeycomb, Pointillist, ANSI blocks, Jewel box.
64
+ - The person names a job (album cover, magazine portrait, product hero, poster, postcard, lookbook, game box art, sticker, lock screen): use its Projects entry; it sets the frame and the export size.
64
65
  - The artwork goes over something else (video, a gradient, a brand color, a product page): use a transparent look (Cutout, Halo overlay) and export PNG, which keeps the alpha.
65
66
  - The person wants the photo itself to stay present: Frosted glass and Bokeh draw over its blur, Overprint over the sharp original.
66
67
  - The person asks for a grade, film, broadcast or vintage feel: use a Finished look. Finish effects need WebGL; check `art.capabilities.gpuFinish` and say so when it is unavailable.
67
68
  - Keep artwork with motion off for video sources unless asked; the footage already moves.
68
69
  - Say in one line which look you chose and offer one alternative from this file.
69
70
 
71
+ ## album: Album cover
72
+ Category: Projects
73
+ Use it for: a performer or portrait lit by colored light, as a square record or single cover; streaming artwork and gig visuals.
74
+ Settings: dots, 5px cells, square 1:1, source color at saturation 1.35 on `#060608`, character glow .35, vignette .3, grain .12. Export 3000×3000.
75
+
76
+ Prompt:
77
+ “Make [my photo] into a square album cover with asciify-engine: halftone dots in the photo's own colored light on black, a soft glow, a vignette and fine grain. Export a 3000×3000 PNG for the streaming stores.”
78
+
79
+ ```ts
80
+ import { mountStudio } from 'asciify-engine/studio';
81
+
82
+ const art = await mountStudio(canvas, '/your-photo.jpg', {
83
+ settings: {
84
+ aspectRatio: '1:1', style: 'dots', cellSize: 5, colorMode: 'source',
85
+ backdrop: { mode: 'solid', color: '#060608' },
86
+ color: { saturation: 1.35, brightness: .1, contrast: 1.1 },
87
+ effects: { characterBloom: .35, vignette: .3, grain: .12 },
88
+ },
89
+ width: frame.clientWidth, height: frame.clientHeight, maxCells: 65536,
90
+ });
91
+ // Export with the same settings ("Export a wallpaper, poster or loop" above): { format: 'png', width: 3000, height: 3000, referenceWidth: 720, maxCells: 262144 }
92
+ // A fixed aspectRatio letterboxes the artwork inside the canvas; size the frame to match.
93
+ ```
94
+
95
+ ## editorial: Editorial
96
+ Category: Projects
97
+ Use it for: a magazine-style portrait engraved in fine ink on warm paper, in a 3:4 cover frame; features, interviews, about pages and print.
98
+ Settings: engraving, 4px cells, 3:4, `#1b1a18` on `#f2eee6`, `print.invert: true`, angle −40, weight 1.15, contrast 1.4, midtones .85. Export 2400×3200.
99
+
100
+ Prompt:
101
+ “Engrave [my portrait] as an editorial cover with asciify-engine: fine parallel cuts in near-black ink on warm paper, in a 3:4 frame with room above the head for a masthead. Export a 2400×3200 PNG.”
102
+
103
+ ```ts
104
+ import { mountStudio } from 'asciify-engine/studio';
105
+
106
+ const art = await mountStudio(canvas, '/your-photo.jpg', {
107
+ settings: {
108
+ aspectRatio: '3:4', style: 'engraving', cellSize: 4, ink: '#1b1a18',
109
+ backdrop: { mode: 'solid', color: '#f2eee6' },
110
+ print: { invert: true, angle: -40, weight: 1.15 },
111
+ color: { contrast: 1.4, gamma: .85 },
112
+ },
113
+ width: frame.clientWidth, height: frame.clientHeight, maxCells: 131072,
114
+ });
115
+ // Export with the same settings ("Export a wallpaper, poster or loop" above): { format: 'png', width: 2400, height: 3200, referenceWidth: 600, maxCells: 262144 }
116
+ // A fixed aspectRatio letterboxes the artwork inside the canvas; size the frame to match.
117
+ ```
118
+
119
+ ## product: Studio product
120
+ Category: Projects
121
+ Use it for: a product on a plain backdrop, painted in small strokes of its own colors over a soft studio gradient; product heroes, launch pages and packaging shots.
122
+ Settings: pointillism, 3px cells, source color at saturation 1.35, `print.invert: true` so the product carries the strokes, density 1.3, over a gradient from `#f4f1ec` to `#dcd5ca`. Export 3200×2400.
123
+
124
+ Prompt:
125
+ “Redraw [my product photo] for a product hero with asciify-engine: small pigment strokes in the product's own colors, gathered where it is darkest and richest, over a soft warm-grey studio gradient. Export a 3200×2400 PNG and keep it live on [the product page].”
126
+
127
+ ```ts
128
+ import { mountStudio } from 'asciify-engine/studio';
129
+
130
+ const art = await mountStudio(canvas, '/your-photo.jpg', {
131
+ settings: {
132
+ style: 'pointillism', cellSize: 3, colorMode: 'source',
133
+ backdrop: { mode: 'gradient', color: '#f4f1ec', color2: '#dcd5ca' },
134
+ print: { invert: true, density: 1.3, weight: 1.2 },
135
+ color: { saturation: 1.35, contrast: 1.25 },
136
+ },
137
+ width: frame.clientWidth, height: frame.clientHeight, maxCells: 65536,
138
+ });
139
+ // Export with the same settings ("Export a wallpaper, poster or loop" above): { format: 'png', width: 3200, height: 2400, referenceWidth: 960, maxCells: 262144 }
140
+ ```
141
+
142
+ ## concrete: Concrete poster
143
+ Category: Projects
144
+ Use it for: architecture with a strong repeating structure, cut as cream engraving into a terracotta poster; exhibition, property and city posters.
145
+ Settings: engraving, 4px cells, 3:4, cream `#f3e9d8` on terracotta `#a8432a`, angle 0, weight 1.2, contrast 1.6, midtones .8. Export 2400×3200.
146
+
147
+ Prompt:
148
+ “Make [my architecture photo] a poster with asciify-engine: level cream engraving cuts on a terracotta ground, in a 3:4 frame. Export a 2400×3200 PNG and let me swap the ground for [our color].”
149
+
150
+ ```ts
151
+ import { mountStudio } from 'asciify-engine/studio';
152
+
153
+ const art = await mountStudio(canvas, '/your-photo.jpg', {
154
+ settings: {
155
+ aspectRatio: '3:4', style: 'engraving', cellSize: 4, ink: '#f3e9d8',
156
+ backdrop: { mode: 'solid', color: '#a8432a' },
157
+ print: { angle: 0, weight: 1.2 },
158
+ color: { contrast: 1.6, gamma: .8 },
159
+ },
160
+ width: frame.clientWidth, height: frame.clientHeight, maxCells: 131072,
161
+ });
162
+ // Export with the same settings ("Export a wallpaper, poster or loop" above): { format: 'png', width: 2400, height: 3200, referenceWidth: 600, maxCells: 262144 }
163
+ // A fixed aspectRatio letterboxes the artwork inside the canvas; size the frame to match.
164
+ ```
165
+
166
+ ## postcard: Postcard
167
+ Category: Projects
168
+ Use it for: sunny travel photos as a vintage travel poster in five flat inks; postcards, travel guides, tourism and summer campaigns.
169
+ Settings: dither, Atkinson at scale 3, five-ink palette navy `#16324f`, teal `#2f7f86`, mustard `#e9b44c`, coral `#e76f51`, cream `#f4ead5`. Export 2400×1800.
170
+
171
+ Prompt:
172
+ “Print [my travel photo] as a vintage travel postcard with asciify-engine: Atkinson dither in five flat inks (navy, teal, mustard, coral and cream). Export a 2400×1800 PNG.”
173
+
174
+ ```ts
175
+ import { mountStudio } from 'asciify-engine/studio';
176
+
177
+ const art = await mountStudio(canvas, '/your-photo.jpg', {
178
+ settings: {
179
+ style: 'dither', cellSize: 6, ink: '#16324f',
180
+ backdrop: { mode: 'solid', color: '#f4ead5' },
181
+ color: { saturation: 1.2, contrast: 1.1 },
182
+ dither: { algorithm: 'atkinson', palette: 'custom', colors: ['#16324f', '#2f7f86', '#e9b44c', '#e76f51', '#f4ead5'], scale: 3 },
183
+ },
184
+ width: frame.clientWidth, height: frame.clientHeight, maxCells: 131072,
185
+ });
186
+ // Export with the same settings ("Export a wallpaper, poster or loop" above): { format: 'png', width: 2400, height: 1800, referenceWidth: 960, maxCells: 262144 }
187
+ ```
188
+
189
+ ## botanical: Botanical plate
190
+ Category: Projects
191
+ Use it for: a single flower, leaf or specimen on a plain ground as a hand-colored botanical plate; prints, packaging, wellness and garden brands.
192
+ Settings: crosshatch, 4px cells, 3:4, source color at saturation 1.3 on paper `#f3efe4`, `print.invert: true`. Export 2480×3307.
193
+
194
+ Prompt:
195
+ “Draw [my flower photo] as a botanical plate with asciify-engine: crossing pen lines in the flower's own colors on warm paper, in a 3:4 frame. Export a 2480×3307 PNG to print.”
196
+
197
+ ```ts
198
+ import { mountStudio } from 'asciify-engine/studio';
199
+
200
+ const art = await mountStudio(canvas, '/your-photo.jpg', {
201
+ settings: {
202
+ aspectRatio: '3:4', style: 'crosshatch', cellSize: 4, colorMode: 'source',
203
+ backdrop: { mode: 'solid', color: '#f3efe4' },
204
+ print: { invert: true },
205
+ color: { saturation: 1.3, contrast: 1.15 },
206
+ },
207
+ width: frame.clientWidth, height: frame.clientHeight, maxCells: 131072,
208
+ });
209
+ // Export with the same settings ("Export a wallpaper, poster or loop" above): { format: 'png', width: 2480, height: 3307, referenceWidth: 620, maxCells: 262144 }
210
+ // A fixed aspectRatio letterboxes the artwork inside the canvas; size the frame to match.
211
+ ```
212
+
213
+ ## stadium: Stadium
214
+ Category: Projects
215
+ Use it for: athletes and action against open sky as a bold two-ink halftone poster; sports, events, fitness and match-day graphics.
216
+ Settings: dither, halftone at scale 3, 3:4, red `#d7322a` and black `#151413` on cream `#f2ebdd`, contrast 1.3, brightness .2 so open sky stays paper. Export 2400×3200.
217
+
218
+ Prompt:
219
+ “Make [my sports photo] a match-day poster with asciify-engine: a bold halftone in red and black on cream, in a 3:4 frame. Export a 2400×3200 PNG.”
220
+
221
+ ```ts
222
+ import { mountStudio } from 'asciify-engine/studio';
223
+
224
+ const art = await mountStudio(canvas, '/your-photo.jpg', {
225
+ settings: {
226
+ aspectRatio: '3:4', style: 'dither', cellSize: 6, ink: '#151413',
227
+ backdrop: { mode: 'solid', color: '#f2ebdd' },
228
+ color: { contrast: 1.3, brightness: .2 },
229
+ dither: { algorithm: 'halftone', palette: 'custom', colors: ['#f2ebdd', '#d7322a', '#151413'], scale: 3 },
230
+ },
231
+ width: frame.clientWidth, height: frame.clientHeight, maxCells: 131072,
232
+ });
233
+ // Export with the same settings ("Export a wallpaper, poster or loop" above): { format: 'png', width: 2400, height: 3200, referenceWidth: 600, maxCells: 262144 }
234
+ // A fixed aspectRatio letterboxes the artwork inside the canvas; size the frame to match.
235
+ ```
236
+
237
+ ## lookbook: Lookbook
238
+ Category: Projects
239
+ Use it for: full-length fashion and product shots on a pale studio ground, stippled in the garment colors; lookbooks, shop pages and campaign posters.
240
+ Settings: stipple, 3px cells, 3:4, source color at saturation 1.5, `print.invert: true`, density 1.4, weight 1.3, on off-white `#efebe4`; the pale set stays bare paper and the garment carries the dots. Export 2400×3200.
241
+
242
+ Prompt:
243
+ “Set [my fashion photo] as a lookbook page with asciify-engine: fine stipple in the garment's own colors on an off-white ground, the pale set left as bare paper, in a 3:4 frame. Export a 2400×3200 PNG.”
244
+
245
+ ```ts
246
+ import { mountStudio } from 'asciify-engine/studio';
247
+
248
+ const art = await mountStudio(canvas, '/your-photo.jpg', {
249
+ settings: {
250
+ aspectRatio: '3:4', style: 'stipple', cellSize: 3, colorMode: 'source',
251
+ backdrop: { mode: 'solid', color: '#efebe4' },
252
+ print: { invert: true, density: 1.4, weight: 1.3 },
253
+ color: { saturation: 1.5, contrast: 1.3 },
254
+ },
255
+ width: frame.clientWidth, height: frame.clientHeight, maxCells: 65536,
256
+ });
257
+ // Export with the same settings ("Export a wallpaper, poster or loop" above): { format: 'png', width: 2400, height: 3200, referenceWidth: 600, maxCells: 262144 }
258
+ // A fixed aspectRatio letterboxes the artwork inside the canvas; size the frame to match.
259
+ ```
260
+
261
+ ## nightcity: Night city
262
+ Category: Projects
263
+ Use it for: neon streets, rain and city lights as a glowing 16:9 cyberpunk frame; game, music, tech and event heroes.
264
+ Settings: dots, 4px cells, 16:9, source color at saturation 1.5, brightness .25, character glow .45, RGB split .15, scanlines .12, vignette .3. Export 3840×2160.
265
+
266
+ Prompt:
267
+ “Make [my night street photo] a cyberpunk frame with asciify-engine: halftone dots in the neon's own colors with a strong glow, a slight RGB split, faint scanlines and a vignette, in 16:9. Show it live in [the hero] and export a 3840×2160 PNG.”
268
+
269
+ ```ts
270
+ import { mountStudio } from 'asciify-engine/studio';
271
+
272
+ const art = await mountStudio(canvas, '/your-photo.jpg', {
273
+ settings: {
274
+ aspectRatio: '16:9', style: 'dots', cellSize: 4, colorMode: 'source',
275
+ backdrop: { mode: 'solid', color: '#05050a' },
276
+ color: { saturation: 1.5, brightness: .25, gamma: 1.3 },
277
+ effects: { characterBloom: .45, rgbSplit: .15, scanlines: .12, vignette: .3 },
278
+ },
279
+ width: frame.clientWidth, height: frame.clientHeight, maxCells: 65536,
280
+ });
281
+ // Export with the same settings ("Export a wallpaper, poster or loop" above): { format: 'png', width: 3840, height: 2160, referenceWidth: 960, maxCells: 262144 }
282
+ // A fixed aspectRatio letterboxes the artwork inside the canvas; size the frame to match.
283
+ ```
284
+
285
+ ## sumi: Sumi ink
286
+ Category: Projects
287
+ Use it for: quiet, misty subjects with lots of empty space as an ink-wash study; tea, wellness, calm brands and minimal print.
288
+ Settings: stipple, 4px cells, sumi `#161513` on washi `#efe8da`, `print.invert: true`, density 1.3, weight 1.3, contrast 1.6. Export 3000×2250.
289
+
290
+ Prompt:
291
+ “Paint [my photo] as a sumi ink study with asciify-engine: fine ink dots on warm washi paper that gather only in the darks, leaving the mist as bare paper. Export a 3000×2250 PNG.”
292
+
293
+ ```ts
294
+ import { mountStudio } from 'asciify-engine/studio';
295
+
296
+ const art = await mountStudio(canvas, '/your-photo.jpg', {
297
+ settings: {
298
+ style: 'stipple', cellSize: 4, ink: '#161513',
299
+ backdrop: { mode: 'solid', color: '#efe8da' },
300
+ print: { invert: true, density: 1.3, weight: 1.3 },
301
+ color: { contrast: 1.6 },
302
+ },
303
+ width: frame.clientWidth, height: frame.clientHeight, maxCells: 131072,
304
+ });
305
+ // Export with the same settings ("Export a wallpaper, poster or loop" above): { format: 'png', width: 3000, height: 2250, referenceWidth: 960, maxCells: 262144 }
306
+ ```
307
+
308
+ ## wirephoto: Wire photo
309
+ Category: Projects
310
+ Use it for: news-like and historic moments as a grainy wire-service halftone on newsprint; anniversaries, timelines, editorial and documentary pages.
311
+ Settings: dither, halftone at scale 2, `#1c1b18` on newsprint `#e9e3d6`, contrast 1.35, brightness −.08, grain .3, vignette .2. Export 2400×1800.
312
+
313
+ Prompt:
314
+ “Print [my photo] like a wire photo in an old newspaper with asciify-engine: a coarse black halftone on yellowed newsprint with grain and a soft vignette. Export a 2400×1800 PNG.”
315
+
316
+ ```ts
317
+ import { mountStudio } from 'asciify-engine/studio';
318
+
319
+ const art = await mountStudio(canvas, '/your-photo.jpg', {
320
+ settings: {
321
+ style: 'dither', cellSize: 6, ink: '#1c1b18',
322
+ backdrop: { mode: 'solid', color: '#e9e3d6' },
323
+ color: { contrast: 1.35, brightness: -.08 },
324
+ dither: { algorithm: 'halftone', palette: 'custom', colors: ['#e9e3d6', '#1c1b18'], scale: 2 },
325
+ effects: { grain: .3, vignette: .2 },
326
+ },
327
+ width: frame.clientWidth, height: frame.clientHeight, maxCells: 131072,
328
+ });
329
+ // Export with the same settings ("Export a wallpaper, poster or loop" above): { format: 'png', width: 2400, height: 1800, referenceWidth: 960, maxCells: 262144 }
330
+ ```
331
+
332
+ ## gamebox: Game box
333
+ Category: Projects
334
+ Use it for: fantasy and adventure scenes as 16-color box art from an old cartridge; indie game pages, streams and merch.
335
+ Settings: dither, Bayer 4×4 at scale 3, PICO-8 palette, saturation 1.2. Export 1200×900.
336
+
337
+ Prompt:
338
+ “Make [my fantasy illustration or photo] into retro game box art with asciify-engine: a Bayer 4×4 dither in the 16-color PICO-8 palette with chunky pixels. Export a 1200×900 PNG with crisp, unsmoothed pixels.”
339
+
340
+ ```ts
341
+ import { mountStudio } from 'asciify-engine/studio';
342
+
343
+ const art = await mountStudio(canvas, '/your-photo.jpg', {
344
+ settings: {
345
+ style: 'dither', cellSize: 6, ink: '#fff1e8',
346
+ backdrop: { mode: 'solid', color: '#000000' },
347
+ color: { saturation: 1.2, contrast: 1.1 },
348
+ dither: { algorithm: 'bayer4', palette: 'pico8', scale: 3 },
349
+ },
350
+ width: frame.clientWidth, height: frame.clientHeight, maxCells: 131072,
351
+ });
352
+ // Export with the same settings ("Export a wallpaper, poster or loop" above): { format: 'png', width: 1200, height: 900, referenceWidth: 960, maxCells: 262144 }
353
+ ```
354
+
355
+ ## sticker: Mascot sticker
356
+ Category: Projects
357
+ Use it for: a character, toy or logo mark on a plain dark ground as a chunky transparent sticker; mascots, app icons, chat stickers and merch.
358
+ Settings: blocks, 5px cells, square 1:1, source color at saturation 1.4, transparent backdrop. Export 2048×2048.
359
+
360
+ Prompt:
361
+ “Turn [my mascot on a dark background] into a sticker with asciify-engine: shaded blocks in its own colors on a transparent ground, square. Export a transparent 2048×2048 PNG.”
362
+
363
+ ```ts
364
+ import { mountStudio } from 'asciify-engine/studio';
365
+
366
+ const art = await mountStudio(canvas, '/your-photo.jpg', {
367
+ settings: {
368
+ aspectRatio: '1:1', style: 'blocks', cellSize: 5, colorMode: 'source',
369
+ backdrop: { mode: 'transparent' },
370
+ color: { saturation: 1.4, contrast: 1.15, brightness: .05 },
371
+ },
372
+ width: frame.clientWidth, height: frame.clientHeight, maxCells: 65536,
373
+ });
374
+ // Export with the same settings ("Export a wallpaper, poster or loop" above): { format: 'png', width: 2048, height: 2048, referenceWidth: 720, maxCells: 262144 }
375
+ // PNG keeps the transparency; JPEG and MP4 fill it with black.
376
+ ```
377
+
378
+ ## lockscreen: Lock screen
379
+ Category: Projects
380
+ Use it for: tall subjects (waterfalls, trees, towers, a standing figure) as a 9:16 phone wallpaper with glowing dots over a deep gradient.
381
+ Settings: dots, 4px cells, 9:16, source color at saturation 1.3 over a gradient from `#04120d` to `#12332a`, character glow .3. Export 1290×2293.
382
+
383
+ Prompt:
384
+ “Make [my photo] a phone lock screen with asciify-engine: dots in the photo's own colors with a soft glow over a deep green gradient, in 9:16 with the subject down the middle. Export a 1290×2293 PNG and a 1080×1920 version.”
385
+
386
+ ```ts
387
+ import { mountStudio } from 'asciify-engine/studio';
388
+
389
+ const art = await mountStudio(canvas, '/your-photo.jpg', {
390
+ settings: {
391
+ aspectRatio: '9:16', style: 'dots', cellSize: 4, colorMode: 'source',
392
+ backdrop: { mode: 'gradient', color: '#04120d', color2: '#12332a' },
393
+ color: { saturation: 1.3, brightness: .1, contrast: 1.1 },
394
+ effects: { characterBloom: .3 },
395
+ },
396
+ width: frame.clientWidth, height: frame.clientHeight, maxCells: 65536,
397
+ });
398
+ // Export with the same settings ("Export a wallpaper, poster or loop" above): { format: 'png', width: 1290, height: 2293, referenceWidth: 430, maxCells: 262144 }
399
+ // A fixed aspectRatio letterboxes the artwork inside the canvas; size the frame to match.
400
+ ```
401
+
70
402
  ## frost: Frosted glass
71
403
  Category: Composed
72
404
  Use it for: sunsets, skylines and silhouettes as white frost characters over a soft, full-color blur of the photo; premium wallpapers and covers.
@@ -114,7 +446,7 @@ const art = await mountStudio(canvas, '/your-photo.jpg', {
114
446
  ## cutout: Cutout
115
447
  Category: Composed
116
448
  Use it for: a subject on a dark or plain background as a sticker with a transparent ground; overlays on any color, product cut-outs, layered heroes.
117
- Settings: mixed type, 4px cells, source color at saturation 1.4, brightness .15, transparent backdrop.
449
+ Settings: mixed type, 5px cells, source color at saturation 1.8, contrast 1.3, a `#7d7368` multiply tint at .45, transparent backdrop; the tint pulls white areas down to mid-tones, so every mark reads on light and dark grounds alike.
118
450
 
119
451
  Prompt:
120
452
  “Cut [my subject on a dark background] out as an ASCII sticker with asciify-engine: fine mixed type in the photo's colors on a transparent ground, so only the subject remains. Place it over [our brand color] in the hero and export a transparent 2160×2160 PNG.”
@@ -124,9 +456,9 @@ import { mountStudio } from 'asciify-engine/studio';
124
456
 
125
457
  const art = await mountStudio(canvas, '/your-photo.jpg', {
126
458
  settings: {
127
- style: 'mixed', cellSize: 4, colorMode: 'source',
459
+ style: 'mixed', cellSize: 5, colorMode: 'source',
128
460
  backdrop: { mode: 'transparent' },
129
- color: { saturation: 1.4, contrast: 1.2, brightness: .15 },
461
+ color: { saturation: 1.8, contrast: 1.3, tint: '#7d7368', amount: .45, blend: 'multiply' },
130
462
  },
131
463
  width: frame.clientWidth, height: frame.clientHeight, maxCells: 65536,
132
464
  });
@@ -239,7 +571,7 @@ const art = await mountStudio(canvas, '/your-photo.jpg', {
239
571
  style: 'engraving', cellSize: 4, ink: '#2a2620',
240
572
  backdrop: { mode: 'solid', color: '#ece6d8' },
241
573
  print: { invert: true, angle: -30, weight: 1.05 },
242
- mask: { enabled: true, shapes: [{ kind: 'ellipse', x: .31, y: .1, width: .38, height: .8 }] },
574
+ mask: { enabled: true, shapes: [{ kind: 'ellipse', x: .32, y: .12, width: .36, height: .76 }] },
243
575
  },
244
576
  width: frame.clientWidth, height: frame.clientHeight, maxCells: 131072,
245
577
  });
@@ -271,20 +603,20 @@ const art = await mountStudio(canvas, '/your-photo.jpg', {
271
603
 
272
604
  ## overprint: Overprint
273
605
  Category: Composed
274
- Use it for: bright, airy photos with dark characters printed straight over the sharp original; travel, editorial and summer campaign artwork.
275
- Settings: ASCII, 5px cells, deep teal `#0f2a33` ink, contrast 1.2, over the source photo at full opacity.
606
+ Use it for: bright photos with hard, graphic shadows, where the shadows fill with type over the sharp original; travel, editorial and summer campaign artwork.
607
+ Settings: ASCII, 6px cells, deep teal `#0b2530` ink, plain levels and a steep inverted tone curve so only the shadows carry type, over the source photo at full opacity.
276
608
 
277
609
  Prompt:
278
- “Overprint [my bright photo] with asciify-engine: keep the photo sharp underneath and print deep teal characters over its light areas, like a type screen inked onto the print. Export a 2160×2700 PNG.”
610
+ “Overprint [my bright photo] with asciify-engine: keep the photo sharp underneath and print deep teal characters only into its shadows, so the lit areas stay clean, like a type screen inked onto the print. Export a 2160×2700 PNG.”
279
611
 
280
612
  ```ts
281
613
  import { mountStudio } from 'asciify-engine/studio';
282
614
 
283
615
  const art = await mountStudio(canvas, '/your-photo.jpg', {
284
616
  settings: {
285
- style: 'ascii', cellSize: 5, ink: '#0f2a33',
617
+ style: 'ascii', cellSize: 6, ink: '#0b2530',
286
618
  backdrop: { mode: 'source', opacity: 1 },
287
- color: { contrast: 1.2 },
619
+ color: { levels: 'none', curves: { rgb: [[0, 1], [.3, 1], [.45, 0], [1, 0]] } },
288
620
  },
289
621
  width: frame.clientWidth, height: frame.clientHeight, maxCells: 65536,
290
622
  });
@@ -316,7 +648,7 @@ const art = await mountStudio(canvas, '/your-photo.jpg', {
316
648
  ## darkroom: Darkroom
317
649
  Category: Finished
318
650
  Use it for: still lifes, portraits and low-key photos as a print glowing out of the dark; book covers, gallery walls and quiet dark heroes.
319
- Settings: ASCII, 5px cells, `#efe6d6` on `#080706`, contrast 1.2, brightness .3, midtones 1.7, vignette .55, bloom .35, grain .12.
651
+ Settings: ASCII, 5px cells, `#efe6d6` on `#080706`, contrast 1.15, brightness .35, midtones 2, vignette .45, bloom .4, grain .12.
320
652
 
321
653
  Prompt:
322
654
  “Print [my photo] like it is coming up in a darkroom with asciify-engine: warm paper-white characters on black, a heavy vignette, a soft glow on the highlights and a little grain. Export a 2480×3508 PNG.”
@@ -328,8 +660,8 @@ const art = await mountStudio(canvas, '/your-photo.jpg', {
328
660
  settings: {
329
661
  style: 'ascii', cellSize: 5, ink: '#efe6d6',
330
662
  backdrop: { mode: 'solid', color: '#080706' },
331
- color: { contrast: 1.2, brightness: .3, gamma: 1.7 },
332
- effects: { vignette: .55, bloom: .35, grain: .12 },
663
+ color: { contrast: 1.15, brightness: .35, gamma: 2 },
664
+ effects: { vignette: .45, bloom: .4, grain: .12 },
333
665
  },
334
666
  width: frame.clientWidth, height: frame.clientHeight, maxCells: 65536,
335
667
  });
@@ -472,10 +804,10 @@ const art = await mountStudio(canvas, '/your-photo.jpg', {
472
804
  ## ascii: Signature ASCII
473
805
  Category: Characters
474
806
  Use it for: the house look; a portrait, sculpture or product as a dark wallpaper, a hero artwork or a cover.
475
- Settings: `studioLook('ascii')`: ASCII, 5px cells, paper-white `#e6e3da` on `#0b0b0a`, contrast 1.12.
807
+ Settings: `studioLook('ascii')`: ASCII, 4px cells, paper-white `#ece9e0` on `#0b0b0a`, contrast 1.25, midtones 1.25, character glow .12.
476
808
 
477
809
  Prompt:
478
- “Turn [my photo] into Signature ASCII artwork with asciify-engine: paper-white characters on near black, fine 5px cells. Show it live on a canvas that fills [the hero], let the cursor leave a soft trail, and add a button that downloads a 3840×2160 PNG wallpaper.”
810
+ “Turn [my photo] into Signature ASCII artwork with asciify-engine: paper-white characters on near black, fine 4px cells with a faint glow. Show it live on a canvas that fills [the hero], let the cursor leave a soft trail, and add a button that downloads a 3840×2160 PNG wallpaper.”
479
811
 
480
812
  ```ts
481
813
  import { mountStudio, studioLook } from 'asciify-engine/studio';
@@ -490,7 +822,7 @@ const art = await mountStudio(canvas, '/your-photo.jpg', {
490
822
  ## night: Night signal
491
823
  Category: Characters
492
824
  Use it for: moodier, filmic portraits and night scenes; album art and dark posters.
493
- Settings: `studioLook('night')`: ASCII, graphite ink `#a9a69d` on `#0b0b0a`, prism .18, scanlines .08, vignette .25.
825
+ Settings: `studioLook('night')`: ASCII, 4px cells, pale graphite `#cdc9be` on `#0b0b0a`, contrast 1.2, midtones 1.2, prism .2, scanlines .08, vignette .3, bloom .12.
494
826
 
495
827
  Prompt:
496
828
  “Make [my photo] a Night signal poster with asciify-engine: graphite characters on near black with a faint prism fringe, scanlines and a vignette. Export a 2160×2700 PNG for an album cover and keep the settings so I can reuse the look.”
@@ -648,7 +980,7 @@ const art = await mountStudio(canvas, '/your-photo.jpg', {
648
980
  ## diagonal: Storm
649
981
  Category: Characters
650
982
  Use it for: rain, wind and streaks of light drawn in slanted strokes; moody posters, weather stories and dark section artwork.
651
- Settings: diagonal style (` /╱╳`), 4px cells, `#dfe7ea` on `#0c1013`, contrast 1.3, midtones 1.3.
983
+ Settings: diagonal style (` /╱╳`), 4px cells, `#eef3f5` on blue-black `#10161b`, contrast 1.25, brightness .15, midtones 1.8.
652
984
 
653
985
  Prompt:
654
986
  “Draw [my photo] in slanted strokes with asciify-engine: diagonal line characters in cool grey on blue-black, like rain across the image. Export a 2160×2700 PNG.”
@@ -658,9 +990,9 @@ import { mountStudio } from 'asciify-engine/studio';
658
990
 
659
991
  const art = await mountStudio(canvas, '/your-photo.jpg', {
660
992
  settings: {
661
- style: 'diagonal', cellSize: 4, ink: '#dfe7ea',
662
- backdrop: { mode: 'solid', color: '#0c1013' },
663
- color: { contrast: 1.3, gamma: 1.3 },
993
+ style: 'diagonal', cellSize: 4, ink: '#eef3f5',
994
+ backdrop: { mode: 'solid', color: '#10161b' },
995
+ color: { contrast: 1.25, brightness: .15, gamma: 1.8 },
664
996
  },
665
997
  width: frame.clientWidth, height: frame.clientHeight, maxCells: 65536,
666
998
  });
@@ -669,7 +1001,7 @@ const art = await mountStudio(canvas, '/your-photo.jpg', {
669
1001
  ## diamond: Jewel box
670
1002
  Category: Characters
671
1003
  Use it for: iridescent, richly colored subjects (feathers, gems, beetles, fabric) set in diamond characters; fashion, beauty and jewelry artwork.
672
- Settings: diamond style (` ·◇◈◆`), 7px cells, source color at saturation 1.5, brightness .35, midtones 1.5 on `#0b0b0a`, character glow .3.
1004
+ Settings: diamond style (` ·◇◈◆`), 5px cells, source color at saturation 1.4, brightness .3, contrast 1.25, midtones 1.6, black point .15 on `#07070a`, character glow .35.
673
1005
 
674
1006
  Prompt:
675
1007
  “Set [my photo] in diamond characters with asciify-engine: diamonds in the photo's jewel colors on black with a soft sparkle, solid where it is bright and outlined where it is dim. Export a 2160×2700 PNG.”
@@ -679,10 +1011,10 @@ import { mountStudio } from 'asciify-engine/studio';
679
1011
 
680
1012
  const art = await mountStudio(canvas, '/your-photo.jpg', {
681
1013
  settings: {
682
- style: 'diamond', cellSize: 7, colorMode: 'source',
683
- backdrop: { mode: 'solid', color: '#0b0b0a' },
684
- color: { saturation: 1.5, brightness: .35, gamma: 1.5 },
685
- effects: { characterBloom: .3 },
1014
+ style: 'diamond', cellSize: 5, colorMode: 'source',
1015
+ backdrop: { mode: 'solid', color: '#07070a' },
1016
+ color: { saturation: 1.4, brightness: .3, contrast: 1.25, gamma: 1.6, blackPoint: .15 },
1017
+ effects: { characterBloom: .35 },
686
1018
  },
687
1019
  width: frame.clientWidth, height: frame.clientHeight, maxCells: 65536,
688
1020
  });