JF-BIOS v2.6 (C) FINK SYSTEMS
MEM CHECK: 640K OK
DISPLAY: PHOSPHOR-ORANGE 60HZ OK
JF:~$ open --case-study sketchbook-ml-to-3d
↳ resolving project… ok
↳ loading assets… ok
↳ rendering interface… 100%

From Sketch to 3D

AI Pipeline · Illustration to 3D Assets

SCROLL TO READ

AI Pipeline · Illustration to 3D Assets

2026

From Sketch to 3D

AI Pipeline · Illustration to 3D Assets

From Sketch to 3D

AI Pipeline · Illustration to 3D Assets

OVERVIEW

3D characters that look like they came off a page of my sketchbook. I trained a model to do it, proved the model was the wrong instrument, and found that the style was never a generation problem at all. What ships is an asset that carries the look anywhere it's opened — not a viewer trick that falls apart the moment someone downloads the file.

YEAR

2026

ROLE

Artist

Developer

UX/UI

6Colours in the palette
45%Navy, the largest share
3 MBShipped, down from 70
0Inferences at view time

The Problem

My sketchbook has a look. Flat shapes, a palette that never exceeds six colours, a cream keyline sitting outside a contour that is never black, pencil construction left visible under the paint, and paper grain over all of it.

Every 3D version I generated came back as somebody else's work — shiny, plausible, lit like a video game. That isn't a tuning problem. Image-to-3D models are trained to produce believable physical objects, and a flat drawing is a refusal of physical plausibility. The style is the first thing they throw out, because throwing it out is the job.

What Didn't Work

The first version trained a LoRA on my sketchbook and asked it to hold the style through the whole pipeline. It couldn't, and taking it apart was more useful than the failure.

The adapter was rank 16, attention-only, UNet-only, with zero text-encoder weights — so the CLIP strength I had been carefully tuning was doing nothing at all. The base checkpoint was Juggernaut-XL, a photoreal model that pulls toward rendered surfaces on every sampler step. My own positive prompt said "stylized fortnite character." My negative prompt conditioned away noise and grain, which is to say my own medium. And at the end of it, Meshy's PBR pass re-skinned the result regardless of anything upstream.

Six mistakes, each individually reasonable, compounding into a pipeline that was arguing with itself. But fix all six and the ceiling still holds: style asked for early gets sanded off later.

The Solution

Stop asking the generator for style. Split the job: the generator makes form, I make surface.

The palette comes out of the sketchbook rather than out of my head — six colours sampled from one page, and critically, weighted by how much of the page each one actually occupies. Navy is 45% of that drawing. Salmon is 14%. An even split reads pink and wrong; the measured split reads like the page. The accents that identify the work are the ones covering the least canvas, which is exactly what naive palette extraction discards.

Every texel of the generated texture is then mapped through that ramp. Because the operation is per-texel and position-independent, it is safe in atlas space — no seams, no drift, no second inference to disagree with the first. Rotate the model a full turn and nothing moves, because nothing is being generated while you look at it.

The one thing that cannot bake is the keyline. A contour's position depends on where the camera is, so it stays as geometry — two inverted hulls with per-vertex width jitter, so the line breathes like a marker instead of a stroke setting.

Building The Patient

The knight was a prompt — someone else's character, useful for proving the passes work. THE PATIENT is mine: a blindfolded sorceress who cannot cast anything, with a smug rubber-hose mascot floating beside her doing all the actual magic. The credit is going the wrong way and she cannot see well enough to argue.

She was designed backwards from the conversion. Every one of those decisions is about what survives image-to-3D, made before the mesh existed rather than discovered afterwards.

Why It Matters

The style lives in the asset, not the viewer. Open the GLB in Blender, drop it in a game engine, hand it to someone else — it still looks like my work. That is the difference between a rendering trick and a finished thing.

And the palette is six hex values. Swap them and the same mesh belongs to a different body of work, which is the part that makes this a system rather than one drawing.

The Part I'll Admit

Reference-image conditioning beat the fine-tuned adapter at the job the adapter was trained for. One prompt, three reference images, no training, 42 seconds. I don't have a tidy lesson about that. I spent real time and money training something whose whole purpose was solved better by describing what I wanted and showing three pictures.

The LoRA still earns its place for inventing new characters in my style at volume. Just not for keeping style alive across a conversion — which was the one thing I built it for.

