ASCII Clouds

(caidan.dev)

293 points by majkinetor14 hours ago

39 comments

  • madethemcry5 hours ago
    That is so beautiful. The underlying algorithm is perlin noise (see <a href="https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Perlin_noise" rel="nofollow">https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Perlin_noise</a>) and it&#x27;s over 40 years old!<p>It&#x27;s such a fabulous tool as the generated images can be used for effects like glass&#x2F;ice displacements, cheap water-like effects, but you can also generate terrains from it or just cool visual effects that benefit from random patterns. The core property to me is that it feels very organic&#x2F;natural.<p>This was such a common tool in Flash AS3 back in the days to create stunning effects, games and such. I&#x27;m not active in building visual stuff like that anymore but I bet it&#x27;s still very common in this field, because why not?
    • evilturnip2 hours ago
      I think it&#x27;s technically Simplex noise, but yes also developed by Perlin.
    • cess113 hours ago
      P5JS makes it very easy to start playing around with.<p><a href="https:&#x2F;&#x2F;p5js.org&#x2F;reference&#x2F;p5&#x2F;noise&#x2F;" rel="nofollow">https:&#x2F;&#x2F;p5js.org&#x2F;reference&#x2F;p5&#x2F;noise&#x2F;</a>
  • greggman6513 hours ago
    maybe there is more going on here but it&#x27;s relatively easy to make a text post processing shader and apply it to anything, 3d scene, a video, etc...<p><a href="https:&#x2F;&#x2F;post-processing.tresjs.org&#x2F;guide&#x2F;pmndrs&#x2F;ascii" rel="nofollow">https:&#x2F;&#x2F;post-processing.tresjs.org&#x2F;guide&#x2F;pmndrs&#x2F;ascii</a><p><a href="https:&#x2F;&#x2F;forum.babylonjs.com&#x2F;t&#x2F;ascii-shader-using-glsl-postprocessing&#x2F;56666" rel="nofollow">https:&#x2F;&#x2F;forum.babylonjs.com&#x2F;t&#x2F;ascii-shader-using-glsl-postpr...</a><p><a href="https:&#x2F;&#x2F;threejs.org&#x2F;examples&#x2F;?q=ascii#webgl_effects_ascii" rel="nofollow">https:&#x2F;&#x2F;threejs.org&#x2F;examples&#x2F;?q=ascii#webgl_effects_ascii</a><p><a href="https:&#x2F;&#x2F;fwdapps.net&#x2F;l&#x2F;asci&#x2F;" rel="nofollow">https:&#x2F;&#x2F;fwdapps.net&#x2F;l&#x2F;asci&#x2F;</a><p><a href="https:&#x2F;&#x2F;codesandbox.io&#x2F;p&#x2F;sandbox&#x2F;ascii-postprocessing-n628p8?file=%2Fsrc%2Findex.js" rel="nofollow">https:&#x2F;&#x2F;codesandbox.io&#x2F;p&#x2F;sandbox&#x2F;ascii-postprocessing-n628p8...</a><p><a href="https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=NxeRcnLr0ko" rel="nofollow">https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=NxeRcnLr0ko</a>
    • oofoe3 hours ago
      Or you could just start with ASCII... I was discussing how shaders work with a friend and wound up hacking together a sort of &quot;shadertoy&quot; that runs in Emacs last night. Scroll to end of file to see examples...<p><a href="https:&#x2F;&#x2F;hg.sr.ht&#x2F;~oofoe&#x2F;shademacs&#x2F;browse&#x2F;sdf.el?rev=tip" rel="nofollow">https:&#x2F;&#x2F;hg.sr.ht&#x2F;~oofoe&#x2F;shademacs&#x2F;browse&#x2F;sdf.el?rev=tip</a><p><pre><code> (shade 10 2 (lambda (x y) x)) ; Horizontal ramp. ;; @ # &amp; % * = + : - · ;; @ # &amp; % * = + : - ·</code></pre>
  • xwiz1 hour ago
    Thematically related: <a href="https:&#x2F;&#x2F;play.ertdfgcvb.xyz&#x2F;#&#x2F;src&#x2F;demos&#x2F;chromaspiral" rel="nofollow">https:&#x2F;&#x2F;play.ertdfgcvb.xyz&#x2F;#&#x2F;src&#x2F;demos&#x2F;chromaspiral</a>
    • chriscjcj59 minutes ago
      Also thematically related (from 2011):<p><a href="http:&#x2F;&#x2F;nkwiatek.com&#x2F;experiments&#x2F;ascii" rel="nofollow">http:&#x2F;&#x2F;nkwiatek.com&#x2F;experiments&#x2F;ascii</a>
  • block_dagger8 hours ago
    Given the name, I expected more actual ASCII characters&#x2F;options and selectable text. Visually appealing and fun to play with, however.
  • ksymph11 hours ago
    This is cool... But I feel like having different color&#x2F;brightness for each symbol kinda defeats the purpose of it being ASCII when the symbols only correspond to different intensities anyway.
    • intrasight18 minutes ago
      Yes, but it is &quot;ascii art&quot; and hence artistic freedom.
    • Bimos11 hours ago
      Yeah, with all these colors, any single character should be enough.
  • lasgawe58 minutes ago
    This is beautiful, I saw a similar tool weeks ago: <a href="https:&#x2F;&#x2F;ascii.0xbalance.xyz" rel="nofollow">https:&#x2F;&#x2F;ascii.0xbalance.xyz</a>
  • TyrunDemeg1012 hours ago
    Very cool, found myself just staring at it for a few minutes! Thanks for sharing!
  • otikik7 hours ago
    This looks like a good way to model &quot;satellite-view clouds&quot; where you render &quot;the full atmosphere&quot;. I don&#x27;t think it would work well when modeling &quot;ground-view clouds&quot; however. I have been looking for a good (fast) algorithm for doing that, would appreciate it if people have pointers for that.
  • kristopolous12 hours ago
    I had a similar effect for a C program I wrote a long time ago (I think 2007?). Here&#x27;s a video: <a href="https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=H4j-BkwMB20" rel="nofollow">https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=H4j-BkwMB20</a><p>and the code: <a href="https:&#x2F;&#x2F;github.com&#x2F;kristopolous&#x2F;ascsee" rel="nofollow">https:&#x2F;&#x2F;github.com&#x2F;kristopolous&#x2F;ascsee</a><p>I just updated it so it compiles on modern systems.<p>I also found the original version if you like being an archaeologist: <a href="https:&#x2F;&#x2F;9ol.es&#x2F;tmp&#x2F;gol.c" rel="nofollow">https:&#x2F;&#x2F;9ol.es&#x2F;tmp&#x2F;gol.c</a>
  • pj45334 hours ago
    Super fun! I was exploring this type of thing as one of my first experiments with Claude Code early last year.<p><a href="https:&#x2F;&#x2F;github.com&#x2F;pj4533&#x2F;asciidelic" rel="nofollow">https:&#x2F;&#x2F;github.com&#x2F;pj4533&#x2F;asciidelic</a> <a href="https:&#x2F;&#x2F;asciidelic.com" rel="nofollow">https:&#x2F;&#x2F;asciidelic.com</a><p>I should go back and add mobile support, maybe fullscreen support.
  • scaradim7 hours ago
    cool. but if it&#x27;s really about ASCII then I expect to have possibility to copy&#x2F;paste a cloudy sky in my text editor ;-P
    • binaryturtle4 hours ago
      It dies with lots of WebGL errors here, so I only see a white page. So that&#x27;s definitely not ASCII in my book. Would be more fun to have an actual text based output indeed.
  • ZpJuUuNaQ56 hours ago
    Nice. This looks similar to what I have implemented: <a href="https:&#x2F;&#x2F;www.npmjs.com&#x2F;package&#x2F;asciiground" rel="nofollow">https:&#x2F;&#x2F;www.npmjs.com&#x2F;package&#x2F;asciiground</a>, but I intended it more as a library where a user could program their own patterns by extending the existing systems. Sadly, my GitHub account got flagged, so there is no way to access the repository or GitHub pages for the demo at the moment.
    • haritha-j5 hours ago
      First time I came across this, why does a github account get flaggged?
      • dotancohen3 hours ago
        GP might be Israeli. I&#x27;m tempting fate by posting this, but I know two Israelis whose Github accounts were flagged following the October 7th attacks, and both stated that they know others as well. I don&#x27;t know what the mechanism of flagging involves, but there are targeted campaigns against some Github (and other social things) users. It&#x27;s not just one report and then the repo goes down.
      • ZpJuUuNaQ55 hours ago
        No idea. I submitted a reinstatement request, but I haven&#x27;t received any response in the past 4 months.
  • ku1ik9 hours ago
    It has very little to do with ASCII but cool nonetheless.
  • intrasight17 minutes ago
    Now I want this on a digital artframe in my livingroom.
  • matthew_hre12 hours ago
    Spent longer than I&#x27;d like to admit trying to recreate the Balatro background effect...
  • plastic0419 hours ago
    You can render only single characters. First you need to change the HTML &quot;max&quot; attribute of &lt;input&gt; to 1.1 in the &quot;Glyph Thresholds&quot;. And set 0.0 for the desired characters and the characters above. Set 1.1 for the remaining characters.<p>For example, if you only want the dash, set the dot and dash to 0.0. Then set 1.1 for the plus, ring, and cross characters.
  • alexcz7 hours ago
    Really like it, only thing some of the cells can be jittery and rapidly switch back and forth between two symbols, making for an unpleasant effect, maybe there is a way to smooth this?
  • sandos3 hours ago
    and if you ctrl+- like 7 times youre back to showing clear pixels. If you set cell size to 4, then 5 times is enough :)
  • ynac12 hours ago
    Just throwing a HELL YES &lt;with a kung fu punch&gt; out there for this. Nice work. I&#x27;ve been trying to integrate a live ascii video feature for a while now and the subtle detail on this is really inspiring.
  • some1else9 hours ago
    Similar Perlin-based effect with mouse reactivity &amp; audio:<p><a href="https:&#x2F;&#x2F;srdjan.pro" rel="nofollow">https:&#x2F;&#x2F;srdjan.pro</a>
    • efilife5 hours ago
      you should disclose that it&#x27;s your portfolio
  • firecall14 hours ago
    Well thats pretty cool!
  • publicdebates3 hours ago
    This is a genuine work of art. I don&#x27;t care how impractical it is, it&#x27;s utterly beautiful, and a joy to play with.
  • yanchep9 hours ago
    Trippy!<p><pre><code> browsh https:&#x2F;&#x2F;caidan.dev&#x2F;portfolio&#x2F;ascii_clouds&#x2F;</code></pre>
  • burnt-resistor10 hours ago
    Neat. It&#x27;d be more &quot;ASCII&quot; if it used 8x16 pixel (but right extended to 9x16) characters in 80:133 width:height aspect ratio since 80x25 characters at 720x400 on 4:3 results in 80:133 pixels. An arbitrary sized canvas is cool so long as the aspect ratio is preserved.<p>The infamous MCGA&#x2F;&quot;VGA&quot; mode 13h had pixels with an aspect ratio 6:5, while 320 x 240 Mode X was square (1:1).<p>I still remember the unchained offset calculation for the memory offset for pixel memory access before the era of U and V pipes and many optimizing compiler passes:<p><pre><code> unsigned short offset = (((y &lt;&lt; 2) + y) &lt;&lt; 6) + x; unsigned char far *ptr = (unsigned char far*)MK_FP(0xA000, offset); &#x2F;&#x2F; IIRC: #define MK_FP(seg, off) ((void far *)((unsigned long)(seg) &lt;&lt; 16 | (unsigned long)(off))) &#x2F;&#x2F; far pointers != linear address </code></pre> In real-mode (linear): 0xa0000 + (320 * y) + x
    • pixelpoet3 hours ago
      Infamous means famous but for a bad reason, basically notorious. I&#x27;ve noticed a <i>lot</i> of people making this mistake recently, as well as people using ignorant to mean stupid. But I digress...<p>Many of us have that mode 13h stuff memorised too, including the 0x3c8 and 0x3c9 palette registers etc. And since 320x200 bytes is less than 65536 you don&#x27;t need to do any segment stuff to access the full frame buffer.
  • casparvitch14 hours ago
    Would love this as an audio visualizer
  • drob5187 hours ago
    That’s pretty hypnotic. Very cool.
  • baalimago11 hours ago
    Here I&#x27;m being ridiculous but I was a bit disappointed that it was a canvas rendering and not a mono-font text block
  • NSPG9118 hours ago
    i would kill to have something like this in wallpaper engine
  • fxn28 hours ago
    related: <a href="https:&#x2F;&#x2F;www.gifcii.fun" rel="nofollow">https:&#x2F;&#x2F;www.gifcii.fun</a>
  • hairozen2 hours ago
    very very cool!
  • heliumtera2 hours ago
    Except it is not ascii
  • lanyard-textile9 hours ago
    Miasma!
  • arionmiles10 hours ago
    Dope!
  • imvetri10 hours ago
    What is this?
  • imdsm14 hours ago
    that looks pretty good
  • Padriac13 hours ago
    I don&#x27;t understand.
    • keyle13 hours ago
      I think it&#x27;s just a technological show piece, basically built on top of open source libraries and a couple of algorithms.
      • imvetri10 hours ago
        Lets let author explain. Our explanation might derail newbie readers
    • imvetri10 hours ago
      Same here
  • r0075h3ll11 hours ago
    nicee
  • tomiezhang11 hours ago
    That is magic
  • functionmouse14 hours ago
    What do you see in the clouds?