Initial Application
This commit is contained in:
88
README.md
Normal file
88
README.md
Normal file
@@ -0,0 +1,88 @@
|
||||
# Dynamic Wallpaper Creator
|
||||
|
||||
A small Swing (Java) desktop application for building your own macOS **Dynamic
|
||||
Desktop** wallpapers — the `.heic` files that automatically switch images as
|
||||
your Mac moves between Light and Dark appearance, or as the sun moves across
|
||||
the sky throughout the day.
|
||||
|
||||
You supply the images; the app assembles them into a single `.heic` file with
|
||||
the same embedded metadata Apple's own dynamic wallpapers use, so macOS
|
||||
recognizes and animates it exactly like a wallpaper from System Settings.
|
||||
|
||||
## Features
|
||||
|
||||
- **Light / Dark mode wallpapers** — pick one image for Light appearance and
|
||||
one for Dark appearance.
|
||||
- **Sun-position (solar) wallpapers** — add any number of images and tag each
|
||||
one with the sun's altitude and azimuth; macOS cross-fades between them
|
||||
based on your location and the real time of day. An "Auto-Distribute"
|
||||
button fills in a reasonable sunrise → noon → sunset → night arc for you.
|
||||
- **Set as Desktop Picture** — apply the wallpaper you just built without
|
||||
leaving the app.
|
||||
- Runs entirely locally. No image is uploaded anywhere.
|
||||
|
||||
## Requirements
|
||||
|
||||
- **macOS** — Dynamic Desktop is a macOS-only feature; the app refuses to
|
||||
start on other platforms.
|
||||
- **Java 17+** to run the app.
|
||||
- **Xcode Command Line Tools** (for `swiftc`) to build the app *and* on first
|
||||
run, so the bundled native helper can compile. Install with:
|
||||
```
|
||||
xcode-select --install
|
||||
```
|
||||
- **Maven** to build from source.
|
||||
|
||||
See [docs/BUILD.md](docs/BUILD.md) for full build instructions and
|
||||
[docs/USAGE.md](docs/USAGE.md) for how to use the app once it's running.
|
||||
|
||||
## Quick start
|
||||
|
||||
```bash
|
||||
mvn package
|
||||
java -jar target/dynamic-wallpaper-creator.jar
|
||||
```
|
||||
|
||||
The first time you click **Generate Wallpaper**, the app compiles a small
|
||||
bundled Swift helper and caches the binary in
|
||||
`~/Library/Application Support/DynamicWallpaperCreator/` — this takes a few
|
||||
seconds once and is instant after that.
|
||||
|
||||
## How it works, in one paragraph
|
||||
|
||||
A Dynamic Desktop wallpaper is just a HEIC (HEIF) file that stores several
|
||||
full-size images side by side inside one container, plus a small binary
|
||||
property list — describing which image belongs to which sun position or
|
||||
appearance — embedded as custom XMP metadata under Apple's private
|
||||
`apple_desktop` namespace. That embedding can only be done with Apple's own
|
||||
ImageIO/CoreGraphics frameworks, which aren't reachable from plain Java, so
|
||||
this app's Swing GUI hands the job off to a small bundled Swift command-line
|
||||
tool that does the actual file assembly. The exact byte-level format is
|
||||
documented in [docs/FILE_FORMAT.md](docs/FILE_FORMAT.md).
|
||||
|
||||
## Project layout
|
||||
|
||||
```
|
||||
pom.xml Maven build definition
|
||||
src/main/java/com/dynamicwallpaper/
|
||||
Main.java Entry point
|
||||
model/ Plain data types (WallpaperImage, WallpaperMode)
|
||||
core/ Native helper management, job building, sun-position math
|
||||
gui/ Swing UI (MainWindow + mode panels)
|
||||
util/ JSON writer, thumbnails, validation
|
||||
src/main/resources/native/HeicBuilder.swift Native HEIC/metadata helper (compiled on first run)
|
||||
docs/
|
||||
BUILD.md Compiling and packaging the app
|
||||
FILE_FORMAT.md Full technical spec of the .heic wallpaper format
|
||||
USAGE.md Using the GUI
|
||||
```
|
||||
|
||||
## License / attribution
|
||||
|
||||
This project embeds metadata using Apple's `apple_desktop` XMP namespace,
|
||||
which is undocumented but has been independently reverse-engineered by
|
||||
several members of the macOS developer community. The exact key names used
|
||||
here (`apr`, `solar`, `l`, `d`, `si`, `ap`, `i`, `a`, `z`) were verified
|
||||
directly against a real Apple-shipped dynamic wallpaper file
|
||||
(`/System/Library/Desktop Pictures/Sonoma.heic`) during development — see
|
||||
[docs/FILE_FORMAT.md](docs/FILE_FORMAT.md) for details.
|
||||
Reference in New Issue
Block a user