asciify-engine 4.18.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.
@@ -1,10 +1,10 @@
1
1
  # Asciify looks
2
2
 
3
- Finished artwork looks for a person's own photo, video or GIF: wallpapers, posters, album and cover art, hero artwork, prints and social images. Each look has the prompt a person gives you and the exact `/studio` settings that reproduce it. Every look is shown live at https://asciify.org/looks on the site's sample images, and opens in the editor at https://asciify.org/editor with the same settings.
3
+ Finished artwork looks for a person's own photo, video or GIF: wallpapers, posters, album and cover art, hero artwork, prints and social images. Each look has the prompt a person gives you and the exact `/studio` settings that reproduce it. Every look is shown live at https://asciify.org/looks on a source image made for it, and opens in the editor at https://asciify.org/editor with the same settings. Every Studio render style has at least one look.
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 for render styles the presets do not cover. 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
 
@@ -58,19 +58,756 @@ Common sizes: desktop 3840×2160 (`referenceWidth: 960`), phone 1290×2796 (`430
58
58
 
59
59
  ## How to choose
60
60
 
61
- - The person names a look, or describes one ("newsprint", "riso", "phosphor", "Lego", "engraving"): use the entry, then adjust only what they asked for.
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.
63
- - Subjects with strong local color (fruit, fish, birds, a painting) suit source-color looks: Mosaic study, Brickwork, Pixel, Honeycomb, Pointillist.
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
+ - 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
+ - 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.
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.
66
+ - The person wants the photo itself to stay present: Frosted glass and Bokeh draw over its blur, Overprint over the sharp original.
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.
64
68
  - Keep artwork with motion off for video sources unless asked; the footage already moves.
65
69
  - Say in one line which look you chose and offer one alternative from this file.
66
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
+
402
+ ## frost: Frosted glass
403
+ Category: Composed
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.
405
+ Settings: ASCII, 5px cells, ink `#121110` with the tone curve inverted so shadows carry the characters, over the source blurred 24px at full opacity.
406
+
407
+ Prompt:
408
+ “Frost [my photo] like glass with asciify-engine: fine white characters where the photo is bright, over a soft, full-color blur of the same photo, so dark shapes stay clean silhouettes. Export a 3840×2160 PNG wallpaper and a 1290×2796 phone version.”
409
+
410
+ ```ts
411
+ import { mountStudio } from 'asciify-engine/studio';
412
+
413
+ const art = await mountStudio(canvas, '/your-photo.jpg', {
414
+ settings: {
415
+ style: 'ascii', cellSize: 4, ink: '#fff7ef',
416
+ backdrop: { mode: 'blurred', blur: 10, opacity: 1 },
417
+ color: { contrast: 1.2, brightness: .05 },
418
+ },
419
+ width: frame.clientWidth, height: frame.clientHeight, maxCells: 65536,
420
+ });
421
+ // The blur is the untouched photo; color adjustments only change the characters.
422
+ ```
423
+
424
+ ## bokeh: Bokeh
425
+ Category: Composed
426
+ Use it for: flowers, gardens and lights as glowing color dots over their own soft focus; spring campaigns, calm wallpapers, music covers.
427
+ Settings: dots, 6px cells, source color at saturation 1.3, brightness .12, over the source blurred 32px, character glow .25.
428
+
429
+ Prompt:
430
+ “Turn [my photo] into a bokeh artwork with asciify-engine: halftone dots in the photo's own colors, slightly brighter, floating over a deep blur of the same photo with a soft glow. Export a 2160×2700 PNG.”
431
+
432
+ ```ts
433
+ import { mountStudio } from 'asciify-engine/studio';
434
+
435
+ const art = await mountStudio(canvas, '/your-photo.jpg', {
436
+ settings: {
437
+ style: 'dots', cellSize: 6, colorMode: 'source',
438
+ backdrop: { mode: 'blurred', blur: 32, opacity: 1 },
439
+ color: { saturation: 1.3, brightness: .12, contrast: 1.1 },
440
+ effects: { characterBloom: .25 },
441
+ },
442
+ width: frame.clientWidth, height: frame.clientHeight, maxCells: 65536,
443
+ });
444
+ ```
445
+
446
+ ## cutout: Cutout
447
+ Category: Composed
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.
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.
450
+
451
+ Prompt:
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.”
453
+
454
+ ```ts
455
+ import { mountStudio } from 'asciify-engine/studio';
456
+
457
+ const art = await mountStudio(canvas, '/your-photo.jpg', {
458
+ settings: {
459
+ style: 'mixed', cellSize: 5, colorMode: 'source',
460
+ backdrop: { mode: 'transparent' },
461
+ color: { saturation: 1.8, contrast: 1.3, tint: '#7d7368', amount: .45, blend: 'multiply' },
462
+ },
463
+ width: frame.clientWidth, height: frame.clientHeight, maxCells: 65536,
464
+ });
465
+ // Export as PNG to keep the transparency; JPEG and MP4 fill it with black.
466
+ ```
467
+
468
+ ## halo: Halo overlay
469
+ Category: Composed
470
+ Use it for: a glowing white dot artwork with a transparent ground, to lay over video, gradients or brand color; launch heroes and title cards.
471
+ Settings: dots, 5px cells, `#f4f1ea` ink, transparent backdrop, character glow .4.
472
+
473
+ Prompt:
474
+ “Make [my photo] a glowing dot overlay with asciify-engine: white halftone dots with a soft halo on a transparent ground, so it sits over [our hero gradient]. Keep the canvas pointer-events free and export a transparent 3840×2160 PNG.”
475
+
476
+ ```ts
477
+ import { mountStudio } from 'asciify-engine/studio';
478
+
479
+ const art = await mountStudio(canvas, '/your-photo.jpg', {
480
+ settings: {
481
+ style: 'dots', cellSize: 5, ink: '#f4f1ea',
482
+ backdrop: { mode: 'transparent' },
483
+ color: { contrast: 1.2 },
484
+ effects: { characterBloom: .4 },
485
+ },
486
+ width: frame.clientWidth, height: frame.clientHeight, maxCells: 65536,
487
+ });
488
+ // canvas { position: absolute; inset: 0; pointer-events: none } over the layer it decorates.
489
+ ```
490
+
491
+ ## afterglow: Afterglow
492
+ Category: Composed
493
+ Use it for: a bright figure or object on black, redrawn in warm light characters over a dusk gradient; event posters, music and campaign heroes.
494
+ Settings: ASCII, 4px cells, black point .25, `#fff0dc` ink over a gradient from `#1c1433` to `#b4492f`, character glow .3.
495
+
496
+ Prompt:
497
+ “Draw [my photo] in warm light characters over a dusk gradient with asciify-engine: violet into ember, the characters glowing softly. Export a 2160×2700 PNG poster and let me swap the two gradient colors for [our palette].”
498
+
499
+ ```ts
500
+ import { mountStudio } from 'asciify-engine/studio';
501
+
502
+ const art = await mountStudio(canvas, '/your-photo.jpg', {
503
+ settings: {
504
+ style: 'ascii', cellSize: 4, ink: '#fff0dc',
505
+ backdrop: { mode: 'gradient', color: '#1c1433', color2: '#b4492f' },
506
+ color: { contrast: 1.2, blackPoint: .25 },
507
+ effects: { characterBloom: .3 },
508
+ },
509
+ width: frame.clientWidth, height: frame.clientHeight, maxCells: 65536,
510
+ });
511
+ art.update({ backdrop: { color: '#0e2a3a', color2: '#d98f3c' } }); // the gradient runs top left to bottom right
512
+ ```
513
+
514
+ ## neon: Neon
515
+ Category: Composed
516
+ Use it for: night photos with bright, saturated lights, redrawn as glowing colored characters; nightlife, festival and music artwork.
517
+ Settings: ASCII, 4px cells, source color at saturation 1.3 on `#07070a`, character glow .6.
518
+
519
+ Prompt:
520
+ “Light [my night photo] up as neon with asciify-engine: fine characters in the photo's own saturated colors, each glowing like a lit tube, on black. Play it live in [the hero] and export a 2160×2700 PNG.”
521
+
522
+ ```ts
523
+ import { mountStudio } from 'asciify-engine/studio';
524
+
525
+ const art = await mountStudio(canvas, '/your-photo.jpg', {
526
+ settings: {
527
+ style: 'ascii', cellSize: 4, colorMode: 'source',
528
+ backdrop: { mode: 'solid', color: '#07070a' },
529
+ color: { saturation: 1.3 },
530
+ effects: { characterBloom: .6 },
531
+ },
532
+ width: frame.clientWidth, height: frame.clientHeight, maxCells: 65536,
533
+ });
534
+ ```
535
+
536
+ ## cobalt: Cobalt
537
+ Category: Composed
538
+ Use it for: a pale sculpture, portrait or product on a dark ground, set in cream characters on saturated ultramarine; gallery posters and confident brand heroes.
539
+ Settings: ASCII, 3px cells, `#f2ede2` ink on solid `#1f3ea8`, contrast 1.3, black point .15.
540
+
541
+ Prompt:
542
+ “Set [my photo] in cream characters on deep cobalt blue with asciify-engine, like a gallery poster. Export a 2480×3508 PNG, and let me swap the blue for [our brand color] without changing the ink.”
543
+
544
+ ```ts
545
+ import { mountStudio } from 'asciify-engine/studio';
546
+
547
+ const art = await mountStudio(canvas, '/your-photo.jpg', {
548
+ settings: {
549
+ style: 'ascii', cellSize: 3, ink: '#f2ede2',
550
+ backdrop: { mode: 'solid', color: '#1f3ea8' },
551
+ color: { contrast: 1.3, blackPoint: .15 },
552
+ },
553
+ width: frame.clientWidth, height: frame.clientHeight, maxCells: 65536,
554
+ });
555
+ art.update({ backdrop: { color: '#0f5c4a' } });
556
+ ```
557
+
558
+ ## cameo: Cameo
559
+ Category: Composed
560
+ Use it for: a portrait engraved inside an oval on warm paper, like a stamp or banknote vignette; invitations, about pages, memorial and heritage artwork.
561
+ Settings: engraving, 4px cells, `#2a2620` on `#ece6d8`, `print.invert: true`, angle −30, inside an ellipse mask.
562
+
563
+ Prompt:
564
+ “Engrave [my portrait] inside an oval cameo with asciify-engine: fine parallel cuts in dark ink on warm paper, only within a centered oval, the paper plain around it. Export a 2480×3508 PNG for an invitation.”
565
+
566
+ ```ts
567
+ import { mountStudio } from 'asciify-engine/studio';
568
+
569
+ const art = await mountStudio(canvas, '/your-photo.jpg', {
570
+ settings: {
571
+ style: 'engraving', cellSize: 4, ink: '#2a2620',
572
+ backdrop: { mode: 'solid', color: '#ece6d8' },
573
+ print: { invert: true, angle: -30, weight: 1.05 },
574
+ mask: { enabled: true, shapes: [{ kind: 'ellipse', x: .32, y: .12, width: .36, height: .76 }] },
575
+ },
576
+ width: frame.clientWidth, height: frame.clientHeight, maxCells: 131072,
577
+ });
578
+ // Mask shapes are 0–1 of the frame (left, top, width, height); move the oval to frame the face.
579
+ ```
580
+
581
+ ## gilded: Gilded
582
+ Category: Composed
583
+ Use it for: jewelry, watches, metalwork and ornament as gold engraving on black; luxury product pages, labels and premium dark heroes.
584
+ Settings: engraving, 4px cells, gold `#d9b26a` on `#0b0a08`, angle −35, weight 1.1, contrast 1.35, character glow .2.
585
+
586
+ Prompt:
587
+ “Engrave [my product photo] in gold on black with asciify-engine: fine parallel cuts in warm gold whose weight follows the light, with a faint glow. Export a 2160×2160 PNG and a 3840×2160 wallpaper.”
588
+
589
+ ```ts
590
+ import { mountStudio } from 'asciify-engine/studio';
591
+
592
+ const art = await mountStudio(canvas, '/your-photo.jpg', {
593
+ settings: {
594
+ style: 'engraving', cellSize: 4, ink: '#d9b26a',
595
+ backdrop: { mode: 'solid', color: '#0b0a08' },
596
+ print: { angle: -35, weight: 1.1 },
597
+ color: { contrast: 1.35, brightness: .05 },
598
+ effects: { characterBloom: .2 },
599
+ },
600
+ width: frame.clientWidth, height: frame.clientHeight, maxCells: 131072,
601
+ });
602
+ ```
603
+
604
+ ## overprint: Overprint
605
+ Category: Composed
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.
608
+
609
+ Prompt:
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.”
611
+
612
+ ```ts
613
+ import { mountStudio } from 'asciify-engine/studio';
614
+
615
+ const art = await mountStudio(canvas, '/your-photo.jpg', {
616
+ settings: {
617
+ style: 'ascii', cellSize: 6, ink: '#0b2530',
618
+ backdrop: { mode: 'source', opacity: 1 },
619
+ color: { levels: 'none', curves: { rgb: [[0, 1], [.3, 1], [.45, 0], [1, 0]] } },
620
+ },
621
+ width: frame.clientWidth, height: frame.clientHeight, maxCells: 65536,
622
+ });
623
+ ```
624
+
625
+ ## cinema: Cinema
626
+ Category: Finished
627
+ Use it for: landscapes, roads and wide scenes as a film still: warm-white characters over the photo's own soft color, with a vignette, film grain and a little bloom; trailers, story heroes and posters.
628
+ Settings: ASCII, 4px cells, warm-white `#fff1de` ink over the source blurred 14px, contrast 1.15, vignette .45, grain .22, bloom .15.
629
+
630
+ Prompt:
631
+ “Grade [my photo] like a film still with asciify-engine: fine warm-white characters over a soft blur of the photo's own colors, finished with a vignette, a little bloom and film grain. Export a 3840×1646 PNG in 21:9 and keep it live in [the hero].”
632
+
633
+ ```ts
634
+ import { mountStudio } from 'asciify-engine/studio';
635
+
636
+ const art = await mountStudio(canvas, '/your-photo.jpg', {
637
+ settings: {
638
+ style: 'ascii', cellSize: 4, ink: '#fff1de',
639
+ backdrop: { mode: 'blurred', blur: 14, opacity: 1 },
640
+ color: { contrast: 1.15 },
641
+ effects: { vignette: .45, grain: .22, bloom: .15 },
642
+ },
643
+ width: frame.clientWidth, height: frame.clientHeight, maxCells: 65536,
644
+ });
645
+ // Finish effects need WebGL: check art.capabilities.gpuFinish before saying they were applied.
646
+ ```
647
+
648
+ ## darkroom: Darkroom
649
+ Category: Finished
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.
651
+ Settings: ASCII, 5px cells, `#efe6d6` on `#080706`, contrast 1.15, brightness .35, midtones 2, vignette .45, bloom .4, grain .12.
652
+
653
+ Prompt:
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.”
655
+
656
+ ```ts
657
+ import { mountStudio } from 'asciify-engine/studio';
658
+
659
+ const art = await mountStudio(canvas, '/your-photo.jpg', {
660
+ settings: {
661
+ style: 'ascii', cellSize: 5, ink: '#efe6d6',
662
+ backdrop: { mode: 'solid', color: '#080706' },
663
+ color: { contrast: 1.15, brightness: .35, gamma: 2 },
664
+ effects: { vignette: .45, bloom: .4, grain: .12 },
665
+ },
666
+ width: frame.clientWidth, height: frame.clientHeight, maxCells: 65536,
667
+ });
668
+ ```
669
+
670
+ ## broadcast: Broadcast
671
+ Category: Finished
672
+ Use it for: space, sport and news-like photos as a live transmission: a fine pixel picture with scanlines, a chromatic fringe, RGB split and a slight tube curve; launch and live-event artwork.
673
+ Settings: pixel, 3px cells, source color at saturation 1.15, scanlines .35, prism .3, RGB split .25, CRT .15, vignette .25.
674
+
675
+ Prompt:
676
+ “Make [my photo] look like a live broadcast with asciify-engine: a fine pixel picture in the photo's colors on a screen with scanlines, a chromatic fringe, a little RGB split and a slight tube curve. Show it live in [the hero] and export a 1920×1080 PNG.”
677
+
678
+ ```ts
679
+ import { mountStudio } from 'asciify-engine/studio';
680
+
681
+ const art = await mountStudio(canvas, '/your-photo.jpg', {
682
+ settings: {
683
+ style: 'pixel', cellSize: 3, colorMode: 'source',
684
+ backdrop: { mode: 'solid', color: '#06080b' },
685
+ color: { saturation: 1.15, contrast: 1.05 },
686
+ effects: { scanlines: .35, prism: .3, rgbSplit: .25, crt: .15, vignette: .25 },
687
+ },
688
+ width: frame.clientWidth, height: frame.clientHeight, maxCells: 131072,
689
+ });
690
+ ```
691
+
692
+ ## tape: Tape
693
+ Category: Finished
694
+ Use it for: action, skate and music photos as a worn tape frame: halftone dots in source color with glitch bands, color split, scanlines and grain; merch, flyers and social cuts.
695
+ Settings: dots, 4px cells, source color at saturation 1.3, brightness .15, glitch .15, RGB split .35, scanlines .2, grain .25.
696
+
697
+ Prompt:
698
+ “Run [my photo] through an old tape with asciify-engine: halftone dots in the photo's colors with glitch bands, an RGB split, faint scanlines and grain. Export a 1080×1350 PNG and a 6-second 1080×1350 MP4 loop.”
699
+
700
+ ```ts
701
+ import { mountStudio } from 'asciify-engine/studio';
702
+
703
+ const art = await mountStudio(canvas, '/your-photo.jpg', {
704
+ settings: {
705
+ style: 'dots', cellSize: 4, colorMode: 'source',
706
+ backdrop: { mode: 'solid', color: '#0b0a0c' },
707
+ color: { saturation: 1.3, contrast: 1.1, brightness: .15 },
708
+ effects: { glitch: .15, rgbSplit: .35, scanlines: .2, grain: .25 },
709
+ },
710
+ width: frame.clientWidth, height: frame.clientHeight, maxCells: 65536,
711
+ });
712
+ // Glitch bands move over time; mountStudio holds still under prefers-reduced-motion.
713
+ ```
714
+
715
+ ## miniature: Miniature
716
+ Category: Finished
717
+ Use it for: aerial views of towns, harbors and crowds as a tilt-shift model, sharp in a band and softly blurred above and below; travel and city artwork.
718
+ Settings: pixel, 4px cells, source color at saturation 1.35, progressive blur 6 focused at .55, sharpen .3.
719
+
720
+ Prompt:
721
+ “Turn [my aerial photo] into a tilt-shift miniature with asciify-engine: small square pixels in boosted source colors, sharp through the middle band and blurring toward the top and bottom. Export a 3840×2160 PNG wallpaper.”
722
+
723
+ ```ts
724
+ import { mountStudio } from 'asciify-engine/studio';
725
+
726
+ const art = await mountStudio(canvas, '/your-photo.jpg', {
727
+ settings: {
728
+ style: 'pixel', cellSize: 4, colorMode: 'source',
729
+ backdrop: { mode: 'solid', color: '#0b0b0a' },
730
+ color: { saturation: 1.35, contrast: 1.1 },
731
+ effects: { blur: 6, blurType: 'progressive', focus: .55, sharpen: .3 },
732
+ },
733
+ width: frame.clientWidth, height: frame.clientHeight, maxCells: 65536,
734
+ });
735
+ art.update({ effects: { focus: .4 } }); // moves the sharp band
736
+ ```
737
+
738
+ ## archive: Archive
739
+ Category: Finished
740
+ Use it for: historic, travel and heritage photos as an aged print, with sepia ink, dust, grain and a vignette; anniversaries, museums and about pages.
741
+ Settings: ASCII, 4px cells, sepia ink `#e9d8b4` on `#17130e`, contrast 1.4, dust .45, grain .3, vignette .4.
742
+
743
+ Prompt:
744
+ “Age [my photo] into an archive print with asciify-engine: warm sepia characters on dark brown with dust, film grain and a vignette, like a print found in a drawer. Export a 2480×3508 PNG.”
745
+
746
+ ```ts
747
+ import { mountStudio } from 'asciify-engine/studio';
748
+
749
+ const art = await mountStudio(canvas, '/your-photo.jpg', {
750
+ settings: {
751
+ style: 'ascii', cellSize: 4, ink: '#e9d8b4',
752
+ backdrop: { mode: 'solid', color: '#17130e' },
753
+ color: { contrast: 1.4 },
754
+ effects: { dust: .45, grain: .3, vignette: .4 },
755
+ },
756
+ width: frame.clientWidth, height: frame.clientHeight, maxCells: 65536,
757
+ });
758
+ ```
759
+
760
+ ## velocity: Velocity
761
+ Category: Finished
762
+ Use it for: headlights, tunnels and anything rushing toward the camera, with a radial speed blur and glowing highlights; automotive, sport and launch heroes.
763
+ Settings: ASCII, 4px cells, source color at saturation 1.25 lifted (brightness .2, midtones 1.3), radial blur 4 around the center, bloom .3, vignette .25.
764
+
765
+ Prompt:
766
+ “Give [my photo] speed with asciify-engine: characters in the photo's colors streaking out from the center with a radial blur, glowing highlights and a vignette. Export a 1920×1080 PNG and keep it live in [the hero].”
767
+
768
+ ```ts
769
+ import { mountStudio } from 'asciify-engine/studio';
770
+
771
+ const art = await mountStudio(canvas, '/your-photo.jpg', {
772
+ settings: {
773
+ style: 'ascii', cellSize: 4, colorMode: 'source',
774
+ backdrop: { mode: 'solid', color: '#08080a' },
775
+ color: { saturation: 1.25, brightness: .2, gamma: 1.3 },
776
+ effects: { blur: 4, blurType: 'radial', focus: .5, bloom: .3, vignette: .25 },
777
+ },
778
+ width: frame.clientWidth, height: frame.clientHeight, maxCells: 65536,
779
+ });
780
+ ```
781
+
782
+ ## poppress: Pop press
783
+ Category: Finished
784
+ Use it for: bold, saturated product and car photos as a comic-print page, with a halftone screen over shaded blocks in source color; packaging, merch and pop posters.
785
+ Settings: blocks, 4px cells, source color at saturation 1.4 lifted (brightness .2, midtones 1.3), halftone screen .35, sharpen .4.
786
+
787
+ Prompt:
788
+ “Print [my photo] as a pop comic page with asciify-engine: shaded blocks in the photo's saturated colors under a halftone screen, sharpened. Export a 2480×3508 PNG poster.”
789
+
790
+ ```ts
791
+ import { mountStudio } from 'asciify-engine/studio';
792
+
793
+ const art = await mountStudio(canvas, '/your-photo.jpg', {
794
+ settings: {
795
+ style: 'blocks', cellSize: 4, colorMode: 'source',
796
+ backdrop: { mode: 'solid', color: '#0b0b0a' },
797
+ color: { saturation: 1.4, contrast: 1.15, brightness: .2, gamma: 1.3 },
798
+ effects: { halftone: .35, sharpen: .4 },
799
+ },
800
+ width: frame.clientWidth, height: frame.clientHeight, maxCells: 65536,
801
+ });
802
+ ```
803
+
67
804
  ## ascii: Signature ASCII
68
805
  Category: Characters
69
806
  Use it for: the house look; a portrait, sculpture or product as a dark wallpaper, a hero artwork or a cover.
70
- 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.
71
808
 
72
809
  Prompt:
73
- “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.”
74
811
 
75
812
  ```ts
76
813
  import { mountStudio, studioLook } from 'asciify-engine/studio';
@@ -85,7 +822,7 @@ const art = await mountStudio(canvas, '/your-photo.jpg', {
85
822
  ## night: Night signal
86
823
  Category: Characters
87
824
  Use it for: moodier, filmic portraits and night scenes; album art and dark posters.
88
- 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.
89
826
 
90
827
  Prompt:
91
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.”
@@ -177,6 +914,112 @@ const art = await mountStudio(canvas, '/your-photo.jpg', {
177
914
  });
178
915
  ```
179
916
 
917
+ ## blocks: ANSI blocks
918
+ Category: Characters
919
+ Use it for: bold, colorful subjects as shaded block characters, like ANSI art from a BBS; retro, game and music artwork.
920
+ Settings: blocks style (` ░▒▓█`), 5px cells, source color at saturation 1.15, contrast 1.1 on `#0b0b0a`.
921
+
922
+ Prompt:
923
+ “Draw [my photo] in ANSI blocks with asciify-engine: shaded block characters in the photo's own colors on black, like a BBS splash screen. Export a 2160×2160 PNG and a 3840×2160 wallpaper.”
924
+
925
+ ```ts
926
+ import { mountStudio } from 'asciify-engine/studio';
927
+
928
+ const art = await mountStudio(canvas, '/your-photo.jpg', {
929
+ settings: {
930
+ style: 'blocks', cellSize: 5, colorMode: 'source',
931
+ backdrop: { mode: 'solid', color: '#0b0b0a' },
932
+ color: { saturation: 1.15, contrast: 1.1 },
933
+ },
934
+ width: frame.clientWidth, height: frame.clientHeight, maxCells: 65536,
935
+ });
936
+ ```
937
+
938
+ ## braille: Braille
939
+ Category: Characters
940
+ Use it for: fine, graphic subjects on black (leaves, feathers, line-like forms) drawn in tiny braille dots; delicate dark wallpapers and editorial openers.
941
+ Settings: braille style (` ⠁⠃⠇⡇⣇⣧⣷⣿`), 3px cells, source color at saturation 1.3 on `#0b0b0a`, contrast 1.4, brightness .15, midtones 1.3.
942
+
943
+ Prompt:
944
+ “Draw [my photo] in braille dots with asciify-engine: fine braille characters in the photo's own colors on black, so the light shapes read as clusters of dots. Export a 3840×2160 PNG wallpaper.”
945
+
946
+ ```ts
947
+ import { mountStudio } from 'asciify-engine/studio';
948
+
949
+ const art = await mountStudio(canvas, '/your-photo.jpg', {
950
+ settings: {
951
+ style: 'braille', cellSize: 3, colorMode: 'source',
952
+ backdrop: { mode: 'solid', color: '#0b0b0a' },
953
+ color: { contrast: 1.4, brightness: .15, saturation: 1.3, gamma: 1.3 },
954
+ },
955
+ width: frame.clientWidth, height: frame.clientHeight, maxCells: 65536,
956
+ });
957
+ ```
958
+
959
+ ## cross: Cross-stitch
960
+ Category: Characters
961
+ Use it for: birds, flowers and folk subjects as colored stitches on dark cloth; craft, seasonal and gift artwork.
962
+ Settings: cross style (` ·+xX#`), 4px cells, source color at saturation 1.5, brightness .2, contrast 1.2 on indigo cloth `#191d26`.
963
+
964
+ Prompt:
965
+ “Stitch [my photo] in cross-stitch with asciify-engine: small crosses in the photo's colors on dark indigo cloth, like an embroidered sampler. Export a 2160×2160 PNG for a card.”
966
+
967
+ ```ts
968
+ import { mountStudio } from 'asciify-engine/studio';
969
+
970
+ const art = await mountStudio(canvas, '/your-photo.jpg', {
971
+ settings: {
972
+ style: 'cross', cellSize: 4, colorMode: 'source',
973
+ backdrop: { mode: 'solid', color: '#191d26' },
974
+ color: { saturation: 1.5, brightness: .2, contrast: 1.2 },
975
+ },
976
+ width: frame.clientWidth, height: frame.clientHeight, maxCells: 65536,
977
+ });
978
+ ```
979
+
980
+ ## diagonal: Storm
981
+ Category: Characters
982
+ Use it for: rain, wind and streaks of light drawn in slanted strokes; moody posters, weather stories and dark section artwork.
983
+ Settings: diagonal style (` /╱╳`), 4px cells, `#eef3f5` on blue-black `#10161b`, contrast 1.25, brightness .15, midtones 1.8.
984
+
985
+ Prompt:
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.”
987
+
988
+ ```ts
989
+ import { mountStudio } from 'asciify-engine/studio';
990
+
991
+ const art = await mountStudio(canvas, '/your-photo.jpg', {
992
+ settings: {
993
+ style: 'diagonal', cellSize: 4, ink: '#eef3f5',
994
+ backdrop: { mode: 'solid', color: '#10161b' },
995
+ color: { contrast: 1.25, brightness: .15, gamma: 1.8 },
996
+ },
997
+ width: frame.clientWidth, height: frame.clientHeight, maxCells: 65536,
998
+ });
999
+ ```
1000
+
1001
+ ## diamond: Jewel box
1002
+ Category: Characters
1003
+ Use it for: iridescent, richly colored subjects (feathers, gems, beetles, fabric) set in diamond characters; fashion, beauty and jewelry artwork.
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.
1005
+
1006
+ Prompt:
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.”
1008
+
1009
+ ```ts
1010
+ import { mountStudio } from 'asciify-engine/studio';
1011
+
1012
+ const art = await mountStudio(canvas, '/your-photo.jpg', {
1013
+ settings: {
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 },
1018
+ },
1019
+ width: frame.clientWidth, height: frame.clientHeight, maxCells: 65536,
1020
+ });
1021
+ ```
1022
+
180
1023
  ## print: Newsprint
181
1024
  Category: Dither
182
1025
  Use it for: bright, high-key photos as an editorial print; zines, press pages, quiet light-theme heroes.
@@ -233,7 +1076,7 @@ art.update({ ink: '#1f3b73', dither: { colors: ['#f0ece3', '#e0674a', '#1f3b73']
233
1076
  ## dots: Halftone
234
1077
  Category: Print
235
1078
  Use it for: a bold, graphic portrait; band posters, covers and dark heroes that read from far away.
236
- Settings: dots style, 6px cells, `#e6e3da` on `#0b0b0a`, contrast 1.15, brightness .05.
1079
+ Settings: dots style, 5px cells, `#e6e3da` on `#0b0b0a`, contrast 1.3, brightness .15.
237
1080
 
238
1081
  Prompt:
239
1082
  “Make [my photo] a halftone artwork with asciify-engine: round dots in paper white on near black whose size carries the image. Export a 2160×2700 PNG and a 3840×2160 wallpaper at the same dot size.”
@@ -243,9 +1086,9 @@ import { mountStudio } from 'asciify-engine/studio';
243
1086
 
244
1087
  const art = await mountStudio(canvas, '/your-photo.jpg', {
245
1088
  settings: {
246
- style: 'dots', cellSize: 6, ink: '#e6e3da',
1089
+ style: 'dots', cellSize: 5, ink: '#e6e3da',
247
1090
  backdrop: { mode: 'solid', color: '#0b0b0a' },
248
- color: { contrast: 1.15, brightness: .05 },
1091
+ color: { contrast: 1.3, brightness: .15 },
249
1092
  },
250
1093
  width: frame.clientWidth, height: frame.clientHeight, maxCells: 65536,
251
1094
  });
@@ -271,7 +1114,7 @@ const art = await mountStudio(canvas, '/your-photo.jpg', {
271
1114
  ## stipple: Stipple
272
1115
  Category: Print
273
1116
  Use it for: a quiet, drawn portrait in fine dots; book covers, editorial portraits, dark wallpapers.
274
- Settings: stipple style, 4px cells, `#e6e3da` on `#0b0b0a`, contrast 1.25, brightness .08.
1117
+ Settings: stipple style, 4px cells, `#e6e3da` on `#0b0b0a`, contrast 1.35, brightness .2, midtones 1.3.
275
1118
 
276
1119
  Prompt:
277
1120
  “Draw [my portrait] in stipple with asciify-engine: thousands of fine paper-white dots on near black, scattered so the light shapes the face. Export a 2480×3508 PNG for a book cover.”
@@ -283,7 +1126,7 @@ const art = await mountStudio(canvas, '/your-photo.jpg', {
283
1126
  settings: {
284
1127
  style: 'stipple', cellSize: 4, ink: '#e6e3da',
285
1128
  backdrop: { mode: 'solid', color: '#0b0b0a' },
286
- color: { contrast: 1.25, brightness: .08 },
1129
+ color: { contrast: 1.35, brightness: .2, gamma: 1.3 },
287
1130
  },
288
1131
  width: frame.clientWidth, height: frame.clientHeight, maxCells: 131072,
289
1132
  });
@@ -292,7 +1135,7 @@ const art = await mountStudio(canvas, '/your-photo.jpg', {
292
1135
  ## engraving: Banknote
293
1136
  Category: Print
294
1137
  Use it for: architecture, portraits and objects as a steel engraving; certificates, invitations, premium light-theme heroes.
295
- Settings: engraving style, 5px cells, dark ink `#22201c` on paper `#ece8de`, `print.invert: true`, angle −35, weight 1.1.
1138
+ Settings: engraving style, 5px cells, dark ink `#22201c` on paper `#ece8de`, `print.invert: true`, angle −35, weight 1.1, contrast 1.25.
296
1139
 
297
1140
  Prompt:
298
1141
  “Engrave [my photo] like a banknote with asciify-engine: parallel cuts in dark ink on warm paper whose weight follows the shadows. Export a 2480×3508 PNG, and keep the line angle adjustable.”
@@ -305,6 +1148,7 @@ const art = await mountStudio(canvas, '/your-photo.jpg', {
305
1148
  style: 'engraving', cellSize: 5, ink: '#22201c',
306
1149
  backdrop: { mode: 'solid', color: '#ece8de' },
307
1150
  print: { invert: true, angle: -35, weight: 1.1 },
1151
+ color: { contrast: 1.25 },
308
1152
  },
309
1153
  width: frame.clientWidth, height: frame.clientHeight, maxCells: 131072,
310
1154
  });
@@ -335,7 +1179,7 @@ const art = await mountStudio(canvas, '/your-photo.jpg', {
335
1179
  ## pointillism: Pointillist
336
1180
  Category: Print
337
1181
  Use it for: still lifes, fruit, flowers and landscapes as a painted canvas; gallery-style wallpapers.
338
- Settings: pointillism style, 3px cells, source color, brightness .1, saturation 1.1 on `#0b0b0a`.
1182
+ Settings: pointillism style, 3px cells, source color, brightness .25, saturation 1.3 on `#0b0b0a`.
339
1183
 
340
1184
  Prompt:
341
1185
  “Paint [my photo] in pointillist strokes with asciify-engine: small dabs of the photo's own colors on black, like a Seurat up close. Export a 3840×2160 PNG wallpaper.”
@@ -347,10 +1191,55 @@ const art = await mountStudio(canvas, '/your-photo.jpg', {
347
1191
  settings: {
348
1192
  style: 'pointillism', cellSize: 3, colorMode: 'source', print: { weight: 1.6, density: 1.3 },
349
1193
  backdrop: { mode: 'solid', color: '#0b0b0a' },
350
- color: { brightness: .1, saturation: 1.1 },
1194
+ color: { brightness: .25, saturation: 1.3 },
1195
+ },
1196
+ width: frame.clientWidth, height: frame.clientHeight, maxCells: 131072,
1197
+ });
1198
+ ```
1199
+
1200
+ ## woodblock: Woodcut
1201
+ Category: Print
1202
+ Use it for: landscapes and silhouettes with big tonal masses as a carved woodblock print on paper; book covers, labels and outdoor brand artwork.
1203
+ Settings: woodblock style, 8px cells, `#1d1a16` on `#ebe3d2`, `print.invert: true`, level bands (angle 0), roughness .3, weight .9, contrast 1.2, white point .7 so the sky stays bare paper, midtones 1.6 and shadows .3 so each ridge keeps its own band.
1204
+
1205
+ Prompt:
1206
+ “Carve [my landscape photo] as a woodcut with asciify-engine: broad, rough-edged bands in dark ink on warm paper, stepping through a few tones. Export a 2480×3508 PNG print.”
1207
+
1208
+ ```ts
1209
+ import { mountStudio } from 'asciify-engine/studio';
1210
+
1211
+ const art = await mountStudio(canvas, '/your-photo.jpg', {
1212
+ settings: {
1213
+ style: 'woodblock', cellSize: 8, ink: '#1d1a16',
1214
+ backdrop: { mode: 'solid', color: '#ebe3d2' },
1215
+ print: { invert: true, angle: 0, roughness: .3, weight: .9 },
1216
+ color: { contrast: 1.2, whitePoint: .7, gamma: 1.6, shadows: .3 },
1217
+ },
1218
+ width: frame.clientWidth, height: frame.clientHeight, maxCells: 131072,
1219
+ });
1220
+ ```
1221
+
1222
+ ## risograph: Riso duotone
1223
+ Category: Print
1224
+ Use it for: bright, saturated photos (pools, sport, summer) as a two-screen riso print with offset registration; zines, gig posters and summer campaigns.
1225
+ Settings: risograph style, 5px cells, source color for the first screen, a coral `#f2594b` second screen overprinted on warm areas, on `#f4ebd0`, density 1.2, registration .35.
1226
+
1227
+ Prompt:
1228
+ “Print [my photo] as a riso duotone with asciify-engine: a dot screen in the photo's own colors with a coral second screen overprinted slightly out of register on the warm areas, on cream paper. Export a 2480×3508 PNG poster.”
1229
+
1230
+ ```ts
1231
+ import { mountStudio } from 'asciify-engine/studio';
1232
+
1233
+ const art = await mountStudio(canvas, '/your-photo.jpg', {
1234
+ settings: {
1235
+ style: 'risograph', cellSize: 5, colorMode: 'source', ink: '#2853a5',
1236
+ backdrop: { mode: 'solid', color: '#f4ebd0' },
1237
+ print: { secondaryInk: '#f2594b', registration: .35, density: 1.2 },
351
1238
  },
352
1239
  width: frame.clientWidth, height: frame.clientHeight, maxCells: 131072,
353
1240
  });
1241
+ // With colorMode 'accent' both screens use ink and secondaryInk; print.invert puts the ink in the shadows.
1242
+ art.update({ print: { registration: .1 } }); // tighter registration
354
1243
  ```
355
1244
 
356
1245
  ## mosaic: Mosaic study
@@ -467,7 +1356,7 @@ const art = await mountStudio(canvas, '/your-photo.jpg', {
467
1356
  ## led: Scoreboard
468
1357
  Category: Tiles
469
1358
  Use it for: cities, stages and night photos as a wall of round emitters; event, sport and music artwork.
470
- Settings: LED style, 6px cells, source color at saturation .7, contrast 1.1 on `#0b0b0a`.
1359
+ Settings: LED style, 5px cells, source color at saturation 1.2, contrast 1.1, brightness .2 on `#0b0b0a`.
471
1360
 
472
1361
  Prompt:
473
1362
  “Show [my photo] on an LED wall with asciify-engine: round emitters in the photo's colors on black, like a stadium scoreboard. Play [my video] through it live in [the hero], and export a 1920×1080 MP4.”
@@ -477,9 +1366,9 @@ import { mountStudio } from 'asciify-engine/studio';
477
1366
 
478
1367
  const art = await mountStudio(canvas, '/your-video.mp4', {
479
1368
  settings: {
480
- style: 'led', cellSize: 6, colorMode: 'source',
1369
+ style: 'led', cellSize: 5, colorMode: 'source',
481
1370
  backdrop: { mode: 'solid', color: '#0b0b0a' },
482
- color: { saturation: .7, contrast: 1.1 },
1371
+ color: { saturation: 1.2, contrast: 1.1, brightness: .2 },
483
1372
  },
484
1373
  width: frame.clientWidth, height: frame.clientHeight, maxCells: 32768,
485
1374
  });