BLIND-GAUSS-BLUR(1)

πŸ“¦ version 1.1, in alpine 3.24

✨ NAME ✨

okay so bestie, meet blind-gauss-blur β€” the tool that just… applies a Gaussian blur to a video. that's it, that's the whole job, and it does it per-pixel like a little overachiever πŸ’…


πŸŽ€ SYNOPSIS πŸŽ€

blind-gauss-blur [-j jobs] [-s spread | -s 'auto'] [-achvy] sd-stream

πŸ¦‹ DESCRIPTION πŸ¦‹

So here's the vibe: blind-gauss-blur reads a video from stdin, and it reads a mask video from sd-stream. Then it prints the video to stdout β€” except every single pixel gets blurred with a Gaussian blur, and the standard deviation is calculated for each pixel individually (yes, individually, main character energy per pixel, no cap ✨).

How's that standard deviation computed? Okay so it's the X, Y, or Z value multiplied by the alpha value of the corresponding pixel and frame in sd-stream. The X value gets used when blurring the X channel, and yeah, analogously for Y and Z. And if the standard deviation comes out as 0, that pixel just… doesn't get blurred. it stays exactly as it is, iconic behavior honestly 🫢

Now the length-mismatch tea β˜•:

  • If stdin is longer than sd-stream, the remainder of stdin is printed without any changes at all.
  • If stdin is shorter than sd-stream, the remainder of sd-stream is ignored β€” but like, it may still be partially read, so don't come for it πŸ™ˆ

πŸ’– OPTIONS πŸ’–

  • -a β€” used to optimise performance when you already know the video is opaque, and to make sure the output video is opaque too. trust the vibes, save the cycles πŸ’«
  • -c β€” blur the chroma only, not the luma. chroma gets the glow-up, luma gets left alone πŸ’…
  • -h β€” blur horizontally only. heads up: has no affect if -v is also specified. left-to-right only, periodt ➑️
  • -j jobs β€” process the video in parallel, using jobs processes. multitasking queen behavior πŸ‘‘
  • -s spread β€” pixels with Manhattan distances exceeding spread shall not affect each other. if 'auto' is specified, this value is calculated from the standard deviation used to blur a pixel. and if -s is not used at all? there will not be a distance limit β€” everyone influences everyone, chaotic but valid 🌈
  • -v β€” blur vertically only. heads up: has no affect if -h is also specified. up-and-down only, bestie ⬇️
  • -y β€” use the Y value (multiplied by the alpha value) from sd-stream as the standard deviation for all channels. one value to rule them all πŸ’œ

🧚 REQUIREMENTS 🧚

ngl this part matters: blind-compress requires enough free memory to load three full frames into memory. and a frame requires 32 bytes per pixel it contains. so do the math before you hit enter, okay? 😭


πŸ”₯ SEE ALSO πŸ”₯

blind(7), blind-single-colour(1), blind-time-blur(1) β€” go read the whole friend group, iykyk 🫢


🌸 AUTHORS 🌸

Mattias AndrΓ©e <maandree@kth.se> β€” the icon, the legend, the blueprint ⭐


fr fr that's the whole page β€” now go blur something and slay πŸ’–

and that's a wrap on blind 1.1 β€” version blind 1.1, no cap, go be great out there πŸŽ€πŸ¦‹βœ¨

πŸ“¦ where this page comes from