AlteredQualia
alteredqualia.com · Personal blog · on HN since 2008
A developer's personal site with WebGL, canvas, and CSS filter demos, including a JavaScript version of the Mona Lisa evolution experiment.
What HN saysHN links it for the Mona Lisa image-evolution demo, which one commenter calls one of their favorite web things ever made.
55HN people shared it
29linked it in comments
36stories submitted
808story points
1 year agolast shared
2008people per year2026
Most-shared posts
- 1Evolution of Mona Lisa in JavaScript & Canvas13 people · 85 points · first shared 2008 · 40 comments on HN
- 2Getting started with CSS custom filters4 people · 48 points · first shared 2012 · 14 comments on HN
- 3Eyes Gaze4 people · 18 points · first shared 2017 · 1 comments on HN
- 4WebGL Showcase4 people · 1 points · first shared 2011 · discussion on HN
- 5Rendering Head in WebGL3 people · 238 points · first shared 2014 · 77 comments on HN
- 6Eyes Gaze Warping by DeepWarp3 people · 1 points · first shared 2018 · discussion on HN
- 7Realistic Skin Rendering in WebGL2 people · 270 points · first shared 2011 · 54 comments on HN
- 8Rendering Cars - WebGL dynamic cube reflection demo2 people · 15 points · first shared 2011 · discussion on HN
- 9Tilt shift 3d terrain WebGL demo2 people · 9 points · first shared 2011 · 1 comments on HN
- 10Show HN: CubeOut - remake of classic game Blockout in HTML 52 people · 3 points · first shared 2010 · 1 comments on HN
- 11Eyes gaze warping with renaissance paintings2 people · 2 points · first shared 2018 · discussion on HN
- 12Spectacular night city by HTML5 webgl2 people · 2 points · first shared 2013 · discussion on HN
- 13Three.js raytracer2 people · 1 points · first shared 2014 · discussion on HN
- 14Show HN: CanvasMol molecule viewer (JS + canvas demo)1 people · 72 points · first shared 2010 · 11 comments on HN
- 153d demo in 140char of javascript couch respect1 people · 7 points · first shared 2011 · discussion on HN
What HN people wrote when they linked it
babak_ap · 2016-09-21
Worth pointing out:
https://rogeralsing.com/2008/12/07/genetic-programming-evolution-of-mo…
And also a JavaScript version:
http://alteredqualia.com/visualization/evolve/
web007 · 2016-09-20
Looks like an implementation of http://alteredqualia.com/visualization/evolve/ - one of my favorite web-things ever made.
Edit: the "inspiration" for this is the same thing as Altered Qualia, Roger Johansson's post about genetic image evolution https://rogeralsing.com/2008/12/07/genetic-programming-evolution-of-mo…
gluelogic · 2015-09-18
Pygame is very fun to work with and it's so easy. I stopped using it for game development (switched to web-based HTML5 stuff) but it is still an amazing wrapper over SDL. I recently used it to write a quick version of an image evolver. (an example of what I'm talking about: http://alteredqualia.com/visualization/evolve/)
If I ever want to bust out a quick graphical/audio application I use Pygame.
mrdoob2 · 2015-01-26
Hehe! Thanks for that. But, to be fair, that last example was done by http://alteredqualia.com/.
flohofwoe · 2014-10-24
It depends I think. There isn't any built-in reason why WebGL code would drain batteries faster then a similar native-code demo. WebGL has to do a bit more validation on the CPU which may contribute a bit. But other then that most demos should be very light on the CPU side, so the difference between JS and native code wouldn't be an issue. However, many WebGL demos move a lot of work to the GPU (especially the shadertoy demos, which render the entire scene in a single fullscreen quad and have absurdly complex pixel shaders), epecially in fullscreen mode these would suck your battery dry very quickly.
On my fairly old MBP, all fullscreen 3D apps (also native games) kick the fan into high gear immediately and the bottom gets warm very quickly, while most "reasonable" WebGL demos don't have this effect (e.g. some of the lighter ones from here: http://alteredqualia.com/)
taspeotis · 2014-03-30
There's quite a few good WebGL demonstrations to choose from on the home page [1].
[1] http://alteredqualia.com/
bd · 2009-03-23
Here is a pie chart with the current data from the poll:
http://chart.apis.google.com/chart?chs=350x170&chd=t:193,29,38,29,…
Or if you want to see realtime data, you can use following bookmarklet to embed chart directly into this page:
----
javascript:function loadScript(scriptURL){var s=document.createElement('SCRIPT');s.setAttribute('language','JavaScript'); s.setAttribute('src',scriptURL);document.body.appendChild(s);}loadScript('http://alteredqualia.com/visualization/hn/hn_poll_graph.js');
----
stefs · 2016-11-16
i write an app like this about once a year (usually a java cmdline implementation).
to my embarrassment, i never got it completely right. the last instalment even provided statistics that could be used to compare the effectiveness of different strategies and parameters.
the last recent one featured:
* classic genetic algorithm (population size etc) with different methods for selection and crossover
* dumb hill climbing
* the "additive" method described in OP's app
* switching of methods at certain points (i.e. switch to hill climbing if the genetic algorithm didn't improve things for a certain time)
* bitmap and svg output
* statistics output that can be plotted with a plotting library so you can compare the effectiveness of different strategies
* multithreading incl. tests to find out the sweet spot for the number of concurrent threads
~~~
i don't know why but i never really reached the point where my results were of a comparable quality to roger alsings mona lisa or even alteredQualia's image evolver (http://alteredqualia.com/visualization/evolve/).
well, soon it's time for the next attempt.
one interesting realisation: my desktop computer is about 10x as fast as the raspberry pi 3 for this kind of CPU intensive work.
darkFunction · 2014-11-06
> I see you take the two most fittest as is, maybe this could be useful for picking the second one?
Yep, we take the two most fittest unchanged, and breed the rest randomly along a non-uniform distribution tending towards the top.
> Also, when the Mona Lisa thing was posted on HN, someone suggested marking areas of the target image as "more important", to maybe make facial features etc. more recognizable.
This is a really good idea and would definitely make a difference. In my penguin example, with too few polys, sometimes we reach a local maxima before the eyes (small details) look any good. I combatted this somewhat by encouraging new polys to be (a) small and (b) regular. But I like the idea of a more guided approach.
There's an awesome javascript example you might find helpful: http://alteredqualia.com/visualization/evolve/
Edit: Your images look amazing. How do you make the vector shapes?
pjmlp · 2025-10-11
There is, CSS shaders, or Project Houdini.
- https://alteredqualia.com/css-shaders/article/
- https://developer.mozilla.org/en-US/docs/Web/API/Houdini_APIs
tyingq · 2021-04-02
Not mouse warping, but I find this demo much scarier: https://alteredqualia.com/xg/examples/gaze_dolores.html
pantelisk · 2020-12-20
Where have I seen this before? Oh yes
https://alteredqualia.com/visualization/evolve/ (from 2008)
(From the person that wrote the webgl renderer for three.js)
Press start and you can see the algorithm at work, and how each shape is added randomly, score is computed, then the process repeats again
Bjartr · 2018-05-31
Actually, CSS shaders are a thing, but can't access DOM content pixels for exactly that reason.
http://alteredqualia.com/css-shaders/article/
AdamTReineke · 2018-05-15
I doubt they're doing that, but it can be done realtime. Here's an example that runs in your browser, just move your mouse around and her eyes track it. http://alteredqualia.com/xg/examples/gaze_dolores.html
[Edit: Disclaimer, I work at MS but not on Surface. I also don't know if there is post-processing applied to the video I linked, so maybe it can't be done realtime.]
wgx · 2016-11-15
Here's a JS version from (at least) a few years ago that's good fun to play with:
http://alteredqualia.com/visualization/evolve/
Retr0spectrum · 2016-05-30
There's another cool WebGL simplex demo here: http://alteredqualia.com/three/examples/webgl_terrain_dynamic.html
daviding · 2015-06-07
I really enjoy these, and had this bookmarked. A nice example here:
http://alteredqualia.com/three/examples/webgl_city.html
Holds up very well and looks very impressive (plus the source is uncompressed and interesting).
bhouston · 2015-03-12
It isn't that photorealistic. :( I much prefer these two: http://alteredqualia.com/xg/examples/deferred_skin.html http://alteredqualia.com/xg/examples/deferred_skin_eyes.html
But it does work in WebVR. :)
Scaevolus · 2014-12-06
Here's another Javascript version http://alteredqualia.com/visualization/evolve/
callumprentice · 2014-08-06
http://alteredqualia.com/xg/examples/deferred_skin.html
Maybe not completely realistic but getting pretty good, especially in a browser.
idoco · 2014-03-30
This skin layer image is so creepy...
http://alteredqualia.com/xg/examples/models/ctm/head/diffuse2k2.jpg
DanielRibeiro · 2013-05-05
Reminded me of this previous submission[1]:
http://alteredqualia.com/visualization/evolve/
[1] comments: https://news.ycombinator.com/item?id=392036
mcpoulet · 2013-01-09
Last august there was this other WebGL animation with Doom 3 characters : http://alteredqualia.com/three/examples/webgl_animation_skinning_doom3…
nwh · 2013-01-05
Take it further.
http://alteredqualia.com/visualization/evolve/
nemo1618 · 2012-12-12
Here's a similar algorithm you can play around with, implemented in Javascript + Canvas: http://alteredqualia.com/visualization/evolve/
HN post here: http://news.ycombinator.com/item?id=392036
kandalf · 2012-07-20
Very cool. Reminds me of:
http://alteredqualia.com/visualization/evolve/
http://news.ycombinator.com/item?id=392036
simonw · 2011-09-07
Here's the texture it uses (just from viewing source) - kind of interesting: http://alteredqualia.com/three/examples/obj/leeperrysmith/Map-COL.jpg
tzury · 2011-07-15
lloeki · 2012-11-30
Agreed, canvas works well now, but WebGL is younger than canvas, and this gives a hint at what WebGL will look like tomorrow.
What's more today the first cause of WebGL not working lies more in the graphics card periphery. OpenGL drivers on Windows are often an aftertought given DirectX prevalence, and on Linux some drivers are simply unstable with 3D acceleration, regardless of WebGL. Besides, short of software fallbacks like llvm-pipe or OSX, you can't invent features not supported by the card. Onve overriden[2] WebGL actually works[0][1] well on my embedded HD2000, but bugs in the driver make the whole thing randomly unstable, hence it is blacklisted by browsers (chrome://gpu even lists and links to bug reports, and lists Flash Stage3D as blacklisted too).
As for number counting, while the number of people running into WebGL problems exists, it has been drastically reduced since a year ago, when the number of people running into Flash problems for years, and is not shrinking.
ALso, there's not just graphics on X-Type, but correctly timed HTML5 audio too.
[0]: http://madebyevan.com/webgl-water/
[1]: http://alteredqualia.com/three/examples/webgl_cars.html
[2]: "Override software rendering list" in chrome://flags