💾 Archived View for dioskouroi.xyz › thread › 29368552 captured on 2021-11-30 at 20:18:30. Gemini links have been rewritten to link to archived content

View Raw

More Information

-=-=-=-=-=-=-

Show HN: 4K Desktop Wallpaper Generator

Author: roytanck

Score: 252

Comments: 75

Date: 2021-11-28 12:55:21

Web Link

________________________________________________________________________________

roytanck wrote at 2021-11-28 12:55:21:

I created a little web page (<10kB) that generates a random 4K (3840*2160px) wallpaper image using Javascript and the <canvas> element. Right-click to save the image (desktop only for now).

No two images are the same. You may need a few refreshes to get an interesting result.

Code:

https://github.com/roytanck/wallpaper-generator

arendtio wrote at 2021-11-28 13:30:22:

Nice idea.

Ideas for optimization:

- use some kind of seed from a URL, so that people can share them.

- How about multi-monitor setups?

The multi-monitor setup is something I struggled a bit. My two monitors are stacked vertically. So I use SVG images, render them in 2x4k height + 80px or so and cut the relevant parts out.

roytanck wrote at 2021-11-28 13:35:12:

The width and height can be changed in the code. If you also increase the number of layers (vertical) and line segments (horizontal) accordingly, you should be able to get similar results at different resolutions/aspects.

thamer wrote at 2021-11-28 20:31:55:

I would also second the idea of putting the seed in the URL, even with just an anchor link so that all processing is done in the browser. So if someone visits

https://tanck.nl/wallpaper/#12345

, use this number as the seed. You could also add a link under the image.

_edit:_ here's a hacky way to do it, since you can't seed Math.random() in JavaScript; add this at the start of the "draw()" function.

  const url = new URL(location.href);
    const match = /#([0-9]+)$/.exec(url.hash);
    if (match) {
        var seed = parseInt(match[1]);
        Math.random = function() {
            var x = Math.sin(seed++) * 10000;
            return x - Math.floor(x);
        };
    }

Based on a StackOverflow answer to the commonly-asked question of how to seed the PRNG in JavaScript, by all means not a perfect solution but appropriately concise for this short script:

https://stackoverflow.com/a/19303725

roytanck wrote at 2021-11-29 07:22:51:

I've done something similar in another project (avatar generator based on username). That code would always use a seed, and generate a new one when none was supplied.

The main issue I see is that all the non-random numbers in the code would need to remain fixed. I love tweaking those to improve the results. The link you'd share would have to be something like /v1/hash, where 'v1' is a folder with the 'frozen' version of the algorithm.

I also think the results would be less random/erratic, and since the images this generates are only around 150 kilobytes, they are also easy to share :).

thamer wrote at 2021-11-29 21:03:05:

I see you've added a sharing feature! Thanks for this.

It really says something about the elegance of the image generation algorithm when the sharing code is about as long as the code to generate images. I was surprised when I first saw this draw() function, only a few lines long. Great job!

ralusek wrote at 2021-11-29 03:29:57:

But that wouldn't be cryptographically secure. Someone could deterministically predict my wallpaper for fuck's sake.

Tepix wrote at 2021-11-28 18:13:35:

Instead of a seed you could create NFTs for every wallpaper to finance the _insane_ server cost and for flexing of course ;-)

eins1234 wrote at 2021-11-28 15:03:39:

This is really cool! Thanks for sharing!

Though one question popped up in my mind while looking at this... Given the trend of ever increasing screen resolutions with no end in sight, why don't OSes support using vector images (svg, etc) as wallpapers?

hnarn wrote at 2021-11-28 17:13:19:

Your claim that no operating systems support this seems extremely unlikely. I’m pretty much certain there are multiple Linux desktop environments that support vector based background images.

ExtraE wrote at 2021-11-28 20:20:12:

Still, the question remains. Why don’t many/most/all?

eins1234 wrote at 2021-11-29 03:12:43:

Well, I had assumed none had support since none of the OSes I use regularly had support. I stand corrected.

That said, I do still wonder why none of the OSes that I use (Windows, MacOS, Android, iOS, accounting for pretty much 100% of the OSes regular people use) have support for it.

coolso wrote at 2021-11-28 18:30:02:

Yeah but the problem is they don’t otherwise support a convenient desktop experience. Maybe next year will be the year.

hnarn wrote at 2021-11-28 18:40:33:

>they don’t otherwise support a convenient desktop experience

I have no idea what this means.

artificial wrote at 2021-11-28 18:59:18:

Everyone assumes everyone shares the same values. I think this person is dissatisfied with the UX on Linux.

hnarn wrote at 2021-11-28 19:08:40:

People conflating subjective opinion with objective fact is in my opinion one of the most frustrating things about Internet discourse today.

arthurcolle wrote at 2021-11-28 20:20:58:

no you're wrong

cogburnd02 wrote at 2021-11-28 23:15:40:

I legitimately laughed out loud at this.

roytanck wrote at 2021-11-28 20:51:30:

This wallpaper generator was written on a Raspberry Pi running Ubuntu. Which I use because of its highly convenient desktop experience ;).

smoldesu wrote at 2021-11-28 20:03:14:

