Convert Figma logo to code with AI

sindresorhus logoPlash

đź’¦ Make any website your Mac desktop wallpaper

3,459
128
3,459
30

Top Related Projects

14,622

Automatic tiling window manager for macOS Ă  la xmonad.

23,088

A tiling window manager for macOS based on binary space partitioning

25,585

Move and resize windows on macOS with keyboard shortcuts and snap areas

:computer: Console application for creating dynamic wallpapers for macOS Mojave and newer

20,780

Apple TV Aerial Screensaver for Mac

8,144

Hide menu bar icons on macOS

Quick Overview

Plash is a macOS app that allows users to set any website as their desktop wallpaper. It offers a unique way to display dynamic content, such as weather information, calendars, or custom web-based dashboards, directly on the desktop background.

Pros

  • Enables dynamic, interactive desktop backgrounds
  • Supports multiple displays with different websites
  • Offers customization options like refresh intervals and zoom levels
  • Integrates well with macOS, including Dark Mode support

Cons

  • Limited to macOS only, not available for other operating systems
  • May consume more system resources compared to static wallpapers
  • Requires an active internet connection for most use cases
  • Potential privacy concerns when using certain websites as wallpapers

Getting Started

To get started with Plash:

  1. Download the app from the GitHub releases page or the Mac App Store.
  2. Install and launch Plash.
  3. Click on the Plash menu bar icon and select "Set Website…"
  4. Enter the URL of the website you want to use as your wallpaper.
  5. Adjust settings like refresh interval and zoom level as needed.

For multiple displays:

  1. Click on the Plash menu bar icon and select "Preferences…"
  2. Go to the "Displays" tab.
  3. Configure different websites for each connected display.

To create a custom HTML wallpaper:

  1. Create an HTML file with your desired content.
  2. Use "file:///path/to/your/file.html" as the URL in Plash.

Remember to grant Plash the necessary permissions when prompted to ensure full functionality.

Competitor Comparisons

14,622

Automatic tiling window manager for macOS Ă  la xmonad.

Pros of Amethyst

  • Offers advanced window management and tiling features
  • Highly customizable with multiple layout options
  • Supports multiple monitors and spaces

Cons of Amethyst

  • Steeper learning curve due to complex features
  • May consume more system resources
  • Requires more setup and configuration

Code Comparison

Amethyst (Swift):

override func layoutManager(_ layoutManager: LayoutManager, frameAssignments: [FrameAssignment]) {
    frameAssignments.forEach { assignment in
        assignment.window.setFrame(assignment.frame, display: true, animate: false)
    }
}

Plash (JavaScript):

ipcMain.on('set-wallpaper', async (event, options) => {
  try {
    await setWallpaper(options);
    event.reply('set-wallpaper-success');
  } catch (error) {
    event.reply('set-wallpaper-error', error);
  }
});

While both projects are for macOS, they serve different purposes. Amethyst is a tiling window manager, offering advanced window management features. Plash, on the other hand, is a simple tool for setting live wallpapers. The code snippets reflect their different functionalities: Amethyst deals with window frame assignments, while Plash handles setting wallpapers through IPC communication.

23,088

A tiling window manager for macOS based on binary space partitioning

Pros of yabai

  • More comprehensive window management system for macOS
  • Supports tiling window management and advanced layouts
  • Highly customizable with scripting capabilities

Cons of yabai

  • Steeper learning curve and more complex setup
  • Requires disabling System Integrity Protection (SIP) for full functionality
  • May impact system performance due to its extensive features

Code comparison

Yabai configuration example:

yabai -m config layout bsp
yabai -m config top_padding 10
yabai -m config left_padding 10
yabai -m config right_padding 10
yabai -m config bottom_padding 10

Plash doesn't have a direct code comparison as it's primarily a GUI application for setting live wallpapers. It doesn't involve complex configuration files or scripting like yabai.

Summary

Yabai is a powerful window management tool for macOS, offering extensive customization and tiling capabilities. It's ideal for users who want granular control over their workspace layout. However, it requires more setup and system modifications.

Plash, on the other hand, is a simpler application focused on setting live wallpapers using websites. It's more user-friendly and doesn't require advanced configuration, but it lacks the window management features of yabai.

The choice between the two depends on the user's needs: comprehensive window management (yabai) vs. easy-to-use live wallpaper functionality (Plash).

25,585

Move and resize windows on macOS with keyboard shortcuts and snap areas

Pros of Rectangle

  • Focuses on window management and resizing, providing more comprehensive control over application windows
  • Offers keyboard shortcuts and snap areas for quick and precise window positioning
  • Supports multiple displays and spaces, enhancing productivity for multi-monitor setups

Cons of Rectangle

  • Limited to window management functionality, lacking the ability to set custom wallpapers
  • May have a steeper learning curve for users unfamiliar with window management tools
  • Doesn't offer dynamic wallpaper features or web content display capabilities

Code Comparison

Rectangle (Swift):

func calculateWindowRect(for screen: NSScreen, visibleFrameOnly: Bool) -> NSRect {
    return visibleFrameOnly ? screen.visibleFrame : screen.frame
}

