# Stipple portraits

**URL:** <https://openrndr.discourse.group/t/stipple-portraits/569>\
**Category:** How to?\
**Created:** [June 11, 2023, 9:56am UTC](https://openrndr.discourse.group/t/stipple-portraits/569 "2023-06-11T09:56:21Z")\
**Posts on this page:** 11\
**Page:** 1

<div class="post-metadata">

**Author:** ![Tankian](https://avatars.discourse-cdn.com/v4/letter/t/49beb7/32.png) [@Tankian](https://openrndr.discourse.group/u/Tankian)\
**Post date:** [June 11, 2023, 9:56am UTC](https://openrndr.discourse.group/t/stipple-portraits/569/1 "2023-06-11T09:56:21Z")

</div>

Could you help me with creating a program that produces a similar effect as in the link, using the files provided by the author in the comment below the post?

[https://www.reddit.com/r/generative/comments/lbodjy/morphing\_stipple\_portraits/](https://www.reddit.com/r/generative/comments/lbodjy/morphing_stipple_portraits/)

---

<div class="post-metadata">

**Author:** ![abe](https://yyz2.discourse-cdn.com/free1/user_avatar/openrndr.discourse.group/abe/32/700_2.png) [@abe](https://openrndr.discourse.group/u/abe)\
**Post date:** [June 11, 2023, 10:03am UTC](https://openrndr.discourse.group/t/stipple-portraits/569/2 "2023-06-11T10:03:22Z")

</div>

Hi @Tankian! Welcome to the forum 🙂

Can you give some more details about at which point you are stuck? How far did you get?

Cheers!

---

<div class="post-metadata">

**Author:** ![Tankian](https://avatars.discourse-cdn.com/v4/letter/t/49beb7/32.png) [@Tankian](https://openrndr.discourse.group/u/Tankian)\
**Post date:** [June 11, 2023, 10:34am UTC](https://openrndr.discourse.group/t/stipple-portraits/569/3 "2023-06-11T10:34:07Z")

</div>

I’m having trouble finding websites with the relevant classes and packages.

---

<div class="post-metadata">

**Author:** ![Tankian](https://avatars.discourse-cdn.com/v4/letter/t/49beb7/32.png) [@Tankian](https://openrndr.discourse.group/u/Tankian)\
**Post date:** [June 11, 2023, 10:41am UTC](https://openrndr.discourse.group/t/stipple-portraits/569/4 "2023-06-11T10:41:44Z")

</div>

The code was created almost two years ago, so many things may already be outdated. I tried to recreate the conditions for this program by installing older versions of IntelliJ, Java, and the Kotlin compiler, but it didn’t help me. I’m not familiar with Kotlin. I thought that adding the `dots.kt` code to the project with `kdtree2` from the provided link would be enough to run the program.

---

<div class="post-metadata">

**Author:** ![abe](https://yyz2.discourse-cdn.com/free1/user_avatar/openrndr.discourse.group/abe/32/700_2.png) [@abe](https://openrndr.discourse.group/u/abe)\
**Post date:** [June 11, 2023, 10:48am UTC](https://openrndr.discourse.group/t/stipple-portraits/569/5 "2023-06-11T10:48:14Z")

</div>

Maybe we can ask the author 🙂 @Yann ?

---

<div class="post-metadata">

**Author:** ![Tankian](https://avatars.discourse-cdn.com/v4/letter/t/49beb7/32.png) [@Tankian](https://openrndr.discourse.group/u/Tankian)\
**Post date:** [June 11, 2023, 11:05am UTC](https://openrndr.discourse.group/t/stipple-portraits/569/6 "2023-06-11T11:05:08Z")

</div>

I searched for him on this forum by typing “ylegall” and “Yann Le Gall,” but I didn’t know his username. I’m not a programmer, I’m a sculptor. It’s also difficult for me to use the English language, but I managed to recreate an old program based on glslshader in TouchDesigner, even though I had no idea about it initially. That’s why, if possible, I would greatly appreciate your support. My main concern is whether the program can be run without much involvement from the artist, unless he himself expresses a desire to do so.

---

<div class="post-metadata">

**Author:** ![Tankian](https://avatars.discourse-cdn.com/v4/letter/t/49beb7/32.png) [@Tankian](https://openrndr.discourse.group/u/Tankian)\
**Post date:** [June 11, 2023, 11:20am UTC](https://openrndr.discourse.group/t/stipple-portraits/569/7 "2023-06-11T11:20:23Z")

</div>

In Seattle, it’s currently 4 AM, so it’s probably too early to contact him :).

---

<div class="post-metadata">

**Author:** ![abe](https://yyz2.discourse-cdn.com/free1/user_avatar/openrndr.discourse.group/abe/32/700_2.png) [@abe](https://openrndr.discourse.group/u/abe)\
**Post date:** [June 11, 2023, 11:22am UTC](https://openrndr.discourse.group/t/stipple-portraits/569/8 "2023-06-11T11:22:28Z")

</div>

Not being familiar with Kotlin, OPENRNDR, programming nor English sounds like quite a challenge!

Making the program easy to use involves work. Would you consider paying for that work?

What do you want to use this program for?

---

<div class="post-metadata">

**Author:** ![Tankian](https://avatars.discourse-cdn.com/v4/letter/t/49beb7/32.png) [@Tankian](https://openrndr.discourse.group/u/Tankian)\
**Post date:** [June 11, 2023, 11:39am UTC](https://openrndr.discourse.group/t/stipple-portraits/569/9 "2023-06-11T11:39:47Z")

</div>

I want to transform graphic projects into sculptures in the shape of a sphere. Converting the image into dots or circles is the perfect solution for me. The sphere would then resemble a miniature planetarium. This program is the only one that allows for the placement of circles without overlapping, making it possible to later recreate the pattern by drilling holes. By utilizing circle packing, it is the cleanest and most cohesive solution in line with the idea of a sphere. I would map the resulting image onto a 3D model of the sphere in a 3D software and then onto a physical object using four projectors and projection mapping technique. If this solution is not feasible for me, I will utilize the method from this link. [Packing Algorithms in Rhino + Grasshopper - YouTube](https://youtu.be/SSWudanJc7c)

---

<div class="post-metadata">

**Author:** ![Yann](https://avatars.discourse-cdn.com/v4/letter/y/bc79bd/32.png) [@Yann](https://openrndr.discourse.group/u/Yann)\
**Post date:** [June 11, 2023, 3:04pm UTC](https://openrndr.discourse.group/t/stipple-portraits/569/10 "2023-06-11T15:04:47Z")

</div>

as mentioned by @abe, the openRNDR APIs have evolved and it might take some work to make it run.

For example, now openRNDR has its own kdTree that should be used for neighbor query: [orx/KDTree.kt at master · openrndr/orx · GitHub](https://github.com/openrndr/orx/blob/master/orx-kdtree/src/main/kotlin/KDTree.kt)

I think the grasshopper example you shared is using a similar algorithm.

---

<div class="post-metadata">

**Author:** ![matsem](https://yyz2.discourse-cdn.com/free1/user_avatar/openrndr.discourse.group/matsem/32/729_2.png) [@matsem](https://openrndr.discourse.group/u/matsem)\
**Post date:** [June 22, 2024, 6:27pm UTC](https://openrndr.discourse.group/t/stipple-portraits/569/11 "2024-06-22T18:27:41Z")

</div>

I stumbled upon this thread recently, wondering if I can use such effect as a post-fx over some 3D stuff I’m currently working on, and I managed to port @Yann 's code for current OPENRNDR version. So far - just static image generation for now, but I’m looking to generate some videos from moving 3D art.

Here’s the Gist of current version, someone might find it useful: [Port of @ylegall stipple portraits · GitHub](https://gist.github.com/matejsemancik/14af506aa96402479ce94bba8cfe38f0)