My current desktop has an SVG as the wallpaper for my main display and a webp on the second one. I guess I could switch them over to a png or something, but I'm too lazy and I haven't noticed any issues with it.

grech wrote at 2021-11-28 16:01:50:

Love the minimalist execution. Personally, I consider your tool having no user-facing options a plus (less decision making for me and excitement from complete randomness). I just set one of the wallpapers as my desktop background. Thank you

countmora wrote at 2021-11-28 13:38:44:

On Safari (macOS) it is as impossible to download this easy-to-download-picture as it is possible to download the impossible-to-download-picture[1] from yesterday.

[1]

https://news.ycombinator.com/item?id=29358880

bee_rider wrote at 2021-11-29 07:28:56:

If you can't get the download to work, but are still interested in something similar, @victorgama put together what appears to be a pretty neat macOS implementation. It runs the algorithm on the desktop and automagically refreshes the wallpaper on startup, etc (unfortunately I don't know swift or have a mac, so this is just based on the readme).

https://news.ycombinator.com/item?id=29377185

sam0x17 wrote at 2021-11-29 04:24:13:

Luckily the vast majority of MacOS users these days don't use Safari, for reasons like this

OJFord wrote at 2021-11-28 13:51:27:

Nice! Feature suggestion: an (optional) colour picker would be a nice touch, so you can pick (or perhaps enter #RGB) one that should appear and the others are then a fitting palette. Occurred to me because I was refreshing through a few, liked the colours on one, but not so much the pattern. (Perhaps alternative implementation would be a 'hold colour palette' or 'hold pattern' toggles, so only the other varies.)

roytanck wrote at 2021-11-28 13:54:28:

Thank you. Those are great suggestions, but I also like the simplicity of it being completely random. Perhaps I'll do an interactive wallpaper designer at some point, where you're more in control.

Bedon292 wrote at 2021-11-29 01:32:16:

I do like the simplicity of completely random, but my first instinct was definitely to want some sliders or toggles. Personally prefer desktops to be extremely dark, and many of them were nice, but way too bright on a section. User control would definitely end up with a different experience, and totally respect the simplicity.

Might end up tweaking it to my tastes and a few other resolutions, like for my ultra wide.

bartvk wrote at 2021-11-28 20:17:58:

What could be nice, and not require user input, is detect whether the user has dark mode enabled, and then use that as an input variable.

okramcivokram wrote at 2021-11-29 13:25:50:

I've added GUI where you can also pick the color and play around with other params. Check it out in this branch:

https://github.com/markomarkovic/wallpaper-generator/tree/gu...

bee_rider wrote at 2021-11-28 21:14:42:

A fun alternative would be to run this on the desktop and generate a new wallpaper every time your computer starts up (This is not a feature request, though -- you've had plenty of those here already, and since you've helpfully released the code under GPL, I'm sure anyone interested could easily do this conversion on their own end).

victorgama wrote at 2021-11-29 07:01:39:

Done! (For macOS)

https://github.com/heyvito/kabegami

bee_rider wrote at 2021-11-29 21:40:10:

You've added some thoughtful features. I don't have a mac, but hopefully people will check this out.

notRobot wrote at 2021-11-28 15:14:51:

Also see related: the soft landscapes twitter account:

https://mobile.twitter.com/softlandscapes

stemlord wrote at 2021-11-28 20:26:00:

Anyone else remember digitalblasphemy.com? Good times

taejavu wrote at 2021-11-28 23:09:10:

Oh, with the glowing mushrooms (plus plenty of other abstract/fantasy landscapes)? Damn that takes me back

unethical_ban wrote at 2021-11-29 03:33:25:

Still there!

roland35 wrote at 2021-11-28 14:06:27:

My favorite site for wallpapers is interface lift, but just note that the site does occasionally go down for months at a time!

https://interfacelift.com/

podiki wrote at 2021-11-28 19:34:59:

Yes, has some fantastic images, but seems nothing new for a few years now.

fuzzy2 wrote at 2021-11-28 14:11:03:

Oh, it’s back? I was under the impression it was down for, like, two years.

batuhandirek wrote at 2021-11-29 13:07:05:

Not entirely same, but I have a similar project at

https://circles.gallery

Love the minimalism in yours! Maybe I should also put a URL for generating a single image like /random

Thank you a lot for this :)

FredPret wrote at 2021-11-28 13:31:00:

This is just brilliant. I’ve been looking for ways to generate spanning wallpapers for two 4k screens, or two 4k’s + a laptop screen. Looks like this could be adapted for that.

GekkePrutser wrote at 2021-11-29 02:36:35:

The colour schemes and limited amount of colours reminds me of the old VUE and CDE backgrounds :)

And that reminds me of xfishtank. I still use that sometimes for old school cool and also because it is pretty optimized (when it was written many X terminals shared a 10mbit coax) and great way to see if a remote X desktop session is still responsive.

qrohlf wrote at 2021-11-28 16:36:21:

Not entirely dissimilar to my own pattern generation tool,

https://trianglify.io/

How are you doing the color palettes? Is it fully random or using some kind of picker algorithm?