Sketchbook PageINPUTPalette ExtractionSTAGE 1Reference CropSTAGE 1Mesh GenerationSTAGE 2UV UnwrapSTAGE 2Palette MappingSTAGE 3Inverted HullsSTAGE 3Live GLB ViewerOUTPUT
STAGE 3CORE

Palette Mapping

Every texel of the generated texture is remapped through the weighted ramp. The operation is per-texel and position-independent, so it is safe in atlas space — no seams, no drift, and no second inference to disagree with the first. This is where the style actually happens.

Input / Output
Stage 1 — Measurement
Stage 2 — Generation
Core — Surface Authoring
Stage 3 — Render-time

LIVE DEMO

BUILT WITH
AI / ML
NB
Nano Banana ProAI / ML
MS
Meshy.aiAI / ML
NP
NumPy / PILAI / ML
3D
3J
Three.js3D
GL
GLSL3D
GT
gltf-transform3D
Web
PW
PlaywrightWeb
GH
GitHub PagesWeb
// EOF — end of case study
↳ process finished · exit code 0
JUSTIN FINKELMAN
CHICAGO BASED · CREATIVE TECHNOLOGIST

Conversations

Four modes. Same agent. Pick one to see how the register shifts.

GL
Glyph
glyph mode · online
Today
Message
DEFAULT MODE

Glyph

TRIGGERS
Baseline — always on

The default register. Direct, observational, and slightly dry. Glyph knows your calendar, your projects, and what's still open. Short answers by default, longer only when asked.

Calendar says 2pm. Decide what matters.
JF-BIOS v2.6 (C) FINK SYSTEMS
MEM CHECK: 640K OK
DISPLAY: PHOSPHOR-ORANGE 60HZ OK
JF:~$ open --case-study sketchbook-ml-to-3d
↳ resolving project… ok
↳ loading assets… ok
↳ rendering interface… 100%

From Sketch to 3D

AI Pipeline · Illustration to 3D Assets

SCROLL TO READ

AI Pipeline · Illustration to 3D Assets

2026

From Sketch to 3D

AI Pipeline · Illustration to 3D Assets

From Sketch to 3D

AI Pipeline · Illustration to 3D Assets

OVERVIEW

3D characters that look like they came off a page of my sketchbook. I trained a model to do it, proved the model was the wrong instrument, and found that the style was never a generation problem at all. What ships is an asset that carries the look anywhere it's opened — not a viewer trick that falls apart the moment someone downloads the file.

YEAR

2026

ROLE

Artist

Developer

UX/UI

6Colours in the palette
45%Navy, the largest share
3 MBShipped, down from 70
0Inferences at view time

The Problem

My sketchbook has a look. Flat shapes, a palette that never exceeds six colours, a cream keyline sitting outside a contour that is never black, pencil construction left visible under the paint, and paper grain over all of it.

Every 3D version I generated came back as somebody else's work — shiny, plausible, lit like a video game. That isn't a tuning problem. Image-to-3D models are trained to produce believable physical objects, and a flat drawing is a refusal of physical plausibility. The style is the first thing they throw out, because throwing it out is the job.

What Didn't Work

The first version trained a LoRA on my sketchbook and asked it to hold the style through the whole pipeline. It couldn't, and taking it apart was more useful than the failure.

The adapter was rank 16, attention-only, UNet-only, with zero text-encoder weights — so the CLIP strength I had been carefully tuning was doing nothing at all. The base checkpoint was Juggernaut-XL, a photoreal model that pulls toward rendered surfaces on every sampler step. My own positive prompt said "stylized fortnite character." My negative prompt conditioned away noise and grain, which is to say my own medium. And at the end of it, Meshy's PBR pass re-skinned the result regardless of anything upstream.

Six mistakes, each individually reasonable, compounding into a pipeline that was arguing with itself. But fix all six and the ceiling still holds: style asked for early gets sanded off later.

The Solution

Stop asking the generator for style. Split the job: the generator makes form, I make surface.

The palette comes out of the sketchbook rather than out of my head — six colours sampled from one page, and critically, weighted by how much of the page each one actually occupies. Navy is 45% of that drawing. Salmon is 14%. An even split reads pink and wrong; the measured split reads like the page. The accents that identify the work are the ones covering the least canvas, which is exactly what naive palette extraction discards.

Every texel of the generated texture is then mapped through that ramp. Because the operation is per-texel and position-independent, it is safe in atlas space — no seams, no drift, no second inference to disagree with the first. Rotate the model a full turn and nothing moves, because nothing is being generated while you look at it.