Plash (Swift):

func setWallpaper(_ image: NSImage) {
    let workspace = NSWorkspace.shared
    workspace.desktopImageOptions = [:]
    try? workspace.setDesktopImageURL(nil, for: NSScreen.main!, options: [:])
}

While both projects are written in Swift, their code focuses on different functionalities. Rectangle's code snippet demonstrates window frame calculation, while Plash's code shows wallpaper setting functionality.

:computer: Console application for creating dynamic wallpapers for macOS Mojave and newer

Pros of wallpapper

  • Cross-platform support (macOS, Linux, Windows)
  • Command-line interface for easy automation and scripting
  • Supports creating dynamic wallpapers from multiple images

Cons of wallpapper

  • Lacks a graphical user interface, which may be less user-friendly for some
  • Requires manual configuration and image preparation
  • Limited to static image-based wallpapers

Code Comparison

wallpapper:

let wallpaper = Wallpaper()
wallpaper.inputPath = inputPath
wallpaper.outputPath = outputPath
wallpaper.create()

Plash:

let webView = WKWebView(frame: view.bounds)
webView.load(URLRequest(url: URL(string: "https://example.com")!))
view.addSubview(webView)

Summary

wallpapper is a command-line tool for creating dynamic wallpapers, offering cross-platform support and automation capabilities. However, it lacks a GUI and is limited to static images. Plash, on the other hand, is a macOS-specific app that allows users to set live websites as wallpapers, providing a more interactive and dynamic experience with a user-friendly interface. The code comparison shows wallpapper's focus on image processing, while Plash utilizes web technologies for live wallpapers.

20,780

Apple TV Aerial Screensaver for Mac

Pros of Aerial

  • Offers a wide variety of high-quality video screensavers from Apple TV
  • Includes customization options for video playback and display settings
  • Supports multiple displays and can show different videos on each screen

Cons of Aerial

  • Requires more system resources due to playing high-resolution videos
  • Limited to Apple TV aerial footage, less flexibility in content selection
  • May consume more bandwidth for downloading new video content

Code Comparison

Aerial (Objective-C):

- (void)loadVideos {
    NSString *videoJSON = [NSString stringWithContentsOfURL:[NSURL URLWithString:AerialAPIEndpoint] encoding:NSUTF8StringEncoding error:nil];
    NSArray *videos = [NSJSONSerialization JSONObjectWithData:[videoJSON dataUsingEncoding:NSUTF8StringEncoding] options:0 error:nil];
    // Process and store video information
}

Plash (Swift):

func setWallpaper(url: URL) {
    let options: NSDictionary = [kCGDesktopImageAllowClippingKey: true]
    try? NSWorkspace.shared.setDesktopImageURL(url, for: NSScreen.main!, options: options as [NSWorkspace.DesktopImageOptionKey: Any])
}

While both projects aim to enhance the desktop experience, Aerial focuses on providing dynamic video screensavers, whereas Plash allows users to set any website as their desktop wallpaper. Aerial offers a more immersive visual experience but with less customization, while Plash provides greater flexibility in content selection at the cost of less dynamic visuals.

8,144

Hide menu bar icons on macOS

Pros of Dozer

  • Offers menu bar customization and organization features
  • Provides a more comprehensive set of tools for managing menu bar items
  • Includes options for hiding specific menu bar icons

Cons of Dozer

  • May have a steeper learning curve due to more complex features
  • Potentially higher resource usage compared to Plash's lightweight approach
  • Less focused on wallpaper-related functionality

Code Comparison

Dozer (Objective-C):

- (void)toggleHidden {
    if (self.isHidden) {
        [self unhide];
    } else {
        [self hide];
    }
}

Plash (Swift):

func setWallpaper(_ url: URL) {
    guard let screen = NSScreen.main else { return }
    try? NSWorkspace.shared.setDesktopImageURL(url, for: screen)
}

While both projects are macOS utilities, they serve different purposes. Dozer focuses on menu bar management and customization, offering features to organize and hide menu bar items. Plash, on the other hand, is primarily designed for setting web pages as desktop wallpapers.

The code snippets highlight this difference in focus. Dozer's code demonstrates functionality for toggling the visibility of menu bar items, while Plash's code shows how it sets a wallpaper using a URL.

Convert Figma logo designs to code with AI

Visual Copilot

Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.

Try Visual Copilot

README

Plash

Make any website your Mac desktop wallpaper




Plash enables you to have a highly dynamic desktop wallpaper. You could display your favorite news site, Facebook feed, or a random beautiful scenery photo. The use-cases are limitless. You could even set an animated GIF as wallpaper. You can even add multiple websites and easily switch between them.

Use-cases

Share your use-case

Features

  • Show a remote or local website
  • Interact with the website (“Browsing Mode”)
  • Automatically reload the website at a custom interval
  • Add multiple websites
  • Show the website on a different display
  • Invert website colors (fake dark mode)
  • Add custom CSS and JavaScript to the website
  • Lower the opacity
  • Transparent background
  • Automatically deactivate while on battery
  • Audio is muted
  • Single image will be aspect-filled to your screen
  • Hide menu bar icon
  • Shortcuts support
  • Scriptable
  • Share extension

