asciify-engine 4.16.0 → 4.18.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.
@@ -0,0 +1,486 @@
1
+ # Asciify looks
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.
4
+
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
+
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.
8
+
9
+ ## Reproduce a look
10
+
11
+ Mount it on a canvas, sized to the element it fills. Cell sizes are logical pixels: the renderer draws at the width and height you pass, and multiplies cells by the pixel ratio. Pass the element's CSS size times the ratio, with that ratio, to keep the density you see on asciify.org with sharp marks. The source is cover-cropped into that frame. Raise `maxCells` for fine dither and print looks.
12
+
13
+ ```ts
14
+ import { mountStudio, studioLook } from 'asciify-engine/studio';
15
+
16
+ const box = frame.getBoundingClientRect(), ratio = Math.min(devicePixelRatio, 2);
17
+ const width = Math.round(box.width * ratio), height = Math.round(box.height * ratio);
18
+ const art = await mountStudio(canvas, '/your-photo.jpg', {
19
+ settings: studioLook('riso'), // or a full settings object from an entry below
20
+ width, height, maxDimension: 2048, maxCells: 65536,
21
+ });
22
+ art.resize(width, height, ratio); // the same grid as at 1×, drawn sharper; call again when the frame resizes
23
+ // Let the cursor work through the artwork: art.update({ hover: { effect: 'trail' } });
24
+ // On unmount: art.destroy();
25
+ ```
26
+
27
+ The entries below pass the element's CSS size at 1× for brevity; add the ratio as above for high-density screens.
28
+
29
+ Give the canvas `width: 100%; height: 100%` in CSS and an `aria-label` or adjacent caption describing the image; the artwork is an image, not text. Keep `crop.x`/`crop.y` (0–1) to frame the subject, and `aspectRatio` (`'1:1'`, `'4:3'`, `'3:4'`, `'16:9'`, `'9:16'`, `'21:9'`) when the frame is fixed rather than the element's.
30
+
31
+ ## Export a wallpaper, poster or loop
32
+
33
+ Export renders a separate, deterministic frame; it never screenshots the live canvas. `referenceWidth` is the logical width the look is designed at, so the same cells scale up sharply instead of multiplying.
34
+
35
+ ```ts
36
+ import { exportStudio, loadStudioMedia, normalizeStudioSettings, studioLook } from 'asciify-engine/studio';
37
+
38
+ const media = await loadStudioMedia(file);
39
+ try {
40
+ const settings = studioLook('ascii'); // or normalizeStudioSettings({ ...an entry's settings })
41
+ const wallpaper = await exportStudio({ frame: () => media.frame(0) }, settings, {
42
+ format: 'png', width: 3840, height: 2160, referenceWidth: 960, maxCells: 262144,
43
+ });
44
+ const phone = await exportStudio({ frame: () => media.frame(0) }, settings, {
45
+ format: 'png', width: 1290, height: 2796, referenceWidth: 430, maxCells: 262144,
46
+ });
47
+ // Looks with motion loop every 12 / motion.speed seconds; export one loop for a seamless video wallpaper.
48
+ const loop = await exportStudio({ frame: async (t, signal) => { await media.seek(t, signal); return media.frame(t); } }, settings, {
49
+ format: 'mp4', width: 1920, height: 1080, referenceWidth: 960, fps: 30,
50
+ duration: settings.motion.type === 'none' ? 6 : 12 / settings.motion.speed, maxCells: 131072,
51
+ });
52
+ } finally {
53
+ media.destroy();
54
+ }
55
+ ```
56
+
57
+ Common sizes: desktop 3840×2160 (`referenceWidth: 960`), phone 1290×2796 (`430`), square post 2160×2160 (`720`), A4 at 300 dpi 2480×3508 (`620`). Stills are bounded at 4096 pixels a side and 16 megapixels, so larger print sizes need a lower dpi. MP4 needs a WebCodecs encoder and even dimensions; report an encoder error rather than switching format silently. Hover is live only and is never recorded.
58
+
59
+ ## How to choose
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.
64
+ - Keep artwork with motion off for video sources unless asked; the footage already moves.
65
+ - Say in one line which look you chose and offer one alternative from this file.
66
+
67
+ ## ascii: Signature ASCII
68
+ Category: Characters
69
+ 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.
71
+
72
+ 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.”
74
+
75
+ ```ts
76
+ import { mountStudio, studioLook } from 'asciify-engine/studio';
77
+
78
+ const art = await mountStudio(canvas, '/your-photo.jpg', {
79
+ settings: { ...studioLook('ascii'), hover: { effect: 'trail', strength: .7, radius: .4 } },
80
+ width: frame.clientWidth, height: frame.clientHeight, maxCells: 65536,
81
+ });
82
+ // On unmount: art.destroy();
83
+ ```
84
+
85
+ ## night: Night signal
86
+ Category: Characters
87
+ 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.
89
+
90
+ Prompt:
91
+ “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.”
92
+
93
+ ```ts
94
+ import { mountStudio, studioLook } from 'asciify-engine/studio';
95
+
96
+ const art = await mountStudio(canvas, '/your-photo.jpg', {
97
+ settings: studioLook('night'),
98
+ width: frame.clientWidth, height: frame.clientHeight, maxCells: 65536,
99
+ });
100
+ // Optical finish needs WebGL: check art.capabilities.gpuFinish before saying it was applied.
101
+ ```
102
+
103
+ ## terminal: Phosphor
104
+ Category: Characters
105
+ Use it for: a CRT or terminal feel on a portrait or product; developer-tool heroes and dark wallpapers.
106
+ Settings: `studioLook('terminal')`: ASCII, sage `#a4c9b3` on `#0a0d0b`, bloom .16, scanlines .12, CRT .06.
107
+
108
+ Prompt:
109
+ “Render [my video] in the Phosphor look with asciify-engine: soft sage characters on a near-black green, a faint glow, scanlines and a slight CRT curve. Play it live in [the hero], muted and looping, and keep it still for reduced motion.”
110
+
111
+ ```ts
112
+ import { mountStudio, studioLook } from 'asciify-engine/studio';
113
+
114
+ const art = await mountStudio(canvas, '/your-video.mp4', {
115
+ settings: studioLook('terminal'),
116
+ width: frame.clientWidth, height: frame.clientHeight, maxCells: 32768,
117
+ });
118
+ // mountStudio pauses off screen and under prefers-reduced-motion; on unmount: art.destroy();
119
+ ```
120
+
121
+ ## wallpaper: Wallpaper
122
+ Category: Characters
123
+ Use it for: a living desktop or phone wallpaper, a screensaver, or a full-bleed artwork that moves on its own.
124
+ Settings: `studioLook('wallpaper')`: ASCII, `#e6e3da` ink over the source blurred 18px at .4 opacity on `#0b0b0a`, caustics motion at speed .35.
125
+
126
+ Prompt:
127
+ “Make [my photo] into a living wallpaper with asciify-engine: ASCII characters over a softened, blurred copy of the photo, with slow caustic light moving through them. Export one seamless loop as a 1920×1080 MP4, plus a 3840×2160 PNG still and a 1290×2796 phone version.”
128
+
129
+ ```ts
130
+ import { exportStudio, loadStudioMedia, studioLook } from 'asciify-engine/studio';
131
+
132
+ const settings = studioLook('wallpaper');
133
+ const media = await loadStudioMedia(file);
134
+ try {
135
+ const loop = await exportStudio({ frame: () => media.frame(0) }, settings, {
136
+ format: 'mp4', width: 1920, height: 1080, referenceWidth: 960, fps: 30,
137
+ duration: 12 / settings.motion.speed, maxCells: 131072, // one full caustics cycle loops cleanly
138
+ });
139
+ } finally { media.destroy(); }
140
+ ```
141
+
142
+ ## blueprint: Blueprint
143
+ Category: Characters
144
+ Use it for: architecture, machines and products drawn as technical linework; engineering and hardware heroes.
145
+ Settings: `studioLook('blueprint')`: lines style, 6px cells, pale blue `#b3c9d8` on navy `#0e1b28`.
146
+
147
+ Prompt:
148
+ “Turn [my product photo] into a Blueprint artwork with asciify-engine: fine line marks in pale blue on deep navy, like a technical drawing. Put it live behind [our hardware page's hero] with the copy kept clear, and export a 2400×1600 PNG.”
149
+
150
+ ```ts
151
+ import { mountStudio, studioLook } from 'asciify-engine/studio';
152
+
153
+ const art = await mountStudio(canvas, '/your-photo.jpg', {
154
+ settings: studioLook('blueprint'),
155
+ width: frame.clientWidth, height: frame.clientHeight, maxCells: 65536,
156
+ });
157
+ ```
158
+
159
+ ## mixed: Type case
160
+ Category: Characters
161
+ Use it for: a playful, typographic take on a colorful subject; posters, merch and editorial openers.
162
+ Settings: mixed style, 5px cells, source color, contrast 1.2, brightness .15 on `#0b0b0a`.
163
+
164
+ Prompt:
165
+ “Set [my photo] in mixed type with asciify-engine: a blend of character shapes in the photo's own colors on black, like a type specimen. Export it as a 2160×2160 square for social and a 2480×3508 poster.”
166
+
167
+ ```ts
168
+ import { mountStudio } from 'asciify-engine/studio';
169
+
170
+ const art = await mountStudio(canvas, '/your-photo.jpg', {
171
+ settings: {
172
+ style: 'mixed', cellSize: 5, colorMode: 'source',
173
+ backdrop: { mode: 'solid', color: '#0b0b0a' },
174
+ color: { contrast: 1.2, brightness: .15 },
175
+ },
176
+ width: frame.clientWidth, height: frame.clientHeight, maxCells: 65536,
177
+ });
178
+ ```
179
+
180
+ ## print: Newsprint
181
+ Category: Dither
182
+ Use it for: bright, high-key photos as an editorial print; zines, press pages, quiet light-theme heroes.
183
+ Settings: `studioLook('print')`: Floyd–Steinberg dither, scale 2, `#1d1c19` on warm paper `#efece4`.
184
+
185
+ Prompt:
186
+ “Print [my photo] as Newsprint with asciify-engine: fine Floyd–Steinberg diffusion in soft black on warm paper. Show it on [our press page] and export a 2480×3508 PNG poster at the same grain.”
187
+
188
+ ```ts
189
+ import { mountStudio, studioLook } from 'asciify-engine/studio';
190
+
191
+ const art = await mountStudio(canvas, '/your-photo.jpg', {
192
+ settings: studioLook('print'),
193
+ width: frame.clientWidth, height: frame.clientHeight, maxCells: 131072, // dither cells are fine
194
+ });
195
+ ```
196
+
197
+ ## handheld: Pocket camera
198
+ Category: Dither
199
+ Use it for: a nostalgic, low-fi portrait or pet photo; game and music artwork.
200
+ Settings: `studioLook('handheld')`: Bayer 4×4 ordered dither, scale 2, four graphite tones `#121211 #3e3d39 #8a8880 #dedbd2`.
201
+
202
+ Prompt:
203
+ “Make [my photo] look like it came off a pocket camera with asciify-engine: a four-tone ordered dither in graphite. Export a 1080×1350 PNG for a post, and a 1290×2796 phone wallpaper.”
204
+
205
+ ```ts
206
+ import { mountStudio, studioLook } from 'asciify-engine/studio';
207
+
208
+ const art = await mountStudio(canvas, '/your-photo.jpg', {
209
+ settings: studioLook('handheld'),
210
+ width: frame.clientWidth, height: frame.clientHeight, maxCells: 131072,
211
+ });
212
+ ```
213
+
214
+ ## riso: Two inks
215
+ Category: Dither
216
+ Use it for: posters, gig flyers and covers with a printed, two-color feel on warm paper.
217
+ Settings: `studioLook('riso')`: Atkinson dither, scale 2, paper `#f0ece3` with coral `#c27461` and blue `#3d5068`.
218
+
219
+ Prompt:
220
+ “Turn [my photo] into a two-ink riso-style print with asciify-engine: Atkinson dither in muted blue and coral on warm paper. Make a 2480×3508 poster PNG, and let me swap the two inks for [our brand colors] without changing the grain.”
221
+
222
+ ```ts
223
+ import { mountStudio, studioLook } from 'asciify-engine/studio';
224
+
225
+ const art = await mountStudio(canvas, '/your-photo.jpg', {
226
+ settings: studioLook('riso'),
227
+ width: frame.clientWidth, height: frame.clientHeight, maxCells: 131072,
228
+ });
229
+ // Swap inks; colors replace the palette array in order (paper first):
230
+ art.update({ ink: '#1f3b73', dither: { colors: ['#f0ece3', '#e0674a', '#1f3b73'] } });
231
+ ```
232
+
233
+ ## dots: Halftone
234
+ Category: Print
235
+ 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.
237
+
238
+ Prompt:
239
+ “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.”
240
+
241
+ ```ts
242
+ import { mountStudio } from 'asciify-engine/studio';
243
+
244
+ const art = await mountStudio(canvas, '/your-photo.jpg', {
245
+ settings: {
246
+ style: 'dots', cellSize: 6, ink: '#e6e3da',
247
+ backdrop: { mode: 'solid', color: '#0b0b0a' },
248
+ color: { contrast: 1.15, brightness: .05 },
249
+ },
250
+ width: frame.clientWidth, height: frame.clientHeight, maxCells: 65536,
251
+ });
252
+ ```
253
+
254
+ ## cmyk: Four-color press
255
+ Category: Print
256
+ Use it for: bright, saturated product and still-life photos as a pop print; packaging, merch and posters.
257
+ Settings: CMYK style, 5px cells, source color; it always prints on white paper.
258
+
259
+ Prompt:
260
+ “Print [my product photo] as a four-color press halftone with asciify-engine: offset cyan, magenta, yellow and black dots on white paper, in the photo's colors. Export a 2480×3508 poster PNG.”
261
+
262
+ ```ts
263
+ import { mountStudio } from 'asciify-engine/studio';
264
+
265
+ const art = await mountStudio(canvas, '/your-photo.jpg', {
266
+ settings: { style: 'cmyk', cellSize: 5, colorMode: 'source' },
267
+ width: frame.clientWidth, height: frame.clientHeight, maxCells: 65536,
268
+ });
269
+ ```
270
+
271
+ ## stipple: Stipple
272
+ Category: Print
273
+ 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.
275
+
276
+ Prompt:
277
+ “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.”
278
+
279
+ ```ts
280
+ import { mountStudio } from 'asciify-engine/studio';
281
+
282
+ const art = await mountStudio(canvas, '/your-photo.jpg', {
283
+ settings: {
284
+ style: 'stipple', cellSize: 4, ink: '#e6e3da',
285
+ backdrop: { mode: 'solid', color: '#0b0b0a' },
286
+ color: { contrast: 1.25, brightness: .08 },
287
+ },
288
+ width: frame.clientWidth, height: frame.clientHeight, maxCells: 131072,
289
+ });
290
+ ```
291
+
292
+ ## engraving: Banknote
293
+ Category: Print
294
+ 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.
296
+
297
+ Prompt:
298
+ “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.”
299
+
300
+ ```ts
301
+ import { mountStudio } from 'asciify-engine/studio';
302
+
303
+ const art = await mountStudio(canvas, '/your-photo.jpg', {
304
+ settings: {
305
+ style: 'engraving', cellSize: 5, ink: '#22201c',
306
+ backdrop: { mode: 'solid', color: '#ece8de' },
307
+ print: { invert: true, angle: -35, weight: 1.1 },
308
+ },
309
+ width: frame.clientWidth, height: frame.clientHeight, maxCells: 131072,
310
+ });
311
+ art.update({ print: { angle: 20 } }); // keeps the other print settings
312
+ ```
313
+
314
+ ## crosshatch: Pen and ink
315
+ Category: Print
316
+ Use it for: sculpture, portraits and figures drawn in crossing pen lines; editorial illustration and posters.
317
+ Settings: crosshatch style, 5px cells, `#22201c` on `#ece8de`, `print.invert: true`.
318
+
319
+ Prompt:
320
+ “Draw [my photo] in pen and ink with asciify-engine: crossing hatch lines in dark ink on warm paper, building up in the shadows. Export a 2480×3508 PNG illustration.”
321
+
322
+ ```ts
323
+ import { mountStudio } from 'asciify-engine/studio';
324
+
325
+ const art = await mountStudio(canvas, '/your-photo.jpg', {
326
+ settings: {
327
+ style: 'crosshatch', cellSize: 5, ink: '#22201c',
328
+ backdrop: { mode: 'solid', color: '#ece8de' },
329
+ print: { invert: true },
330
+ },
331
+ width: frame.clientWidth, height: frame.clientHeight, maxCells: 131072,
332
+ });
333
+ ```
334
+
335
+ ## pointillism: Pointillist
336
+ Category: Print
337
+ 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`.
339
+
340
+ Prompt:
341
+ “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.”
342
+
343
+ ```ts
344
+ import { mountStudio } from 'asciify-engine/studio';
345
+
346
+ const art = await mountStudio(canvas, '/your-photo.jpg', {
347
+ settings: {
348
+ style: 'pointillism', cellSize: 3, colorMode: 'source', print: { weight: 1.6, density: 1.3 },
349
+ backdrop: { mode: 'solid', color: '#0b0b0a' },
350
+ color: { brightness: .1, saturation: 1.1 },
351
+ },
352
+ width: frame.clientWidth, height: frame.clientHeight, maxCells: 131072,
353
+ });
354
+ ```
355
+
356
+ ## mosaic: Mosaic study
357
+ Category: Tiles
358
+ Use it for: colorful subjects as separated tiles; gallery walls, covers and calm wallpapers.
359
+ Settings: `studioLook('mosaic')`: mosaic style, 9px cells, source color at saturation .55, contrast 1.05 on `#0b0b0a`.
360
+
361
+ Prompt:
362
+ “Lay [my photo] out as a mosaic with asciify-engine: separated square tiles in the photo's own colors, softened, on near black. Export a 2160×2160 square and a 3840×2160 wallpaper.”
363
+
364
+ ```ts
365
+ import { mountStudio, studioLook } from 'asciify-engine/studio';
366
+
367
+ const art = await mountStudio(canvas, '/your-photo.jpg', {
368
+ settings: studioLook('mosaic'),
369
+ width: frame.clientWidth, height: frame.clientHeight, maxCells: 32768,
370
+ });
371
+ ```
372
+
373
+ ## bricks: Brickwork
374
+ Category: Tiles
375
+ Use it for: a toy-brick build of a photo; playful posters, kids' and game artwork.
376
+ Settings: `studioLook('bricks')`: lego style, 12px studded cells, source color at saturation .55 on `#0b0b0a`.
377
+
378
+ Prompt:
379
+ “Build [my photo] out of toy bricks with asciify-engine: studded square bricks in softened source colors on black. Export a 2160×2160 PNG and show the live version on [our page] with the cursor rippling through it.”
380
+
381
+ ```ts
382
+ import { mountStudio, studioLook } from 'asciify-engine/studio';
383
+
384
+ const art = await mountStudio(canvas, '/your-photo.jpg', {
385
+ settings: { ...studioLook('bricks'), hover: { effect: 'water', radius: .35 } },
386
+ width: frame.clientWidth, height: frame.clientHeight, maxCells: 32768,
387
+ });
388
+ ```
389
+
390
+ ## voxel: Little volumes
391
+ Category: Tiles
392
+ Use it for: a photo as small isometric blocks; game, 3D and product artwork with depth.
393
+ Settings: `studioLook('voxel')`: voxel style, 12px cells, source color at saturation .5 on `#0b0b0a`.
394
+
395
+ Prompt:
396
+ “Rebuild [my photo] as little isometric volumes with asciify-engine: three-face voxel tiles in muted source colors on black. Export a 3840×2160 PNG wallpaper.”
397
+
398
+ ```ts
399
+ import { mountStudio, studioLook } from 'asciify-engine/studio';
400
+
401
+ const art = await mountStudio(canvas, '/your-photo.jpg', {
402
+ settings: studioLook('voxel'),
403
+ width: frame.clientWidth, height: frame.clientHeight, maxCells: 32768,
404
+ });
405
+ ```
406
+
407
+ ## disco: Mirror room
408
+ Category: Tiles
409
+ Use it for: night scenes, music and event artwork as faceted mirror tiles under one light.
410
+ Settings: `studioLook('disco')`: disco style, 11px cells, source color at saturation .5, one soft light at (.35, .25).
411
+
412
+ Prompt:
413
+ “Turn [my photo] into a mirror-ball artwork with asciify-engine: faceted tiles in muted source colors under one soft light. Export a 2160×2700 PNG for an event poster, and move the light to [the top right].”
414
+
415
+ ```ts
416
+ import { mountStudio, studioLook } from 'asciify-engine/studio';
417
+
418
+ const art = await mountStudio(canvas, '/your-photo.jpg', {
419
+ settings: studioLook('disco'),
420
+ width: frame.clientWidth, height: frame.clientHeight, maxCells: 32768,
421
+ });
422
+ art.update({ lights: [{ x: .75, y: .2, radius: .28, intensity: .28, color: '#f4efe4' }] }); // arrays replace
423
+ ```
424
+
425
+ ## pixel: Pixel
426
+ Category: Tiles
427
+ Use it for: an eight-bit take on a colorful photo; game, music and avatar artwork.
428
+ Settings: pixel style, 6px cells, source color at saturation .85 on `#0b0b0a`.
429
+
430
+ Prompt:
431
+ “Pixelate [my photo] into clean eight-bit art with asciify-engine: square pixels in the photo's colors at 6px. Export a 1080×1080 avatar and a 3840×2160 wallpaper with crisp, unsmoothed pixels.”
432
+
433
+ ```ts
434
+ import { mountStudio } from 'asciify-engine/studio';
435
+
436
+ const art = await mountStudio(canvas, '/your-photo.jpg', {
437
+ settings: {
438
+ style: 'pixel', cellSize: 6, colorMode: 'source',
439
+ backdrop: { mode: 'solid', color: '#0b0b0a' },
440
+ color: { saturation: .85 },
441
+ },
442
+ width: frame.clientWidth, height: frame.clientHeight, maxCells: 65536,
443
+ });
444
+ ```
445
+
446
+ ## hex: Honeycomb
447
+ Category: Tiles
448
+ Use it for: landscapes, water and skies as hexagonal tiles; calm wallpapers and section artwork.
449
+ Settings: hex style, 7px cells, source color at saturation .6 on `#0b0b0a`.
450
+
451
+ Prompt:
452
+ “Tile [my landscape photo] as a honeycomb with asciify-engine: hexagonal cells in the photo's softened colors on black. Export a 3840×2160 desktop wallpaper and a 1290×2796 phone version.”
453
+
454
+ ```ts
455
+ import { mountStudio } from 'asciify-engine/studio';
456
+
457
+ const art = await mountStudio(canvas, '/your-photo.jpg', {
458
+ settings: {
459
+ style: 'hex', cellSize: 7, colorMode: 'source',
460
+ backdrop: { mode: 'solid', color: '#0b0b0a' },
461
+ color: { saturation: .6 },
462
+ },
463
+ width: frame.clientWidth, height: frame.clientHeight, maxCells: 65536,
464
+ });
465
+ ```
466
+
467
+ ## led: Scoreboard
468
+ Category: Tiles
469
+ 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`.
471
+
472
+ Prompt:
473
+ “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.”
474
+
475
+ ```ts
476
+ import { mountStudio } from 'asciify-engine/studio';
477
+
478
+ const art = await mountStudio(canvas, '/your-video.mp4', {
479
+ settings: {
480
+ style: 'led', cellSize: 6, colorMode: 'source',
481
+ backdrop: { mode: 'solid', color: '#0b0b0a' },
482
+ color: { saturation: .7, contrast: 1.1 },
483
+ },
484
+ width: frame.clientWidth, height: frame.clientHeight, maxCells: 32768,
485
+ });
486
+ ```