π #033 - Handwriting & Scripts
Two different approaches to cursive handwriting and a pen plotter tutorial update.
# Robot Handwriting
Amy has been posting updates on Xitter about her handwriting system, which she uses in her wonderfully curious generative art system (shown above).
It's been fun watching it develop and the tools she's been building to help manage it all. Amy posted two videos on Xitter that show part of the process.
https://twitter.com/amygoodchild/status/1779921556501590414
https://twitter.com/amygoodchild/status/1780203138118524956
I have no idea what Substack will do with those links, so here's a screenshot, too. This means you may see images one, two, or zero times, depending on goodness knows what.
We're doing similar things with handwriting and tools, but part of our approach that's very different is that Amy is aiming to get the code for her cursive handwriting to be as small as possible, using all sorts of neat tricks. According to her blog post: https://www.amygoodchild.com/blog/generating-the-alphabet, the file size for all the font stuff is around 9.7kb, probably a couple of kb more now.
Which is small enough to be used in online generative art projects and even put on the blockchain. This is done by having as few control points as possible for each letter, then using code to "inflate" them to something smoother and more usable, with other bits of code to apply effects. Amy explains it better in the blog post, which you should totally read.
Meanwhile, my approach is to have as much raw data as possible and then figure out what the fuck to do with it later. Which is half a joke and half true. This is what my 'be' letter pair looks like.
This shows the result of six variations of me writing 'be' onto an eInk tablet and then pulling in all the data, around 600 to 1100 x,y points per joined-up letter.
I already have eight variations of each uppercase and lowercase letter and punctuation mark, which totals a 24.7Mb .json file.
I then wrote out every lowercase letter joined to every other lowercase letter six times, so 'aa', 'ab', 'ac' ... 'zy', 'zz' or 26 * 26 * 6 = 4,056 handwritten letter pairs.
The .json file for those is a whopping 367Mb!
I'm working on the theory that if I have the word "ages", I'll grab the letter pairs; 'ag', 'ge' & 'es', start with the 'ag' and halfway through the 'g' transition from the ending 'g' of 'ag', into the starting 'g' of 'ge', then blend from the ending 'e' to the starting of 'es' which finish the word. Which should give me one continuous line.
This theory is currently untested, but I'm going with the hunch that it's 1) possible and 2) "just maths."
Anyway, with around 400Mb of .json data, this will not be bundled into any generative art that runs online in the browser anytime soon. Which I'm fine with. For a start, I'm not sure I want to put the ability to generate my handwriting onto the internet in a Javascript file with supporting code, and second, any artwork I'm going to make with it is something that runs offline and spits out an SVG for plotting or a PNG for printing.
TheΒ otherΒ reason I'm taking this brute-force approach is that I'd love to use machine learning to generate someone's specific handwriting from samples rather than generic "here's some AI" handwriting. To do that, I need some good, clean source data (the boring part of machine learning, cleaning up the input). I need somethingΒ knownΒ I can measure and score outputs against.
So, hopefully, I will only have to go through this long-winded process once.
Anyway, I like the balance in approaches Amy and I are taking: Amy trying to have as little data as possible and "inflating" it up to cursive writing, and me starting with as much data as possible to then try and shrink it down later.
# 256 Kill-Screen Analogue
To mess around with my (not joined up) handwriting a bit, I took my Feral File project 256 Kill-Screen (which I swore I wrote about here previously, but apparently not), which was based on old 8-bit fonts, BBC Micro, fwiw, and replaced them with my own handwriting.
Using just the non-joined version of my handwriting is small enough to run stuff in real time in the browser.
I took that output and threw it at the pen plotter as a quick test.
Now, I know "turning an image into letters" is a little obvious, as would "Here's a picture of David Bowie, 'handwritten' with all his lyrics" (bonus points for using his handwriting at some point).
But I mean, it's one of those things we have to go through at some point.
Adapting 256 Kill-Screen was easy because I have the code to hand, so when I'm not writing scripts for YouTube videos (see next section), I'll give that image-to-handwriting code a go.
# YouTube Pen Plotting Tutorial update
Somehow, my "I have two weeks clear to write the first set of scripts" didn't turn out as clear as I'd hoped.
The tutorials are mainly aimed at two groups of people: artists who want to start using them but don't have any coding experience and coders who know how to code but aren't sure where to start with drawing machines.
I've split the tutorials into four "chapters." The first chapter comprises several videos that overview the machines, pen, paper, and ink, connecting to it and creating SVG files.
As that chapter is enough for the coders to get started, I want those videos to go out in one go. This means having them all scripted, shot, edited, and uploaded and then updating the accompanying website with the videos, resources, code examples, and so on.
After that I'm more happy to release the rest of the drawing machine based coding tutorials one at a time until they're all done.
This is my compromise between wanting to launch the whole thing in one go (which was the original plan, but it obviously didn't happen because it was so overwhelming) and releasing all the videos one at a time. This would make people tuning into the first one have to wait as they were released, and I thought that'd be too frustrating.
These are the topics for the first chapter:
1.1.0 - Introduction
1.1.1 - Types of pen plotter artists
1.2.0 - Intro to the drawing machine
1.2.1 - How to talk to the drawing machine
1.3.0 - Pens and Paper (and ink)
1.3.1 - Anatomy of a piece of paper
1.4.0 - What is an SVG file?
1.4.1 - Writing a calibration file
1.4.2 - Bonus: Writing an SVG file by hand + dice
1.4.3 - Bonus: Writing an SVG file with AI, badly
1.5.0 - A note about hidden line removal, optimisation, fills and handwriting
So far, I've written draft scripts for the first six (1.1.0 - 1.3.1), with another five to go. Luckily, the second half is shorter and quicker than the first half.
Then I'll go over them again to turn them into final versions, create code examples and slides I need to use, andΒ thenΒ shoot the videos, which I don't see happening until the start of May.
If there's one lesson I haven't learnt yet, it's that everything takes way too long.
# THE END
And that's our catch-up, mainly me either writing or avoiding writing scripts, depending on my mood.
I haven't been running any of the monthly "profit/loss" reports that I used to.
Mainly because selling NFT projects creates a very spiky income, and I felt that it was not much use to anyone else, in the way the older "Here's how many pen plots I sold, here's how many prints, this is how my shop is going, this is my income and my expenses" was for other artist wanting to do a similar.
If IΒ wereΒ going to make some report, it'd be; looking at the business account, I'm set to properly run out of money next Thursday, the 25th.
For boring tax reasons, IΒ wasΒ hoping to run outΒ thisΒ week, but I didn't buy enough postage stamps in time.
But I was also hoping to have finished selling the studio before then too, which is now looking to happen the week or twoΒ afterΒ run-out-of-money-day πΈ
βοΈ Which is honestly pretty terrible timing.
On the plus side, YouTube emailed me to let me know I've earned $60, which they've paid me. So, at least there's that!
Right, time to go!
I love you all,
Dan
β€οΈ
P.S. You'll receive my next newsletter around May 2nd.
P.P.S. Hereβs some lovely music from my friend Laura to take you into the weekend.
And the always reliable Book Club Radio.