Download

Requires macOS 14 or later.

Older versions

Non-App Store version

A special version for users that cannot access the App Store. It won't receive automatic updates. I will update it here once a year.

Download (2.15.0 · macOS 14+)

Tips

Browsing mode

You can interact with the website by enabling “Browsing Mode”. When in this mode, you can right-click to be able to go back/forward, reload, and zoom in the page contents (the zoom level is saved). You can also pinch to magnify. This is different from zooming the page contents in that it will zoom in to a specific part of the page instead of just enlarging everything.

Plash injects a CSS class named plash-is-browsing-mode on the <html> element while browsing mode is active. You could use this class to customize the website for browsing mode.

If clicking a link opens it in a new window, you can hold the Option key while clicking the link to open it in the main Plash window.

Zoom in website

To zoom in the website, activate “Browsing Mode”, right-click the website, and then select “Zoom In”.

URL placeholders for screen width and height

Use [[screenWidth]] and [[screenHeight]] in any URL and Plash will substitute the right values for you. For example, https://source.unsplash.com/random/[[screenWidth]]x[[screenHeight]]?puppy.

Scroll to position

You can scroll a website to a specific position each time it is loaded by putting the following in the website's “JavaScript” field. Adjust the “500” to how far down it should scroll.

window.scrollTo(0, 500);

You can also scroll to a specific element matching a CSS selector:

document.querySelector('.title')?.scrollIntoView();

Make the website occupy only half the screen

You can use the “CSS” field in the website settings to adjust the padding of the website:

:root {
    margin-left: 50% !important;
}

Detect Plash

Plash injects a CSS class named is-plash-app on the <html> element. You could use this class to customize your website for Plash. For example, if your website has instructions on how to use it in Plash, you could hide those when it's running in Plash.

Screenshots

Scripting

You can control Plash using anything that supports opening a URL with a custom scheme.

For example, to reload the current website, run this terminal command:

$ open -g plash:reload

Share extension

Plash comes bundled with a share extension. You can, for example, use it to quickly add a website you have open in Safari to Plash.

Tools

Commands

add

Add a website to Plash.

You can optionally specify a title. If no title is given, a title will be automatically fetched from the website.

$ open -g 'plash:add?url=https://sindresorhus.com/plash&title=Plash%20website'

Don't forget to correctly encode query parameters.

Note: Local file URLs are not supported.

reload

Reload the current website.

$ open -g plash:reload

next

Switch to the next website in the list.

$ open -g plash:next

previous

Switch to the previous website in the list.

$ open -g plash:previous

random

Switch to a random website in the list.

It will never show the same website twice in a row, unless you only have a single website.

$ open -g plash:random

toggle-browsing-mode

Toggle browsing mode.

$ open -g plash:toggle-browsing-mode

Examples

Node.js

import {execFileSync} from 'node:child_process';

execFileSync('open', ['--background', 'plash:reload']);

Swift

import Cocoa

let command = "plash:reload"

let configuration = NSWorkspace.OpenConfiguration()
configuration.activates = false
NSWorkspace.shared.open(URL(string: command)!, configuration: configuration)

AppleScript

do shell script "open --background 'plash:reload'"

Python

import subprocess

subprocess.run(['open', '--background', 'plash:reload'])

FAQ

The app does not show up in the menu bar

macOS hides menu bar apps when there is no space left in the menu bar. This is a common problem on MacBooks with a notch. Try quitting some menu bar apps to free up space. If this does not solve it, try quitting Bartender if you have it installed.

Can it automatically switch websites every 10 minutes?

Plash can be automated with the built-in Shortcuts app, for example, using the “Switch to Next Website” action. Shortcuts on macOS does not yet support automations, but for now, you can use the Shortery app.

Does it support multiple displays?

Support for multiple displays is currently limited to the ability to choose which display to show the website on. Support for setting a separate website for each display is planned.

However, I there is a workaround.

Why does Plash use so much memory?

Plash uses very little memory. Usually around 40 MB. However, the websites you display can take up a lot of memory, and sometimes even have a memory leaks.

The menu bar does not adapt to the Plash wallpaper

The menu bar adapts its color from the actual system wallpaper. Plash is not actually a wallpaper, but rather runs right above the wallpaper. So Plash cannot influence the menu bar color.

Can Plash block ads?

Not built-in, but you can block ads system-wide with a DNS ad-blocker.

How can I switch to a specific website with a keyboard shortcut?

Make a shortcut in the Shortcuts app that uses the “Set Current Website” action and then set a keyboard shortcut for the shortcut.

Can I contribute localizations?

I don't have any immediate plans to localize the app.

What does “Plash” mean?

Click here.

Built with

  • Defaults - Swifty and modern UserDefaults
  • KeyboardShortcuts - Add user-customizable global keyboard shortcuts to your macOS app

Links