The one thing that cannot bake is the keyline. A contour's position depends on where the camera is, so it stays as geometry — two inverted hulls with per-vertex width jitter, so the line breathes like a marker instead of a stroke setting.

Building The Patient

The knight was a prompt — someone else's character, useful for proving the passes work. THE PATIENT is mine: a blindfolded sorceress who cannot cast anything, with a smug rubber-hose mascot floating beside her doing all the actual magic. The credit is going the wrong way and she cannot see well enough to argue.

She was designed backwards from the conversion. Every one of those decisions is about what survives image-to-3D, made before the mesh existed rather than discovered afterwards.

Why It Matters

The style lives in the asset, not the viewer. Open the GLB in Blender, drop it in a game engine, hand it to someone else — it still looks like my work. That is the difference between a rendering trick and a finished thing.

And the palette is six hex values. Swap them and the same mesh belongs to a different body of work, which is the part that makes this a system rather than one drawing.

The Part I'll Admit

Reference-image conditioning beat the fine-tuned adapter at the job the adapter was trained for. One prompt, three reference images, no training, 42 seconds. I don't have a tidy lesson about that. I spent real time and money training something whose whole purpose was solved better by describing what I wanted and showing three pictures.

The LoRA still earns its place for inventing new characters in my style at volume. Just not for keeping style alive across a conversion — which was the one thing I built it for.

Sketchbook PageINPUTPalette ExtractionSTAGE 1Reference CropSTAGE 1Mesh GenerationSTAGE 2UV UnwrapSTAGE 2Palette MappingSTAGE 3Inverted HullsSTAGE 3Live GLB ViewerOUTPUT
STAGE 3CORE

Palette Mapping

Every texel of the generated texture is remapped through the weighted ramp. The operation is per-texel and position-independent, so it is safe in atlas space — no seams, no drift, and no second inference to disagree with the first. This is where the style actually happens.

Input / Output
Stage 1 — Measurement
Stage 2 — Generation
Core — Surface Authoring
Stage 3 — Render-time

LIVE DEMO

BUILT WITH
AI / ML
NB
Nano Banana ProAI / ML
MS
Meshy.aiAI / ML
NP
NumPy / PILAI / ML
3D
3J
Three.js3D
GL
GLSL3D
GT
gltf-transform3D
Web
PW
PlaywrightWeb
GH
GitHub PagesWeb
// EOF — end of case study
↳ process finished · exit code 0
JUSTIN FINKELMAN
CHICAGO BASED · CREATIVE TECHNOLOGIST

Conversations

Four modes. Same agent. Pick one to see how the register shifts.

GL
Glyph
glyph mode · online
Today
Message
DEFAULT MODE

Glyph

TRIGGERS
Baseline — always on

The default register. Direct, observational, and slightly dry. Glyph knows your calendar, your projects, and what's still open. Short answers by default, longer only when asked.

Calendar says 2pm. Decide what matters.
JF-BIOS v2.6 (C) FINK SYSTEMS
MEM CHECK: 640K OK
DISPLAY: PHOSPHOR-ORANGE 60HZ OK
JF:~$ open --case-study sketchbook-ml-to-3d
↳ resolving project… ok
↳ loading assets… ok
↳ rendering interface… 100%

From Sketch to 3D

AI Pipeline · Illustration to 3D Assets

SCROLL TO READ

AI Pipeline · Illustration to 3D Assets

2026

From Sketch to 3D

AI Pipeline · Illustration to 3D Assets

From Sketch to 3D

AI Pipeline · Illustration to 3D Assets

OVERVIEW

3D characters that look like they came off a page of my sketchbook. I trained a model to do it, proved the model was the wrong instrument, and found that the style was never a generation problem at all. What ships is an asset that carries the look anywhere it's opened — not a viewer trick that falls apart the moment someone downloads the file.

YEAR

2026

ROLE

Artist

Developer

UX/UI

6Colours in the palette
45%Navy, the largest share
3 MBShipped, down from 70
0Inferences at view time

The Problem

My sketchbook has a look. Flat shapes, a palette that never exceeds six colours, a cream keyline sitting outside a contour that is never black, pencil construction left visible under the paint, and paper grain over all of it.

Every 3D version I generated came back as somebody else's work — shiny, plausible, lit like a video game. That isn't a tuning problem. Image-to-3D models are trained to produce believable physical objects, and a flat drawing is a refusal of physical plausibility. The style is the first thing they throw out, because throwing it out is the job.

