A blog prob­a­bly of inter­est only to nerds by John F Mor­ton.

Ink of the day: MIXING… 

SuperGeekery: A blog probably of interest only to nerds by John F Morton.

Why the Images on My Blog Look Like That

▷ Audio edition

The narration of this post was created with Bespoken plugin for Craft CMS.

Every once in a while, some­one mes­sages me to point out that the pho­tos on my blog look a lit­tle bro­ken. They are look­ing out for me, and I appre­ci­ate every sin­gle one of those mes­sages, even when the answer is no, I did that on pur­pose.”

The dots, the col­ors bleed­ing into each oth­er, the way the images soft­en when they first load. They think maybe my Craft tem­plates are mis­fir­ing, or my image trans­forms have drift­ed off the rails.

They haven’t. That weird look was a choice. Not nec­es­sar­i­ly a good one — but this is where I exper­i­ment, and I’m fine with that.

The dots come from a web com­po­nent I built called Some Shade, because under the hood it is a WebGL shad­er. It is a cus­tom ele­ment you can drop into any HTML page. Load a pho­to, pass it through the shad­er, and out comes a CMYK halftone, a duo­tone, an ear­ly Tech­ni­col­or two-strip, or a dot grid. There’s a live play­ground if you’d like to turn the knobs your­self.

I want to talk about why it exists at all, because the why is more inter­est­ing to me than the code behind it.

Old habits

I spent a chunk of my ear­ly career as an art direc­tor involved in print pro­duc­tion, back when halftone” was a thing you had to think about at the image­set­ter, not a thing you faked in code. That dot pat­tern is just inter­est­ing to me. I love how it breaks an image into some­thing the eye still reads as a pho­to­graph, only assem­bled out of parts you can count.

So a CMYK halftone was the first effect I built. Four screens, four angles, four chan­nels. The com­po­nen­t’s default set­tings use the clas­sic print angles: 15 degrees for cyan, 75 degrees for magen­ta, 0 degrees for yel­low, and 45 degrees for black. These val­ues are not there because I’m being clever. They are the his­tor­i­cal­ly cor­rect angles to use to avoid a moiré pat­tern when repro­duc­ing a halftone image. 

My com­po­nent some­times pro­duces the pat­tern because you’re see­ing a screen instead of a fixed-sized print­ed piece of paper. That’s fine with me. Vis­it the image play­ground exam­ple where I’ve altered the magen­ta chan­nel’s angle and then change it more your­self to see the moiré pat­tern change.

The Technicolor sidequest

The effect I’m fond­est of is the two-strip Tech­ni­col­or one. That came direct­ly from watch­ing old footage of The King of Jazz (1930) and get­ting hooked on what ear­ly col­or repro­duc­tion looked like when the medi­um could only do two chan­nels. Warm and cool, no blue. Skin tones go salmon-coral. Grass turns the strange yel­low-green that only exists in those reels. There is a real artis­tic deci­sion behind every shot in the movie, because the medi­um itself is forc­ing your hand. If you want to explore the his­to­ry of the process, watch The Two-Col­or Process on YouTube.

Re-cre­at­ing that as a shad­er meant build­ing a halftone for each ink col­or and let­ting you pick the col­ors. It is a tiny love let­ter to a con­straint I find beau­ti­ful. 

There’s also a tech­ni­cal wrin­kle worth men­tion­ing. Halftone print­ing works in sub­trac­tive col­or. Inks absorb light. While a screen works in addi­tive col­or, where light is emit­ted direct­ly. Mar­ry­ing a two-strip Tech­ni­col­or look with a halftone grid means bridg­ing those two sys­tems, and the result is some­thing I haven’t seen done before. So it’s an exper­i­ment in mul­ti­ple ways.

Why is it a web component?

I want­ed this to be use­ful out­side of SuperGeek­ery. Once the web com­po­nent is reg­is­tered, I can use it here in Craft in a Twig tem­plate, in a React play­ground, or in a sta­t­ic HTML page. No frame­work depen­den­cy, no build pipeline — just a stan­dard JavaScript import to drop it in. Lit does the heavy lift­ing on the ren­der­ing side. The rest is plain DOM. It feels like the right shape for a portable visu­al effect.

Why is this weird thing on my blog?

SuperGeek­ery is my pub­lic play­ground. It’s where I take ideas that are not nec­es­sar­i­ly good and let them run loose on a live web­site that real peo­ple see. The pho­tos on my site are not run through a make-this-look-nice” pipeline. They are run through an in-progress exper­i­ment that I keep tweak­ing. Recent­ly, I switched the effect to a dot-grid effect and quick­ly decid­ed the halftone looked bet­ter, and switched it back. Some­times I bump a para­me­ter, and the images look worse for a day until I notice. I may have removed the image exper­i­ment entire­ly from my site by the time you are read­ing this, but this will still be a play­ground for pos­si­bly weird ideas.

If the only places I shipped code were client work and oth­er peo­ple’s prod­ucts, I would only ever build the safe ver­sion of every idea. Halftones on a blog are not some­thing any­one is ask­ing for. They make peo­ple ask if my CSS is bro­ken. (Some­times the cor­rect answer to that ques­tion is yes!) They are also mine, and they are on a site I own, and the worst-case down­side is that I look a lit­tle odd for a while.

If you’re a devel­op­er, do you have a place like this? A per­son­al site, a side project, or a lit­tle sub­do­main where you let your­self try things that would­n’t sur­vive a stake­hold­er review.” If you don’t have one, I’d encour­age you to make one — not because you need to ship some­thing impor­tant on it, but because you need some­where to ship some­thing strange, unnec­es­sary, or stu­pid.

That’s the whole pitch. Using odd-look­ing images on my site is my cur­rent strange thing. The thing after this one will be some­thing else, hope­ful­ly just as eso­teric and strange. The site is the play­ground. The play­ground is the point.

What weird thing are you run­ning on your own site right now? I want to know.