Release notes
Changelog
1.2.0 — September 8, 2026 · Light or Dark on your terms, and a filmstrip you can work without a mouse
- New: Light, Dark or System — you choose. A button in the top corner of the window cycles between following macOS, always light, and always dark. Loopr has been able to render all three appearances for two releases; there was simply never a control that set one, so the only option you actually had was whatever the Mac was doing. The choice sticks between launches, it turns the native window with it — the glass behind the title bar, not just the panels — and picking Dark on a light Mac no longer flashes white on launch.
- New: reorder the frames from the keyboard. Tab to a frame and press ⌥← or ⌥→ to move it earlier or later in the loop. Until now the only way to change the order was to drag a tile with the mouse — which, for an app whose whole job is putting stills in an order, meant the central thing Loopr does could not be done without one. Each move says where the frame landed, the frame you moved keeps the focus so you can keep going, and trying to move past either end tells you so instead of doing nothing. Both keys are listed in the Keyboard shortcuts sheet.
- Fixed: Loopr can no longer lock up while it is turning an export down. If you pressed ⌘E with an unreadable frame on the strip at the same moment Finder handed Loopr a file, through Open With or a drop on the Dock icon, the window, the menu bar and the close button all stopped responding for good, and Force Quit was the only way out. The strip you had arranged went with it. Both halves of that collision now stay out of each other’s way.
- Fixed: a damaged preferences file no longer resets everything, and no longer stops Loopr opening. If the settings file was left half written, by a crash or a power cut, Loopr quietly went back to factory settings, showed the first launch welcome screen to someone who has used it for months, and then wrote over the damaged file, so the language, export folder, palette, dithering, size, sort order and recent folders were gone for good a moment later. A file that cannot be read is now kept beside the new one, you are not treated as a new user, and a single bad value falls back on its own without taking the settings around it. One bad value in particular used to stop the app opening at all: it appeared in the Dock and quit.
- Fixed: ⌘E and File › Export GIF no longer start a second export on top of the first. The Export button correctly refused while an encode was running, but the keyboard shortcut and the menu item did not. Starting a second export meant one Cancel threw away both and left no file at all, and letting both finish wrote two GIFs, opened two Finder windows and popped a second Saved message minutes after the window looked idle.
- Fixed: Undo puts a frame back into the GIF, or says nothing at all. Undo did two separate things, and they could arrive out of order: the tile came back on the strip while the export still did not have the frame, so the GIF came out one frame short with nothing anywhere saying so. For an animation that is not a cosmetic difference. Undo now waits for the removal it is undoing, and the strip only shows the frame back if it really is back.
- Fixed: removing frames while an animation is still being split no longer destroys the import. Dropping in an animated GIF, WebP or APNG writes its frames out first and puts them on the strip afterwards, which for a long animation is several seconds. Pressing Remove or Remove all in that gap deleted the frames that were still being imported, and the import finished with nothing to show for it.
- Changed: exporting a long GIF takes about half the memory it used to. Every frame was held in full until the whole file had been written, which on phone photos at the default size worked out at about 30 MB per frame: a hundred frames wanted roughly 3 GB and two hundred roughly 6 GB, so an export the app’s own settings invited could run a Mac out of memory. Frames are now handed to the encoder one at a time and released as they go. Measured on 4032x3024 photos, a 24 frame export went from 1124 MB to 775 MB, and the GIF that comes out is byte for byte the same file in the same time.
- Fixed: Return and Space finally do something on a frame. A tile could be tabbed to and could not be activated: Return did nothing at all, and Space — the obvious key for “pick this one” — fell straight through to the play shortcut and started the preview on a different frame. Both now put the focused frame on the stage.
- Fixed: which frame is on the stage is no longer only a color. The selected tile said so with a border and nothing else, so a screen reader never mentioned it and anyone who cannot separate the two edge treatments had to guess.
- Fixed: the chosen loop count was the least readable thing in the window. The selected ∞ / 1× / 3× / 5× chip put white text on a color pair the design system reserves for icons and rules, never for text to sit on: 2.61:1 in light and 1.50:1 in dark, against the 4.5:1 the guidelines ask for. It is 4.53:1 in both now. The badge marking a frame whose delay you set by hand had the same fault at 1.24:1, and is fixed the same way.
- Fixed: the loop and background choices announce themselves. Both were marked up as groups of choices and then contained ordinary buttons, so a screen reader said there was a choice to make and would not say which option was taken. The loop chips also read out as their symbols rather than as “Loop forever” and “Loop 3 times”.
- Fixed: a frame that can’t be read no longer wastes your time and then blames the image library. One unreadable frame killed the whole export, and only after you had already chosen a filename and a folder for a file that was never going to be written — and what came back was the library’s own sentence, quoting a path you never typed. Loopr now checks before opening the save dialog and tells you which frames on the strip are the problem and what to do about them.
- All of the above are in the app’s thirteen languages.
Site update, August 30, 2026 · Buy several apps in one order
- One payment, as many apps as you need. The commercial license window on this page could sell exactly one thing: Loopr. A team that also wanted two other twoplus11 apps paid three separate times, on three separate pages, and filed three separate receipts. That window now carries an Add another app control: search the catalog, set how many computers each app goes on, and pay once. Every app still gets its own license key, and they all arrive in the same email.
- Nothing changes if Loopr is all you want. The window opens exactly as it did, at the same price, with the same count of computers, and an order for a single app takes the route through checkout it always has. The extra controls appear only once the app list has loaded, so a slow or unreachable connection leaves the page as it was.
1.1.0 — August 20, 2026 · Reverse and ping-pong you can actually see
- Fixed: the preview plays the direction you picked. Reverse and Ping-pong changed the exported file but not the stage, which kept walking the frames forward — so the only way to see what either one did was to export a GIF and open it somewhere else. The stage now plays exactly what will be written, turn and all, and switching direction while it is playing takes effect immediately.
- Fixed: “Order added” did nothing at all. Once you sorted by name there was no way back to the order you dropped the frames in — and reversing the direction while the menu read “Order added” quietly sorted by name instead, leaving the label describing an order the strip was not in. Both work now.
- Fixed: a dropped folder built the loop in the wrong order. Frames arrived in codepoint order, so
frame10.pngcame beforeframe2.pngand every accented name landed afterZoom.png. For an animation the order is the content. Folder drops and the Name sort now collate naturally and accent-aware. - New: sort the frames by name, date or size, in either direction — and back to the order you added them in.
- New: duplicate a frame. Every tile has a duplicate button next to its ×, and ⌘D copies whichever frame is on the stage. The copy lands directly after the original, which is what you want for holding a pose a beat longer or building a pause at the end of a loop. Until now the only way to repeat a frame was to add the same file again and drag it into place.
- New: remove all frames. One button in the frame-order bar clears the strip, instead of closing forty tiles one × at a time. Because it throws away the order you arranged and any per-frame delays you set by hand, it says exactly what you are about to lose and asks first; Escape backs out.
- Fixed: a frame that couldn’t be read looked and read exactly like a good one. When an image failed to open, its tile stopped pulsing and sat there as an empty grey square — no marking, no message, nothing in its name — and went into the export as a frame that cannot be encoded. A failed frame is now marked, named and reported when it happens.
- Fixed: the × on a frame could not be reached from the keyboard. It was hidden until the pointer hovered the tile, and a hidden control cannot take focus, so Tab skipped straight past it. Both tile buttons are now reachable by keyboard and appear when focused.
- Fixed: the frames-per-second readout was English, and wrote its decimal point the American way. “8.3 fps” stayed exactly that in all thirteen languages. It now follows the language you picked in the app: German shows “8,3 fps”, French “8,3 ips”.
- Fixed: Escape closes every dialog, including while you are typing — it did nothing at all in a text field, the license key box being the obvious place you would want out, and two of the six dialogs ignored it entirely. Tab now stays inside the dialog you are in, rather than wandering into the window behind it.
- Fixed: a failed export announced nothing a screen reader could catch. The toast was itself the live region and it was polite, for successes, warnings and errors alike — so “Couldn’t export” was wiped without a sound by the next “Saved”. Errors now interrupt, and stay on screen long enough to be read. Completion notifications also appear again; they were being sent through a mechanism Apple retired and the failure was swallowed.
- Fixed: 17 tests that check the window itself had never run. The playback tests — the ones that press Play and confirm the stage really turns around, which is what the Reverse fix above rests on — and the whole accessibility audit were gated so they ran only when someone launched those two files by hand; the suite reported a green 123 and skipped every one. The audit also wrapped each of its checks in a catch-all that turned any failure, including a real accessibility regression, into a skipped test. Both are fixed: 140 tests run with nothing skipped, and the audit fails when it finds something.
- Fixed on this website: the Download button in the mobile header measured 2.61:1 against its fill, well under the 4.5:1 the guidelines ask for. It is 4.59:1 now.
- The company name on an activated business license was always blank. Loopr read it from a field the licensing server stopped sending — the name is there, and it now appears. Nothing about how licenses work changed; only what the window could see.
Site update — August 19, 2026 · A checksum for the download
Website only; no change to the app.
- The download page now publishes the SHA-256 of the
Loopr.dmgit serves, so you can confirm the file you got is the file we put there. macOS already runs the check that matters — Loopr is signed with an Apple Developer ID and notarized by Apple, and a copy altered after we signed it will not open — but there was no way to check a download by hand, which is what anyone installing it on more than their own Mac tends to want. The checksum is on the download section under SHA-256 checksum, next to the one command that compares it with your copy. It is published as a plain file too, atLoopr.dmg.sha256, in the formatshasum -creads.
Site update — August 17, 2026 · The other apps, after the sign-up
Website only; no change to the app.
- The list of the other twoplus11 Mac apps has moved to the bottom of the page, below the email sign-up rather than above it. It used to arrive while the page was still making its case for Loopr, so the last thing you read before being asked for your email was a wall of other apps. It sits at the end now — the page finishes on Loopr, and the list is there if you want to see what else there is.
Site update — August 14, 2026 · Headlines in one color
Website only; no change to the app.
- The headline no longer fades from one color into another across the letters. A gradient poured through text is the house style of every generated landing page on the web, and it was on the hero here, on the small uppercase label above each section, and on the license label in the purchase panel. The words are one solid color now — the accent this page already used everywhere else — so the headline finally matches the page under it.
- The figures on the download-stats page were faded the same way and are plain white now. The color belongs to the bars beside them, not to the digits.
- Gradients are kept where they belong — the buttons, the app tile and the rule above the support panel are untouched. It is only text that stopped fading.
- No change to the app.
Download update — August 12, 2026 · Opens without an internet check
- The copy of Loopr in the download now opens without needing the internet. macOS checks that an app has been approved by Apple before it runs for the first time. That approval can travel inside the app itself, and in the download it did not — so the first launch had to reach Apple to confirm it. Offline, behind a hotel or campus login page, or when Apple’s service was slow, that check could fail and macOS would report that Loopr “cannot be opened because Apple cannot check it for malicious software.” The approval now travels with the app, so the first launch works with no connection at all.
- Automatic updates were never affected — the copy they install already carried its approval.
- The installer window opens at the right size. It was one title bar too short, so the artwork behind the drag-to-Applications arrow was cut off along the bottom and the window opened already scrolled. It now fits exactly.
- The app itself is unchanged: same version, same signature. Only the download was repackaged, so there is nothing to do if you already have Loopr installed.
Site update — August 12, 2026 · How updating really works
- The update instructions were out of date. They described downloading a new copy and dragging it over the old one. Loopr updates itself — it checks about once a week and offers to install the new version in place, refusing any download that isn't signed by us. You can still replace it by hand, and you can turn the automatic check off.
- Nothing else changed. What this page already said about your files — that they are never uploaded, and that there is no account and no telemetry — was accurate and is unchanged.
- No change to the app.
Site update — August 12, 2026 · Readable buttons and small print
- The buttons in the header say what they say. The Tip and Download pills were drawing their label at 55% opacity over a colored fill, which measured as low as 1.6:1 against it — well under the 4.5:1 the accessibility guidelines ask for. Their labels are now solid, and the fill behind them is set a shade deeper so the text genuinely clears that bar.
- The Subscribe and Support buttons too. Their labels were colored for one end of a two-color gradient and disappeared into the other end. Both now use a single fill that the label is legible on all the way across.
- The newsletter note, the “More apps” caption and the version line under the download button were all set too faint to read comfortably; each is now above the AA threshold.
- Keyboard shortcut chips are legible against their own background.
- The screenshot viewer no longer makes every visit quietly re-download this page as if it were an image — a wasted request on each load.
- No change to the app.
Site update — August 11, 2026 · Clearer search results
- Sharing a link to the privacy, terms or changelog page now shows a proper preview card instead of a bare URL.
- The sitemap now reports when each page actually changed, so search engines re-check pages that have been updated instead of assuming they are stale.
- No change to the app.
August 11, 2026 · A new look
- Changed: Loopr has a new app icon. Every twoplus11 app moved to one generated palette, so the color in your Dock, on this site and on the download page is now the same color — they had drifted apart.
- Changed: refreshed the site to match, including the tab icon and the link preview image.
- Changed: the GifMint link at the bottom of this page was showing the wrong icon — it now shows GifMint's own mark.
1.0.1 — August 9, 2026 · Automatic updates
- New: Loopr updates itself. When a new version is out you get a prompt with the release notes and can install it in place — no more visiting the site and dragging a new copy over the old one. This is the last update you have to install by hand.
- New: refreshed appearance — Loopr now uses the shared twoplus11 palette and a regenerated app icon, so it matches the rest of the family.
- Fixed: contrast and keyboard-navigation problems (WCAG 2.1 AA) — faint text is now readable, and every control can be reached and used from the keyboard.
- Fixed: the Check for Updates button spins while it checks, instead of flashing an empty window.
1.0.0 — July 21, 2026 · Initial public release
First release. Turn a set of stills into a clean, looping animated GIF — entirely on your Mac.
- Drop in stills, drag to reorder — PNG, JPG, WebP, BMP, TIFF, even an existing GIF. Arrange the frames into the sequence you want.
- Timing you can see — a per-frame delay on every frame, plus a global delay with Apply-to-all-frames and a live
fpsreadout. - Play/pause preview — true per-frame timing with a scrubber, a filmstrip, and frame-by-frame stepping, so what you preview is what you export.
- Loop & size controls — loop count (infinite,
1×,3×,5×) and a resolution scale for smaller files. - WYSIWYG transparency — behind transparent frames, choose Clear (keeps PNG transparency), White or Black; the preview shows the exact pixels you'll export.
- Optimized GIF export — a clean, optimized looping GIF. Encoding is pure Python/Pillow — no ffmpeg.
- Private by design — 100% on-device, no upload, no account, no watermark, no analytics. Your images never leave your Mac.
- Available in 13 languages. Light + dark mode, full keyboard support, WCAG 2.1 AA.
- Signed and notarized by Apple — macOS 14+, Apple Silicon & Intel.
- Free for personal use forever, including updates; commercial use requires a one-time $5-per-computer business license.