What Didn't Work

The first version trained a LoRA on my sketchbook and asked it to hold the style through the whole pipeline. It couldn't, and taking it apart was more useful than the failure.

The adapter was rank 16, attention-only, UNet-only, with zero text-encoder weights — so the CLIP strength I had been carefully tuning was doing nothing at all. The base checkpoint was Juggernaut-XL, a photoreal model that pulls toward rendered surfaces on every sampler step. My own positive prompt said "stylized fortnite character." My negative prompt conditioned away noise and grain, which is to say my own medium. And at the end of it, Meshy's PBR pass re-skinned the result regardless of anything upstream.

Six mistakes, each individually reasonable, compounding into a pipeline that was arguing with itself. But fix all six and the ceiling still holds: style asked for early gets sanded off later.

The Solution

Stop asking the generator for style. Split the job: the generator makes form, I make surface.

The palette comes out of the sketchbook rather than out of my head — six colours sampled from one page, and critically, weighted by how much of the page each one actually occupies. Navy is 45% of that drawing. Salmon is 14%. An even split reads pink and wrong; the measured split reads like the page. The accents that identify the work are the ones covering the least canvas, which is exactly what naive palette extraction discards.

Every texel of the generated texture is then mapped through that ramp. Because the operation is per-texel and position-independent, it is safe in atlas space — no seams, no drift, no second inference to disagree with the first. Rotate the model a full turn and nothing moves, because nothing is being generated while you look at it.

The one thing that cannot bake is the keyline. A contour's position depends on where the camera is, so it stays as geometry — two inverted hulls with per-vertex width jitter, so the line breathes like a marker instead of a stroke setting.

Building The Patient

The knight was a prompt — someone else's character, useful for proving the passes work. THE PATIENT is mine: a blindfolded sorceress who cannot cast anything, with a smug rubber-hose mascot floating beside her doing all the actual magic. The credit is going the wrong way and she cannot see well enough to argue.

She was designed backwards from the conversion. Every one of those decisions is about what survives image-to-3D, made before the mesh existed rather than discovered afterwards.

Why It Matters

The style lives in the asset, not the viewer. Open the GLB in Blender, drop it in a game engine, hand it to someone else — it still looks like my work. That is the difference between a rendering trick and a finished thing.

And the palette is six hex values. Swap them and the same mesh belongs to a different body of work, which is the part that makes this a system rather than one drawing.

The Part I'll Admit

Reference-image conditioning beat the fine-tuned adapter at the job the adapter was trained for. One prompt, three reference images, no training, 42 seconds. I don't have a tidy lesson about that. I spent real time and money training something whose whole purpose was solved better by describing what I wanted and showing three pictures.

The LoRA still earns its place for inventing new characters in my style at volume. Just not for keeping style alive across a conversion — which was the one thing I built it for.

Sketchbook PageINPUTPalette ExtractionSTAGE 1Reference CropSTAGE 1Mesh GenerationSTAGE 2UV UnwrapSTAGE 2Palette MappingSTAGE 3Inverted HullsSTAGE 3Live GLB ViewerOUTPUT
STAGE 3CORE

Palette Mapping

Every texel of the generated texture is remapped through the weighted ramp. The operation is per-texel and position-independent, so it is safe in atlas space — no seams, no drift, and no second inference to disagree with the first. This is where the style actually happens.

Input / Output
Stage 1 — Measurement
Stage 2 — Generation
Core — Surface Authoring
Stage 3 — Render-time

LIVE DEMO

BUILT WITH
AI / ML
NB
Nano Banana ProAI / ML
MS
Meshy.aiAI / ML
NP
NumPy / PILAI / ML
3D
3J
Three.js3D
GL
GLSL3D
GT
gltf-transform3D
Web
PW
PlaywrightWeb
GH
GitHub PagesWeb
// EOF — end of case study
↳ process finished · exit code 0
JUSTIN FINKELMAN
CHICAGO BASED · CREATIVE TECHNOLOGIST

Conversations

Four modes. Same agent. Pick one to see how the register shifts.

GL
Glyph
glyph mode · online
Today
Message
DEFAULT MODE

Glyph

TRIGGERS
Baseline — always on

The default register. Direct, observational, and slightly dry. Glyph knows your calendar, your projects, and what's still open. Short answers by default, longer only when asked.

Calendar says 2pm. Decide what matters.