Lecturer in Computational Arts at Goldsmiths, University of London

Joined August 2009
1,371 Photos and videos
Pinned Tweet
sites.harvard.edu/instrument… I'm thrilled that I'll be presenting my final doctoral project at @Harvard next week at the "Instruments, Interfaces, Infrastructures: An Interdisciplinary Conference on Musical Media" from May 11-13, 2023.

254
patrick hartono retweeted
Apr 17
Really wanted to try the three.js challenge of the day ! 🌍 But only using #glsl Full raymarch, procedural biomes and animated clouds.
Today's challenge 💪
13
21
331
29,254
patrick hartono retweeted
7 Jul 2025
Update: reached a milestone of 10 tutorials published on "fun with computer vision dot com" 🪬 - 185 customers - $3.9k revenue - >1 million views it's been 21 days since I launched this project, and I'm grateful for your incredible support and kindness 💗 thank you to @threejs and mediapipe for the magic behind these computer vision / augmented reality experiments this project has been incredibly fun and I have lots more I want to create more experiments - demos - tutorials - code, coming soon to a tweet near you :]
22 Jun 2025
it's day 6 of sharing code tutorials for my computer vision projects "fun with computer vision dot com" 🪬 thank you to everyone for the incredible support on my launch we're up to 126 customers now next steps: > "Floor is Lava" code tutorial will be released this week > making more video content and cross-sharing on yt / tt / ig (thank you @jackfriks for the inspiration to post widely and post often) > creating more structure and engagement in our discord server
52
101
1,213
239,085
patrick hartono retweeted
5
10
140
3,139
patrick hartono retweeted
4 Mar 2025
"Event Horizon" in one equation
25 Feb 2025
22
134
1,894
283,357
patrick hartono retweeted
6 Mar 2025
Blackhole in 350 characters of #GLSL: vec2 p=(FC.xy*2.-r)/r.y/.7,d=vec2(-1,1),c=p*mat2(1,1,d/(.1 5./dot(5.*p-d,5.*p-d))),v=c;v*=mat2(cos(log(length(v)) t*.2 vec4(0,33,11,0)))*5.;for(float i;i <9.;o =sin(v.xyyx) 1.)v =.7*sin(v.yx*i t)/i .5;o=1.-exp(-exp(c.x*vec4(.6,-.4,-1,0))/o/(.1 .1*pow(length(sin(v/.3)*.2 c*vec2(1,2))-1.,2.))/(1. 7.*exp(.3*c.y-dot(c,c)))/(.03 abs(length(p)-.7))*.2);
60
210
2,219
82,845
patrick hartono retweeted
15 Feb 2025
a=(x,y,o=mag(k=x/4-12.5,e=y/9)/9)=>point((q=x/3 99 3/k*sin(y) k*(1 cos(y)/3 sin(e o*4-t*2)))*cos(c=o/5 e/4-t/8) 200,(q 49)*sin(c)*cos(c)-q/3 30*o 220) t=0,draw=$=>{t||createCanvas(w=400,w);background(6).stroke(w,46);for(t =PI/90,i=2e4;i--;)a(i0,i/350)}// #つぶやきProcessing
53
400
3,189
123,116
patrick hartono retweeted
#つぶやきGLSL #11am10pm float i,e,R,s;vec3 q,p,d=vec3(FC.xy/r vec2(-.5,1.4),2);for(q.zy--;i <119.;){o.rgb =.027-hsv(.6,p.y,.02);s=.9,p=q =d*e*R*.04;p=vec3(log2(R=length(p))-t*.5,exp(-p.z/R),atan(p.y,p.x)-t*.5);for(e=--p.y;s<3e2;s =s)e =.09-abs(dot(sin(p.zxy*s),cos(p*s))/s*.25);}
2
33
248
11,504
patrick hartono retweeted
7 Feb 2025
f=0,draw=o=>{for(f||createCanvas(W=400,W),background(P=PI,d=200),N=noise,a=-P;a<P;a =P/16)for(fill(W,3),bezier(d,Y=150 9*cos(9*f),d-9*a,150,d-a*(9*sin(9*f) 9),d,d,Y),i=1;i>0;i-=.01)stroke(W,d-i*d),point((N(i-f,f/3,a)-P/8)*i*W d,N(f/2,i-f,a)*i*W Y 9);f =.003};//#つぶやきProcessing
6
57
368
11,995
patrick hartono retweeted
Understanding GPU bottlenecks is easy with a visualisation 👨🏻‍🍳
25
379
3,307
324,308
patrick hartono retweeted
2 Feb 2025
a=(x,y,k=x/8-12.5,d=cos(k/2) sin(y/3)-.5)=>point((q=x/4 60 d*k*(1 cos(d*4-t*2 y/14)))*.7*cos(c=y*d/169-t/8 d/9) 200 60*sin(t*3/32 c/4),(q 59)*.7*sin(c) 200) t=0,draw=$=>{t||createCanvas(w=400,w);background(0).stroke(w,36);for(t =PI/30,i=4e4;i--;)a(i 0,i/400)}#つぶやきProcessing
3
59
388
20,648
patrick hartono retweeted
22 Jan 2025
Going recursive. Interaction remains the same.
57
183
2,293
110,946
patrick hartono retweeted
#genuary2025 #genuary10 Day 10: "only use TAU in your code" I cheated by deriving other numbers, like int(TAU) = 6, int(sqrt(TAU)) = 2, etc.
38
314
2,919
78,353
patrick hartono retweeted
// Any three (non colinear) points define a circle // { .xy=center, .z=radius } vec3 getCircle( vec2 a, vec2 b, vec2 c ) { vec2 ba = b-a, cb = c-b, ac = a-c; float de = ba.x*cb.y-ba.y*cb.x; // zero if colinear vec2 ce = 0.5*(a b vec2(ba.y,-ba.x)*dot(ac,cb)/de); return vec3( ce, length(a-ce) ); }
22
80
1,251
73,357
patrick hartono retweeted
3 Jan 2025
f=0,draw=r=>{for(f||createCanvas(W=400,W),background(0),N=noise,translate(d=200,d),a=0;a<TAU;a =PI/64)for(rotate(PI/64),i=1;i>0;i-=.002)x=N(I=i-f,f/3,a)*i*W,y=N(f/2,I,a)*i*W,stroke(W,d-i*d),point(x,y);f =.005};//#つぶやきProcessing #generativeart #p5js
6
60
392
9,855
patrick hartono retweeted
4 Jan 2025
a=(x,y,d=5*cos(o=mag(k=x/8-12.5,e=y/8-12.5)/12*cos(sin(k/2)*cos(e/2))))=> point((x d*k*(sin(d*2 t) sin(y*o*o)/9))/1.5 133,(y/3-d*40 19*cos(d t))*1.5 300) t=0,draw=$=>{t||createCanvas(w=400,w);background(6,96).stroke(w,46);for(t =PI/90,i=4e4;i--;)a(i 0,i/200)}#つぶやきProcessing
28
317
1,906
117,129
patrick hartono retweeted
30 Dec 2024
//#Processing float t; void setup(){ size(800,800); } void draw(){ float i,j; background(#F0E0D0); stroke(0,99);noFill(); for(j=-1;j<1;j =.1){ beginShape(); for(i=-PI;i<=PI;i =PI/100)a(i,j); endShape(); } for(i=-PI;i<PI;i =PI/100){ beginShape(); for(j=-1;j<1;j =.1)a(i,j); //cont.
3
34
260
6,293
patrick hartono retweeted
29 Dec 2024
a=(x,y,o=mag(k=x/4-12.5,e=y/9)/9)=>point((q=x 99 cos(9/k) o*k*(cos(e*9)/3 cos(y/9)/.7)*sin(o*4-t))*.7*sin(c=o*e/30-t/8) 200,200 y/9*cos(c*4-t/2)-q/2*cos(c)) t=0,draw=$=>{t||createCanvas(w=400,w);background(6).stroke(w,46);for(t =PI/60,i=3e4;i--;)a(i0,i/150)}#つぶやきProcessing
46
428
3,094
147,313
patrick hartono retweeted
23 Dec 2024
Today I learned the city of Tokyo released point cloud data of the entire city for free for anyone to download 👀

442
4,382
55,067
3,242,663
patrick hartono retweeted
16 Dec 2024
f=0,draw=o=>{for(f||createCanvas(W=400,W),background(0),stroke(W),Y=250;Y>150;Y-=2)for(j=0;j<120;j )for(i=0;i<TAU;i =PI/2)stroke(2*j),n=noise(i,Y,f/666)-.5,x=sin(i*n*12)*j 200,F=99*cos((j/9-f)/9),y=cos(i*n*12)*j/2 Y F,point(x,y);f =.5};//#つぶやきProcessing
3
28
180
4,944