Last time we stood at the edge of the future -- WebGPU, machine learning, headsets, cheap sensors -- and every single road led straight back to the same unglamorous place: you. When production gets trivial and everyone can flood the internet with a thousand pretty images at the press of a button, the pretty images stop being the point. The scarce, valuable thing becomes having something to say, a point of view, a voice. And I left you hanging on the obvious next question: okay Charlene, that's lovely, but how do you actually find the thing that's recognisably yours? So that's today. This is the episode about finding your creative voice -- the fingerprint that runs through everything you make.
I'll be honest, this is the episode I was most nervous to write, because "find your voice" is exactly the kind of phrase that sounds deep and means nothing. You've heard it a hundred times from people who never tell you how. So I'm not going to hand you a fortune cookie. I'm going to try to make voice concrete -- something you can actually see in the code, measure, nudge, and grow -- the same way we've made everything else in this series concrete. Allez, let me show you what I've figured out after years of staring at my own sketches and slowly realising they all secretly look like me.
Let's clear up the biggest confusion first, because it trips up everyone including me for years. Technique and vision are two completely different things. Technique is what you can do -- flow fields, shaders, particle systems, the whole toolbox we've been filling for 165 episodes. Vision is what you choose to do with it -- the ideas you keep circling, the feeling you're chasing, the reason a piece exists at all. Here's the distinction I wish someone had drawn for me on day one:
// technique = the tools in your hands. vision = why you pick them up.
function whatMakesAnArtist(person) {
const technique = person.thingsYouCanDo; // learnable, teachable, everywhere
const vision = person.thingsYouWantToSay; // yours alone, nobody can hand it to you
return {
technique,
vision,
truth: "technique is the cost of entry. vision is the whole game.",
};
}
console.log(whatMakesAnArtist({ thingsYouCanDo: ["shaders"], thingsYouWantToSay: [] }).truth);
// -> "technique is the cost of entry. vision is the whole game."
Read that truth line twice. When I started, I thought getting better meant learning more techniques -- one more algorithm, one more library, then surely I'd be good. But I met people who knew half of what I knew and made work that stopped you dead, and people who knew everything and made work you scrolled past without blinking. The difference was never technique. Technique is the cost of entry, and this whole series has been paying that cost for you. Voice is what you do once you're in the room.
Here's the part that surprised me most, and it's genuinly freeing: you don't build a voice from nothing, you discover one that's already there. Every choice you make leaks a little bit of you. Which colours you reach for, whether you like things dense or sparse, jagged or smooth, loud or quiet. You're making those choices constantly, mostly without noticing. Watch:
// every knob you turn without thinking is a fingerprint. you leak style constantly.
function styleFingerprint(choices) {
return {
density: choices.crowdedOrEmpty, // do you fill the frame or leave it breathe?
motion: choices.smoothOrJittery, // easing (ep16) or hard snaps?
palette: choices.colourFamily, // the same 3 colours keep coming back, right?
edges: choices.softOrSharp,
// you didn't decide these on purpose. that's exactly why they're YOURS.
};
}
const mine = styleFingerprint({
crowdedOrEmpty: "lots of breathing room",
smoothOrJittery: "smooth, always easing",
colourFamily: "warm dusty pastels",
softOrSharp: "soft edges",
});
Look at how none of those were decisions exactly -- they're defaults, the choices you fall into when you're not paying attention. That's the whole point. Your voice lives in your defaults. The exercise isn't to invent a personality; it's to catch yourself in the act, notice the choices you keep making, and then start making them on purpose. See where this is going? The voice was never missing. You just hadn't turned around and looked at it yet.
Now the most practical tool I know for shaping a voice, and it's the opposite of what beginners expect: constraints. When you can do anything, you make generic mush, because "anything" has no shape. The moment you tie your own hands -- three colours only, one shape, no curves, a fixed grid -- the work suddenly starts to look like something. Remember #genuary from the community episode, where a daily prompt gives everyone the same constraint? Same idea, but you can set the rules yourself:
// constraints don't limit your voice -- they GIVE it a shape. pick your handcuffs on purpose.
function personalConstraints() {
return {
palette: ["#e9c46a", "#f4a261", "#e76f51"], // only these. no cheating.
primitives: ["circle"], // one shape, explored deeply
motion: "easing only, never linear", // ep16 taught us why linear feels dead
rule: "always leave 40% of the frame empty",
};
}
// two artists given THESE exact rules still make different work -- but both look intentional.
const constraints = personalConstraints();
console.log(constraints.primitives); // -> ["circle"] (a whole career can live in one shape)
That "circle" line is not a joke. Vera Molnar, who we met last episode, built an entire legendary career mostly out of squares and a sliver of disorder. Bridget Riley did decades of work inside strict rules. The constraint isn't a cage -- it's the frame that makes the picture readable as yours. When I feel lost, I don't add options, I remove them. Give yourself a tiny box and go absurdly deep inside it, and I promise the work starts sounding like a person instead of a tech demo.
Every artist with a recognisable voice has a signature move -- one gesture that shows up again and again, the thing you could almost sign your name with. For Molnar it was that famous 1% of disorder we talked about last time. For a lot of generative artists it's a specific relationship between order and chaos. You find yours by noticing what you keep reaching for. Let me model the idea of a signature as a reusable function you apply to everything:
// a signature move is one gesture you apply across wildly different pieces.
function myDisorder(value, rng, i) {
// MY version: nudge everything toward a hand-drawn wobble. it's on every piece i make.
const wobble = (rng(i) - 0.5) * 0.08; // small, warm, imperfect -- ep164's Molnar lesson
return value + wobble;
}
// applied to positions, to colours, to timing -- same gesture, everywhere. that's a signature.
const wobbled = [10, 20, 30].map((v, i) => myDisorder(v, Math.random, i));
Notice the signature isn't a subject -- it's not "I draw cats". It's a way of handling whatever you draw. That wobble function could be applied to a landscape, a typographic piece, a data visualisation, and all three would feel like siblings. That's what a voice does: it survives the change of subject. When somebody can look at three totally different pieces and say "oh, those are all yours", it's almost never the topic that gave you away. It's the gesture underneath.
Nobody grows a voice in a sealed room. Every artist you admire is a stew of the artists they admired, remixed until it turned into something that felt like them. The trick is to steal from many, not one -- copy a single hero and you're a tribute act, but blend five heroes and the blend itself is original. Here's the recipe I actually use:
// don't copy one hero (that's imitation). blend many -- the BLEND is what's original.
function findYourBlend(influences) {
const singleSource = influences.length === 1;
if (singleSource) return "careful -- copying one person is imitation, not voice";
// take one thing you love from each, mix, and something new falls out
return influences.map((who) => who.theOneThingIStole);
}
console.log(findYourBlend([
{ name: "Molnar", theOneThingIStole: "controlled disorder" }, // ep164
{ name: "Riley", theOneThingIStole: "hypnotic repetition" },
{ name: "Hobbs", theOneThingIStole: "flow-field softness" },
]));
// -> ["controlled disorder", "hypnotic repetition", "flow-field softness"] -> your own soup
That array at the end is nobody's style in particular -- it's a soup you invented by choosing which spoonful to take from each pot. This is why studying other people's work isn't cheating and isn't a threat to your originality. The more you look, the more spoonfuls you collect, and the richer and stranger your own blend gets. Steal broadly, credit generously (like we said in the community episode), and let the mixing do the original work for you.
Let's get specific to what we do, because generative art has a funny wrinkle: the computer makes the final pixels, so people ask whether it can really carry a personal voice at all. It absolutely can, and it's worth seeing exactly where the "you" lives in a generative system. It's not in the output -- it's in every decision that shaped the system:
// the machine renders the pixels. but YOU authored every decision that shaped them.
function whereYouLiveInTheSystem(project) {
const yours = [
project.choseTheRules, // what the algorithm even does
project.tunedTheParameters, // the taste in the numbers -- ep163's "finishing"
project.pickedThePalette, // ep7
project.decidedWhatToKeep, // curation: which seeds you bless and which you bin
project.knewWhenToStop,
];
return yours.filter(Boolean).length >= 4
? "unmistakably authored -- the system is a self-portrait"
: "still a generic demo, keep pushing";
}
That decidedWhatToKeep line is the sneaky important one. Back in the seed-based episode (24) we made systems that spit out thousands of variations from different seeds. Which ones do you keep? That choice -- your taste acting as a filter -- is one of the purest expressions of voice there is. Two people can run the exact same algorithm and publish completely different collections, because they blessed different seeds. The generator is shared; the curation is yours alone. Your taste is the self-portrait.
Here's the honesty test I hold my own work up against, and it stings in a useful way. Ask of any piece: would this exist if I hadn't made it? Could anyone have made this, or only me? If the answer is "anyone could've", it's competent and forgettable. If it's "only I would've made this weird specific thing", you're onto your voice. Authenticity isn't a vibe, it's a filter:
// the authenticity test: could ANYONE have made this, or only you?
function authenticityCheck(piece) {
const genericScore = piece.looksLikeATrend + piece.chasingWhatsPopular;
const personalScore = piece.drawsFromYourLife + piece.onlyYouWouldCareAboutThis;
if (personalScore > genericScore) return "authentic -- this could only be yours";
return "competent but anonymous -- what would make it undeniably YOU?";
}
console.log(authenticityCheck({
looksLikeATrend: 0, chasingWhatsPopular: 0,
drawsFromYourLife: 1, onlyYouWouldCareAboutThis: 1,
}));
// -> "authentic -- this could only be yours"
The most authentic work almost always comes from something oddly specific to your life -- a place you grew up, a pattern you're obsessed with, a feeling you can't shake. When I stopped trying to make "impressive generative art" and started making pieces about things I actually cared about -- the light in Antwerp in November, the way crowds move -- the work got weirder and better at the same time. Chasing the trend makes you one of a thousand. Chasing your own strange obsession makes you the only one. That's not a coincidence, it's the whole mechanism.
So what's the process? It's almost boringly simple, and it's the daily-practice muscle from the last practice episode (163) pointed at a new target. You don't find your voice by thinking hard about it in the shower. You find it by making a big pile of work and then turning around and studying the pile for patterns you didn't plan:
// you don't THINK your way to a voice. you make a pile, then read the pile for patterns.
function findVoiceFromBody(sketches) {
const recurring = {};
for (const s of sketches) {
for (const trait of s.traits) {
recurring[trait] = (recurring[trait] || 0) + 1; // tally what keeps showing up
}
}
// the traits that appear again and again -- WITHOUT you planning them -- are your voice
return Object.entries(recurring)
.filter(([, count]) => count > sketches.length * 0.5)
.map(([trait]) => trait);
}
That filter -- traits showing up in more than half your work, unplanned -- is the closest thing to a voice detector I've got. Make thirty sketches over a month (the sketch-a-day habit from episode 163 is perfect for this), then lay them all out and squint. You'll be genuinly startled. There'll be a colour you didn't know you loved, a kind of motion you keep defaulting to, a density you always land on. That's not a coincidence pile -- that's a portrait. The voice was being recorded the whole time; you just have to develop the film.
To make that concrete, here's a tiny audit I run on my own body of work a couple of times a year. It's nothing clever -- just honest questions turned into a checklist, so I can't lie to myself:
// run this on your last 20 pieces. the answers ARE your voice, written down.
function voiceAudit(body) {
return {
colours: "what 3-5 colours keep reappearing?",
motion: "smooth or sharp? fast or slow? (ep16 easing choices)",
density: "do you crowd the frame or leave silence?",
subject: "what idea do you keep circling back to?",
feeling: "what mood does a stranger feel in 2 seconds?",
signature: "what one gesture is on almost everything?",
// if you can answer these clearly, you HAVE a voice. if not, make 20 more and re-run.
};
}
console.log(Object.keys(voiceAudit()).length); // -> 6 questions, brutally honest answers
Answer those six out loud and you'll know exactly where you stand. And if the answers come out vague and mushy -- that's not failure, it's a reading. It means you need more work in the pile before the pattern is legible. The audit doesn't judge you; it just tells you whether the film is developed yet. Re-run it every few months and watch the answers sharpen. That sharpening is the voice arriving.
One last warning, because it's the trap I fell into. Once you finally find a voice, there's a huge temptation to freeze it, to keep making the hit over and over because it works. Don't. A voice isn't a cage you build for yourself; it's a river that keeps moving while somehow staying recognisably the same water. Molnar was still evolving at ninety-nine:
// a voice is a river, not a statue. it stays recognisably YOU while it keeps moving.
function voiceOverTime(you, years) {
let voice = you.core; // the stubborn thing that never leaves
for (let y = 0; y < years; y++) {
voice = { ...voice, ...you.newInfluencesThisYear(y) }; // keep adding
}
// the CORE persists, the surface changes. frozen = dead, drifting = lost. this is the balance.
return voice;
}
See how the core survives every loop while the surface keeps updating? That's the balance. A voice that never changes gets stale and you start to bore yourself. A voice that changes completely every year was never really a voice, just fashion-chasing. The healthy path is a stubborn core -- your signature gesture, your obsessions -- carried forward while everything around it grows. Keep the thing that's undeniably you, and let it walk into new rooms. That's how you stay yourself for decades without repeating yourself to death.
So that's voice, as concrete as I know how to make it, and I hope the big relief landed: you're not missing a mysterious spark that other people were born with. The voice is already in your defaults, already being recorded in every sketch you make -- the only work is to turn around, read the pile, and start choosing on purpose. Make a lot, look back honestly, keep the strange stubborn core that's undeniably you, and let it grow. That's it. That's the whole secret nobody spells out.
And once you've got a voice worth protecting, a very practical worry shows up -- the one that quietly ends more creative-coding journeys than any technical wall ever does. How do you keep doing this for years without burning out, drying up, or coming to resent the thing you loved? How do you build a practice that lasts, that survives the flat weeks and the busy seasons and the days the well runs dry? That's where we head next time -- the long game. Merci for digging into this personal one with me, and go make something only you would make :-).
Sallukes! Thanks for reading.
X