roytanck wrote at 2021-11-28 17:21:51:

Completely random. It picks a hue value (0-360) and then adds or subtracts a second random value from this for each layer. The maximum value of this increment is relatively small, so the colors are usually similar within the same image.

Starmina wrote at 2021-11-28 20:43:34:

Love it.

oceankid wrote at 2021-11-28 14:41:38:

Super nice! Save doesn't work on Safari MacOS?

roytanck wrote at 2021-11-28 14:44:48:

Unfortunately, no. There seems to be some issue with saving canvas elements as PNG on mobile browsers. Since the generated images are landscape aspect anyway, I didn't spend a lot of time figuring out exactly what's causing this.

dylan604 wrote at 2021-11-28 16:19:29:

macOS is not a mobile OS

roytanck wrote at 2021-11-28 17:24:08:

My bad. Seems that a number of browsers block saving canvas elements as a security precaution. For now, I can only recommend trying a different browser as a workaround.

kkruglov wrote at 2021-11-28 18:58:32:

please, consider adding some kind of download button or something for us, poor safari users <3

roytanck wrote at 2021-11-29 09:50:51:

Thanks to a very helpful contributor on Github, there's now a download link.

enz wrote at 2021-11-28 16:52:20:

Very nice. I now use one as my wallpaper. It's pretty satisfying to know I have a uniquely generated wallpaper ;)

ajross wrote at 2021-11-28 16:57:16:

Ditto. It's been a while with the same gradient. Reloaded a few times to find one with the general color space I wanted. Boom, done. I love it.

(Needs a tip jar or something though.)

chubs wrote at 2021-11-28 23:58:49:

My favourite part of this is that the wallpapers will look super sharp on my 4k display. It's quite difficult to find wallpapers that don't look blurry when blown up, even quality landscape photography. Very neat! Thanks for sharing :)

kevmo314 wrote at 2021-11-28 13:34:44:

Love the simple, readable source compared to the compiled stuff these days :)

https://tanck.nl/wallpaper/wallpaper.js

masteruvpuppetz wrote at 2021-11-28 13:56:50:

Can somebody recommend a free low poly background picture generator? Example

https://trianglify.io/

danskeren wrote at 2021-11-29 19:11:44:

https://cojdev.github.io/lowpoly/

marban wrote at 2021-11-28 15:34:29:

Come on — in the era of NFTs, $8 for an SVG is a steal.

pimlottc wrote at 2021-11-28 19:26:16:

I miss the old days of the internet when people would make something like this just for fun, not to make a buck.

swayvil wrote at 2021-11-28 19:28:08:

Tasteful. Minimal. You are truly owning the zone.

rcarmo wrote at 2021-11-28 14:55:03:

Interesting. I used around 30-40 wallpapers generated through Trianglify until recently, this has a lot of potential.

sahiljajodia01 wrote at 2021-11-28 18:26:43:

This is amazing. However, how much is the probability for it to generate the same wallpaper twice?

roytanck wrote at 2021-11-28 18:30:50:

Almost infinitely small. There are many random values used to create the image, and most of those have millions of possible values.

naikrovek wrote at 2021-11-28 16:45:25:

Tapet for Android is another example of this, and could serve as great inspiration if you need any.

nvaider wrote at 2021-11-29 04:58:01:

This is great for rotating my lockscreen backgrounds

rob_c wrote at 2021-11-28 18:30:16:

Cool!

I wonder is the code public or just page source?

(Will have to check the page when not on mobile)

roytanck wrote at 2021-11-28 18:33:07:

The code is on Github:

https://github.com/roytanck/wallpaper-generator

Please let me know if you create something nice with it.

petepete wrote at 2021-11-28 18:00:31:

Works beautifully, I've saved a few for my rotation. Thanks!

peanut_worm wrote at 2021-11-28 14:12:46:

You can’t download the image on iOS

roytanck wrote at 2021-11-28 14:19:31:

This unfortunately, is a known issue. I tried adding a download button, but that also only worked on desktop. Probably some browser policy thing. The same is true for Android (Chrome and Firefox Nightly).

oefrha wrote at 2021-11-28 14:40:08:

You can convert the canvas to a Blob with HTMLCanvasElement.toBlob(), then create a blob URL from that with URL.createObjectURL(). You can then replace the canvas with an <img src="blob://...">, which can be long press saved; add a download button linking to that blob URL; or whatever. Works on all non-ancient mobile browsers I've tested.

Do note that Firefox’s privacy.resistFingerprinting can block you from reading canvas image data, giving you garbage instead, and the permission prompt is basically unnoticeable if the user isn’t actively looking for it.

roytanck wrote at 2021-11-29 07:13:57:

Thank you. I tried to implement this, but I got empty/missing images on mobile browsers. It basically worked everywhere where right-clicking also worked. I'll look into it more when I have more time.

58x14 wrote at 2021-11-28 17:43:10:

I was able to download the image on iOS just now, using Firefox on iOS.

58x14 wrote at 2021-11-28 17:44:25:

It showed up in my camera roll immediately, which seemed to ruin the joke until I read the explanation.

bit-101 wrote at 2021-11-28 14:34:34:

Nice work!