Reference
How AutoPaper works, with the numbers. Every figure here is a value in AutoPaper’s source code, the same on macOS, Windows and Linux unless it says otherwise. The Privacy and Network pages cover what is sent where.
These are the values in AutoPaper 0.1.2.
Settings
On a Mac, Settings… in the menu (⌘ ,), with panes General, Providers, Accounts, Memory, Budget and About. On Windows, Settings in the navigation pane, with the same pages (Keys for Accounts). On Linux, Preferences (Ctrl ,), with General, Providers, Keys, Memory and Budget; About is in the main menu. Each reopens where you left it.
General
| Setting | Default | Choices and notes |
|---|---|---|
| New wallpaper | Every day | Every hour, Every 3 hours, Every 6 hours, Every 12 hours, Every day, Every week, Only when I ask. |
| Pause new wallpapers | Off | No new ones on the schedule; New Wallpaper Now still works. The current wallpaper stays up. |
| Replace wallpapers I dislike | On | Disliking the wallpaper on your desktop makes a new one straight away, within the budget. |
| Match my appearance | On | New wallpapers suit your computer’s light or dark mode. Your keywords come first. Off: nothing about your appearance is sent. |
| When a new one can’t be made | Bring back one I liked | Or Keep the current one. For when you’re offline or a provider is down. Budget blocks always keep the current wallpaper. |
| Show wallpapers (macOS) | Over my wallpaper | Or As my wallpaper. See Putting it on screen. |
| Your own wallpaper | — | Restore My Wallpaper: your own wallpaper again until AutoPaper’s next new one. On Windows also Turn Windows Spotlight back on, when Spotlight was yours. On Linux it’s in the main menu and the tray. |
| Lock screen | On, where there’s a choice | macOS: no setting, as apps can’t set the lock screen picture on its own; it shows AutoPaper’s wallpapers only with As my wallpaper. Windows: Also set the lock screen, unless your organisation manages it. GNOME: a note (its lock screen always shows the desktop wallpaper). Other Linux desktops: a switch. |
| Open at login | Off on macOS and Windows; on on Linux | Windows calls it Open AutoPaper when I sign in. |
| Show in menu bar (macOS) | On | When off, AutoPaper appears in the Dock instead. |
| Notify me about new wallpapers | Off on macOS; on on Windows and Linux | See Notifications. |
Providers
Two groups, Writing ideas and Painting, each with these settings.
| Setting | Default | Choices and notes |
|---|---|---|
| Provider | Demo | Writing: OpenAI, Google Gemini, Ollama, OpenAI-compatible, Demo. Painting: OpenAI, Google Gemini, OpenAI-compatible, ComfyUI, Demo. |
| Server address | Ollama http://127.0.0.1:11434; ComfyUI http://127.0.0.1:8188; OpenAI-compatible: none, it must be given | For Ollama, OpenAI-compatible and ComfyUI. https to any address; plain http only to this computer or your local network (loopback, .local, private and link-local addresses). No user name or password in the address. An OpenAI-compatible address with no path gets /v1. |
| Workflow (ComfyUI) | AutoPaper’s | Or Your own…: a workflow exported with Export (API), with {{prompt}}, and optionally {{width}}, {{height}} and {{seed}}. On Windows, at most 1 MB. |
| Model | Default | What the provider lists, with Refresh. Default is gpt-6-luna / gpt-image-2.5-flare for OpenAI; Gemini 3.5 Flash-Lite / Nano Banana 2 (gemini-3.1-flash-image) for Gemini; the first model for Ollama and OpenAI-compatible servers; Z-Image Turbo for ComfyUI. On Windows the model can also be typed. |
| Painting quality | High | Standard or High. OpenAI: medium or high. Gemini: 2K or 4K. |
| Test | — | Checks the address, the key and the model list with one small request. Waits until a needed key is there. |
With a local provider, Providers also helps install it (Brew Browser on a Mac, and for Ollama on Linux; each project’s own installer on Windows; ComfyUI’s guide on Linux). Wherever Google is chosen, it says: “A free Gemini key may let Google use what you send to improve its products; a paid project doesn’t.” Once a model has made a wallpaper, Providers shows how long one takes on your computer.
Accounts (Keys)
OpenAI API key, Google Gemini API key, and Key for the OpenAI-compatible server’s address (only if it asks for one). Saved as you type, half a second after you stop on a Mac, to the Keychain (service com.autopaper.credentials), Credential Manager (AutoPaper:…, kept on this PC only) or the Secret Service. An empty field removes the key. Each has a Get a key link.
Memory
| Setting | Default | Choices and notes |
|---|---|---|
| What AutoPaper has learned | — | Up to 6 things you’ve tended to like and 6 you’ve tended to dislike, across every mood. Reset What It Learned… forgets them. |
| Quiet period | 6 months | 1 month, 3 months, 6 months, 1 year, 2 years. See Memory. |
| Echoes | Sometimes | Off, Rarely (5%), Sometimes (12%), Often (25%): the chance that a scheduled wallpaper is an echo, when one is possible. |
| Memory | — | Full, or Reduced when the bundled model is missing. |
| Keep up to | 2 GB | 256 MB, 512 MB, 1 GB, 2 GB, 5 GB of images, with how much is in use. |
| Clear History… | — | Keep memory (descriptions stay, so repeats are still avoided; History and Now are empty) or clear memory too (taste as well). Moods, settings and spending stay. Your desktop keeps its picture either way. |
The History section in Memory settings also contains Console help: local retention, report contents, privacy and the link to Console help. Clearing wallpaper history and clearing Console are separate actions.
Budget
| Setting | Default | Choices and notes |
|---|---|---|
| Monthly budget | $5 | No limit, $1, $2, $5, $10, $20, or your own amount: any amount on a Mac; $1 to $1,000 on Windows; $0.50 to $1,000 on Linux. US dollars, by calendar month in UTC. |
| This month | — | Spent so far, each wallpaper’s estimated cost, a month at your schedule, wallpapers made. Estimated from the providers’ published prices as of October 5, 2026. |
About
The version and build, a one-line description, and “MIT · © 2026 Michael Sitarzewski”.
Moods and keywords
| What | Limit or default |
|---|---|
| Mood name | 1 to 40 characters, unique (ignoring case). New moods are “New mood”; a duplicate is “name copy”. |
| Number of moods | No limit; at least one, so the last can’t be deleted. |
| Keywords per mood | Up to 64, each up to 40 characters, unique within the mood (ignoring case). New ones are Must. |
| Surprise | 0 to 100; new moods start at 35. Faithful below 25, Fresh below 50, Adventurous below 75, Wild from 75. |
| Shared by every mood | The schedule, providers, budget, quiet period, echoes setting, memory and taste. |
The first mood in an older library is named from its first two keywords that aren’t Avoids (“Rain, Beach”), otherwise “My mood”. Switching moods makes nothing by itself. Echoes are three times as likely to come from the current mood’s wallpapers.
Writing a scene
- The writer is sent the current mood’s keywords and Surprise, up to 20 recent wallpapers’ descriptions (“don’t repeat these”), up to 6 liked and 6 disliked things, your language, and, while Match my appearance is on, whether your computer is in light or dark mode. It’s asked for four ideas in one answer, each with a title (at most 60 characters), a one-line description, the place, what’s in it, the time of day, weather, season, mood, palette, style, composition, and the prompt (at most 2,500 characters).
- The temperature is 0.4 + 0.8 × Surprise, where the model accepts one. Ideas of its own: none when Faithful, up to 1 when Fresh, 2 when Adventurous, 3 when Wild.
- Each idea is checked: every Must in the prompt, no Avoid anywhere in the prompt, title or description, nothing empty, nothing too long.
- Each valid idea is scored: novelty × (1 − 0.3 × Surprise) + taste × (1 − 0.6 × Surprise) + a random amount up to 0.3 × Surprise. The best one that isn’t too close to anything you’ve had wins.
- If none is new enough, the writer is asked again, at most twice, naming up to 8 past wallpapers it came too close to; then the least similar valid idea is taken. If asking again doesn’t help, it stops early. When 3 of a mood’s last 5 wallpapers had to be taken that way, AutoPaper says your keywords are narrow.
- If the writer or the painter refuses an idea, it’s asked once for a gentler, plainly described scene; a second refusal is reported.
Titles and descriptions are written in your language; everything else, and always the prompt, in English. Prompts ask for a landscape picture without text, letters, logos, watermarks or interface, with calm space where desktop icons sit, and never mention an Avoid.
Memory
- Each wallpaper is remembered as an embedding of its title, description, place, contents, time, weather, season, mood and palette, made on your computer by bge-small-en-v1.5 (BAAI, MIT licence, 384 dimensions), which is part of the app.
- A new idea is compared with every past wallpaper: similarity × a weight for its age, which is 1 within the quiet period and then halves every half quiet period. At 0.79 or more, it’s too close.
- Memory is kept when images are cleared to save space, and when history is cleared with Keep memory.
- Without the model, a simpler word-based comparison is used (threshold 0.70), which catches only near-identical ideas, and Settings → Memory says Reduced.
- Each image also gets a 64-bit picture fingerprint; a near-copy of a recent image is noted in the log, not painted again (that would be billed twice).
Echoes
- Which wallpapers can echo: ones older than the quiet period, not disliked, not cleared from history, and with no echo in their line within the quiet period. Liked ones are three times as likely; older ones more likely (twice as likely at a year old, up to four times at three years); ones from the current mood three times as likely.
- How often: the Echoes setting’s chance, rolled for each scheduled wallpaper when one can echo. Make an Echo in History works on any wallpaper, whenever you like.
- What changes: 2 things below Surprise 50, 3 from 50: weather, time of day, season, the passage of time (decay or renewal), viewpoint or distance, era or medium. Your Avoids still apply; the mood’s Musts and Maybes don’t.
- What counts as an echo: similar to its original (0.72 or more) but not a copy (below 0.93), with at least one of the asked-for changes visible, and new against everything else. Each is linked to its original, with a note saying what changed. A scheduled echo that doesn’t work out becomes an ordinary new wallpaper.
Taste
- Like or Dislike adds one to a tally for each thing the wallpaper was made of: its place, contents, palette, mood, style, time of day, weather, season and the keywords used. Changing your mind undoes the old rating; choosing the same again clears it.
- Tallies halve every year.
- Something becomes a hint to the writer (“tends to like”, “tends to dislike”) once about three ratings agree: at least 65% liked, or at most 35%. Up to 6 of each are sent.
- Taste is a hint, never a rule, and counts for less the higher Surprise is. Avoid is the rule.
Painting and sizes
You don’t choose a size: AutoPaper asks for the one closest to your main display’s shape, as large as the painter allows and no larger than your display. Until the app has told it the display’s size, it aims at 3840 × 2160.
| Painter | Sizes |
|---|---|
OpenAI (gpt-image-2 and later) | 3840 × 2160, 2560 × 1440, 1920 × 1088, 3632 × 2272, 2560 × 1600, 3840 × 1648, 3440 × 1440, and portrait 2160 × 3840 and 2272 × 3632 |
| Google Gemini | The nearest of 16:9, 21:9, 3:2, 4:3, 1:1, 3:4, 2:3 and 9:16, at 2K (Standard) or 4K (High): 2752 × 1536 or 5504 × 3072 for 16:9. Nano Banana 2 Lite paints at 1K |
| ComfyUI: Z-Image Turbo, Krea 2 Turbo | Up to 2048 px a side and 2,965,760 pixels, in steps of 16: 2048 × 1152 for 16:9, 2032 × 1312 for a 16:10 Retina display |
| ComfyUI: Qwen-Image 2.1 | Up to 2752 px a side and 4,300,800 pixels: 2576 × 1664 for a 16:10 Retina display |
| ComfyUI: your own workflow | Up to 2048 px a side and 1920 × 1088’s pixels, unless it loads one of the models above |
| OpenAI-compatible | Any size in steps of 64, up to 2048 px a side and 4,194,304 pixels |
| Demo | Up to 3840 × 2160 |
The pixel cap for Z-Image Turbo and Krea 2 Turbo is where their image decoder fails in ComfyUI on Apple silicon; it applies on every computer, since AutoPaper can’t tell what a ComfyUI server runs on. The bundled workflows take 8 steps (Z-Image Turbo, Krea 2 Turbo) and 25 (Qwen-Image 2.1).
Every image is checked before use: PNG, JPEG or WebP (judged from the file itself), at most 50 MB, 64 megapixels and 16,384 px a side, turned upright if its camera data says so, and flattened if it has transparency.
Putting it on screen
- Every display gets the same wallpaper, made for it: cropped from the centre to the display’s shape, scaled to its exact pixels (Lanczos), lightly sharpened only when enlarged more than 1.25 times, and saved as a JPEG at quality 90 without metadata. On Linux, the Wallpaper portal takes one picture for every monitor, made for the largest.
- macOS, Over my wallpaper (the default): one borderless, click-through window per display, just above the desktop picture and below the icons, on every Space. Wallpapers cross-fade in 1.6 seconds (0.3 with Reduce Motion). Your desktop picture is never changed; quitting closes the windows.
- macOS, As my wallpaper: sets each display’s desktop picture, after noting your own for each, so it shows in Mission Control and on the lock screen. macOS doesn’t let apps put back its moving wallpapers exactly.
- Windows: sets each monitor’s wallpaper, positioned to fill, and the lock screen. Before the first, it keeps a copy of each monitor’s picture, its position and colour, and whether it was a slideshow or Windows Spotlight, and puts them back when AutoPaper quits or you choose Restore my wallpaper. Pausing keeps the current wallpaper.
- Linux: through the desktop’s Wallpaper portal, which may ask once. On GNOME (outside Flatpak), your own wallpaper settings are recorded first and put back when AutoPaper quits or you choose Restore my wallpaper. Pausing keeps the current wallpaper.
The schedule, failures and the budget
- The schedule counts from the last new wallpaper, of any kind: on the schedule, New Wallpaper Now, a disliked one’s replacement, or an echo. Bringing back an old one doesn’t count. A scheduled wallpaper starts early by its estimated time (at most half an interval), so it’s ready when due.
- The apps check when it’s due, and again when the computer wakes or is unlocked.
- After a failure, the next try waits 10 minutes, then 20, 40, and 60, or longer if the provider asks (at most an hour). The first failure in a row that isn’t yours to fix brings back a wallpaper you liked, unless you chose Keep the current one. A painting ComfyUI couldn’t do waits for the next scheduled time instead. Cancelling isn’t a failure.
- Before each paid request, its estimated cost is checked against what’s left of the month’s budget. Each paid request counts as soon as it’s answered, even if the wallpaper doesn’t work out. Local providers, OpenAI-compatible servers and Demo cost nothing.
- A request that would exceed the limit is blocked before credentials or the provider are contacted. The current wallpaper stays. The notice shows estimated spend, limit and next request cost; the month resets in UTC, even while new wallpapers are paused or set to Only when I ask.
- Estimated prices (as of October 5, 2026): OpenAI’s default painter at 3840 × 2160 about $0.026 (Standard) or $0.10 (High); Nano Banana 2 about $0.10 at 2K and $0.15 at 4K. Writing a scene costs about a tenth of a cent with OpenAI’s default writer, and about half a cent with Gemini’s.
Time estimates
- Every finished request to a provider is recorded on your computer: writing or painting, provider, server address (for your own servers), model, size, steps, and how many seconds it took. The newest 50 are kept for each provider and model. They’re never sent.
- An estimate is the median of comparable records, each weighted by age (a 30-day-old one counts half) and scaled to the size and steps wanted. With no records, there’s no estimate.
- While painting with ComfyUI, progress follows its steps, at the pace measured in that painting; otherwise it follows the estimate, showing at most 95%.
- ComfyUI jobs have no fixed time limit. One is stopped after 3 minutes without progress following a step (or 4 times its slowest step), 10 minutes in a step-less part, or past the longer of 30 minutes and 3 times its estimate. Hosted writers have 60 seconds and painters 240; Ollama and OpenAI-compatible writers and painters 10 minutes, or 3 times how long that call usually takes on your computer when that is longer (at most an hour), because a model loaded from scratch can take minutes. The Network page has every limit.
Console and statistics
Console records each wallpaper attempt, including failures, budget blocks, cancellations and interruptions, grouped by date. A selected run shows the actual prompts, provider/model names, responses, retries, candidate checks, errors, elapsed time and estimated cost. Requests made before Console was added are unavailable.
| Statistic | Meaning |
|---|---|
| Outcomes | Counts of succeeded, failed, blocked, cancelled, interrupted and running attempts, across all retained runs. |
| Runs by day | The same outcomes grouped by the run’s start date in UTC. |
| Success rate | Succeeded ÷ (succeeded + failed). No percentage until there is a successful or failed attempt. |
| Average run time | Mean elapsed time of finished successful and failed attempts. Blocked, cancelled, interrupted and ongoing attempts are excluded. |
| Average call time by model | Mean measured duration of completed writing or painting calls, grouped by provider, job and model, with the number of calls. Uses recent timing samples linked to retained runs. |
Model timing starts with calls recorded after this update; older timing samples are not assigned to runs by guessing. The newest 50 samples for each provider, server, model and job are kept for time estimates, so model averages can cover fewer calls than the outcome charts. A run can include more than one call and additional memory, download and display work. Chart values are also available as a table.
Up to 200 runs are kept for 30 days locally. Each event is limited to 65,536 UTF-8 bytes, with up to 255 events and roughly 512 KiB of details per run; truncation is marked. Credentials and image bytes are omitted. Copy Details and Export JSON… share only the selected run when you choose them. Clear Console… removes its records and statistics, keeping wallpapers, memory, settings, spending and the separate progress time estimates.
What’s stored, and where
| What | Where |
|---|---|
| Moods, keywords, settings, history, memory, taste, spending, timings and Console runs | autopaper.sqlite3 in the data folder |
| Wallpapers as delivered | images/year/ in the data folder; the oldest go first past Keep up to, never liked ones or the one on the desktop |
| Thumbnails, 640 px wide | thumbs/; kept when the original goes |
| Wallpapers made for each display | renders/; a cache, cleared first, except what’s on the desktop |
| The data folder | macOS: ~/Library/Containers/com.autopaper/Data/Library/Application Support/AutoPaper. Windows: the app’s LocalState folder. Linux: ~/.local/share/autopaper |
| App preferences | macOS: AutoPaper’s preferences, in the same container. Windows: the app’s settings. Linux: GSettings, io.github.msitarzewski.AutoPaper |
| Keys | Keychain, Credential Manager, Secret Service |
Failed wallpaper attempts are kept 30 days, without images. Console has its separate 200-run and 30-day limits, and timings have the sample limits above. Other data stays until you delete it or the image storage limit removes it. Privacy has the full list.
Accessibility
AutoPaper aims for WCAG 2.2 AA as W3C’s WCAG2ICT applies it to desktop software, and for Apple’s, Microsoft’s and GNOME’s accessibility guidelines. This site aims for WCAG 2.2 AA directly.
- Spoken names: every control and image has one. Wallpapers are described by their one-line description and, for an echo, what changed; keywords say their weight (“rain, Must”); Surprise its value and band; moods whether they’re current (“Rainy beach, current mood”); Like and Dislike whether they’re on; progress its percentage and time left.
- Announcements: stages, problems and changes (a mood made current, a keyword moved) are announced politely.
- Keyboard: designed to work entirely from the keyboard, including reordering and every History action. See Keyboard shortcuts.
- Colour: never the only sign. The current mood has a checkmark and the word; ratings and echoes have badges with words.
- Motion: wallpapers cross-fade. While one is painting, the picture in the window ripples (macOS) or a veil breathes (Windows) or fades in once (Linux); with reduced motion on, it holds still. New wallpapers can be paused.
- Contrast and transparency: standard controls throughout, so Increase Contrast, high-contrast themes and Reduce Transparency apply.
Each app has been checked through its system’s accessibility interface (the macOS accessibility API, UI Automation on Windows, AT-SPI on Linux) in development builds. Full passes with VoiceOver, Narrator and Orca are still to come; if something is hard to use, please open an issue.
Siri and Shortcuts
Five App Intents on macOS, available to Siri (with ready-made phrases) and the Shortcuts app. Windows and Linux have none yet.
| Action | Siri phrases | What it does |
|---|---|---|
| New Wallpaper | “New wallpaper in AutoPaper”, “Make a new AutoPaper wallpaper” | Makes a new wallpaper from your current mood now and puts it on the desktop. |
| Like This Wallpaper | “Like this AutoPaper wallpaper”, “I like this AutoPaper wallpaper” | Tells AutoPaper you like the wallpaper on the desktop, so it makes more like it. |
| Dislike This Wallpaper | “Dislike this AutoPaper wallpaper”, “I don’t like this AutoPaper wallpaper” | Tells AutoPaper you don’t like it; with Replace Wallpapers I Dislike on, it makes a new one. |
| What’s on My Desktop | “Describe my AutoPaper wallpaper”, “Read the AutoPaper wallpaper” | Says what AutoPaper has put on the desktop, in words, and returns it as text for shortcuts. |
| Switch Mood | “Switch AutoPaper to Rainy beach”, “Use the Rainy beach mood in AutoPaper” | Makes a mood current. Nothing is made right away. |
Siri tends to answer questions itself, so the phrases are commands. In the Shortcuts app, any of these can have a keyboard shortcut of its own.
For developers
Every decision lives in one Rust library, autopaper-core: composing, memory, echoes, taste, moods, the schedule, the budget, providers, the network rules, images and storage. The three apps are native (SwiftUI on macOS, WinUI 3 on Windows, GTK 4 and libadwaita on Linux) and use it through UniFFI, or directly on Linux. Each provider is one file in core/src/providers/. The core’s tests run with cargo test. See CONTRIBUTING.md.
The repository includes autopaper, a command-line tool over the same core, with keys from a .env file:
autopaper moods # the moods, the current one marked, with their keywords
autopaper compose # one writing request: the ideas, their checks and scores
autopaper generate # make a wallpaper now, with the progress an app shows
autopaper models images # what a Model menu lists for the painter
autopaper --display 3840x2160 run # what an app's timer does: make one if it's due
autopaper simulate --days 1100 # years of wallpapers with stand-in providers: memory, echoes, taste
The source is on GitHub; its README has the steps to build each app.