Every version of Spot Tone that has shipped, newest first—the same notes the app shows before you update. Current release: 1.0.1.
Indie and Lab licenses are on sale at spottoneapp.com: Indie is $99 once, for two Macs; Lab is $50 per seat a month, with a 14-day trial. If you installed during the beta, every feature stays free through December 31, 2026, and the app tells you so once at launch. New installs get the 14-day trial of everything, then the hand tools.
A wide stroke used to start from whatever film happened to touch its edge and could settle a few levels dark on grainy film; it now starts from the film around it and reaches the film's level, including when the edge of the stroke sits on the mark's own halo, or on an earlier repair.
On coarse-grained film a large fill came back as fine salt at the right strength; the fill's grain is now built to the film's own clumping, measured around each stroke.
When the app learns a license was revoked, it drops it, tells you at once, and Settings ▸ License shows the date. Entering a revoked license shows the same explanation.
The list under Settings ▸ Tone panel was cut off after five rows, so Levels and Split Toning could not be reordered or hidden from there. The list now fits all seven.
New installs start with the October 11 detection model.
Each tool in the toolbar now shows its name under the icon. View ▸ Show Tool Labels turns them off once you know them.
⌘+ and ⌘− step through set levels (25%, 33%, 50%, 67%, 100%, 200%, and up) instead of odd in-between ones, and a 1:1 button sits beside the zoom readout in the status bar.
When a commit skips a frame, the status line names it and says why. A commit also uploads on its own once its files have settled, instead of waiting for your next edit.
A second model checks each large mark and sets aside the ones that are part of the picture, such as printed letters, eyebrows, the highlight on a smile, and bright rims along a dark shape. Small marks are untouched. It's on by default; Settings ▸ Detect ▸ Advanced turns it off.
When two thin scratches close together are detected as one wide band, Repair still evens out the band and now also fills the fine line each scratch left behind. The film between them stays as it was scanned.
It showed an older disclosure as raw text.
It now describes everything the app sends, including crash reports as macOS writes them and the notice the developer gets when the app checks for an update. You'll be asked to read it once when you open the new version.
The prompt and Settings ▸ Contribute now describe it as it is: a copy of the frame you corrected, downscaled if it's over 3,600 pixels on its long edge, with your marks and your Sensitivity setting, and now and then a frame you accepted as-is when the detection was borderline. Uploads carry a random ID and the name of your Mac. Nothing about what is sent has changed; the description has.
Checking whether each file is a camera scan no longer happens on the main thread, so a large folder on a server no longer makes the app stutter.
for the open-source parts inside the app.
Where a scratch crosses a gentle gradient, 0.2.96 could lay a dark patch on either side of the mark. Repair now checks what it is about to write outside the mark and, when that would move the film by more than a few levels, fills the mark on its own instead. Repairs across hard edges are unchanged.
The Hot Folder's Start and Stop button now runs the width of the panel in the accent color, like Detect and Repair.
On a file that came from a camera copying film (the Lento dock, or any capture with camera EXIF), Detect now sets aside marks that lie along the picture's own edges, so a tree line or a jaw is no longer read as a scratch. Scanner files are untouched; this only switches on when the file says it is a camera scan.
The Brush section of the panel now has a Softness slider for how a heal meets the film at the edge of your stroke, the same setting as Settings ▸ Editing. Hard, the default, is unchanged.
The status line could keep saying "composing the repair…" after a cancel until you switched tools.
On Macs with less memory, switching between the scan and a large repair (P) could show an empty canvas for a moment; the previous picture now stays until the new one is ready.
A mark on the unexposed film around the picture, whether you brush it or Detect finds it, is now rebuilt from the picture's own edge. The edge carries on straight under the mark with its own softness, and the border keeps its own grain. Before, a big blob there could come back jagged or speckled with grain from the picture.
Sync Settings is now listed as ⌥S, the key the Image menu shows. Help now also lists Shift-P for the Tone preview, Detect Everywhere, ⌘. to stop, zoom in and out, Option-arrows, Save Session As, and Save & Return. And ⌘? now opens Help, where it used to open the release notes on the website.
The last few pixels at the border used to stay behind as a short bright stub.
Where a hair crosses into, say, the soft edge of a hat, the repair could pull the light background into the shape as a faint smear; those stretches now get the same edge-aware fill as hard edges.
Two changes since then had undone it: a bright hair crossing an edge was handed to the fill as its whole thick detection and left a trail through the edge, and the second pass that re-heals long marks had stopped using its edge-aware fill. Both are back to right, and the edge pass's reach is now recorded, so it no longer shows as unexplained violet.
Its switch moved under Settings ▸ Detect ▸ Advanced, next to a new one: Show the Full-res pass checkbox. With that on, the Detect panel gets a checkbox on large frames for whether the model also runs at full resolution. Uncheck it on a frame where the pass marks texture as dust, and that frame remembers. It replaces a three-way switch that could draw oversized and unlabeled.
When the overlay switches to cyan on a frame with orange tones, fence-sitters turn magenta, and the tooltip now says so.
The second pass that re-heals long marks section by section blends a little film on either side of an edge. That blend is now recorded as part of the repair, so the overlay draws it as the mark's reach instead of violet, and erasing the mark takes it back.
Skipping examined film is off unless you turn it on, and the first Detect over a frame with your own marks or heals now explains what it will do and offers to leave that film out, with hollow marks showing what it would have found there. Your answer can be remembered; Settings ▸ Detect changes it later.
When Detect marks a scratch as a band, the repair levels the scratch's lines rather than filling the band. It used to stop where the detection stopped, which on a long fine scratch left the last stretch standing; it now follows each line past the detection while the line clearly continues.
The lighter area the overlay draws around a repaired mark now shows only film the repair visibly changed, close to the mark, with no gap between the two.
When memory ran low, a filmstrip thumbnail still on screen could be cleared and never asked for again.
With Clone, Crop or Dust Lasso, the tool's cursor stayed on while you used the bar's sliders.
Erasing tells the repair to keep something as film, and a fill used to leave every erased pixel alone, so a blemish whose soft edge you had erased earlier kept a faint ring around it. Right beside a new stroke, erased pixels that are clearly part of the blemish now join the fill; erased film that reads as the picture stays as it was.
On a patch that shades from light to dark, a repair came out lighter than the surround at the top and darker at the bottom, a visible bubble. The fill now takes on the same slope as the film around it.
When detection marks a band holding a few fine parallel scratches, Repair now levels the scratches out instead of repainting the whole band, so the film's own grain stays.
Spot Tone no longer treats an exported file as the frame's saved repair, so editing an export in Photoshop can't change what the app shows for that frame later. Repairs are now kept as just the pixels they changed, in the app's own data: a few megabytes per frame instead of a full-size copy, and a repaired frame comes back exactly as you left it.
A speck or short hair brushed where dark hair fades into skin, or inside a dark pupil, could fill a patch brighter than anything around it, or come out speckled and clotted. The fill now stays with the shading it sits on and carries the film's own grain.
A small fill cloned from nearby film used to bring the donor patch's own light-to-dark tilt with it, so a disc could brighten downward where the picture darkens. The fill now takes the tilt of the film around it; its brightness and grain are unchanged.
Questions, bug reports, before-and-afters, and the person who makes this reading along. Help → Spot Tone Community, or discord.gg/MteUVyp6zy.
A speck on a bright out-of-focus highlight could heal as a dim disc with a hard rim, sometimes tinted toward the donor's color. The fill now follows the curve of the light around it instead of a flat estimate, takes the local color, and the thin ring the clone lays around a mark moves with the mark instead of being left at the donor's level.
When Scratch follows a scratch past the ends of your stroke, it now keeps to a narrow cone around the line you drew. On water it had left a scratch for the brighter wave crests beside it and leveled those instead; the trace now stops where the ridge it is following turns away.
Where Sensitivity starts, Detect-on-open, the full-resolution pass, and scanner-line removal moved from Editing into their own pane; Editing keeps the brush and repair options. The Editing pane had outgrown a 13-inch screen.
Settings has a slider for how the brush heal meets the film at the edge of a stroke. Hard, the default, is how it has always worked; a few pixels of softness blend the last pixels of the stroke into what was there, so the seam shows less on smooth skin and skies.
On scans the pass applies to, the Detect panel has a Settings / On / Off switch for that frame alone. Off helps on grainy frames and on textures the pass mistakes for dust (water, foliage); the choice is saved with the session and copied by Copy Settings. When a large area was marked only by that pass, the status line says so and points at the switch.
Where Repair bridges the gap between two marks on a faint scratch, or takes in the soft edge of a blemish you had erased, those pixels now appear in the overlay in a lighter tint of the mark color. Before, they changed without a mark to say so. The eraser puts them back as it always did.
On a frame with your own marks or heals, a new detection that lands on film you examined is kept quiet: drawn as a hollow mark, not repaired. Your verdict stands; Detect still marks everything else. Brush over a hollow mark to take it, or use Detect Everywhere (⌥⌘D) to get every mark regardless. The status line says how many were kept quiet each time.
The last few percent were below the level where the detector agrees with itself from one tile of the frame to the next; on textures like water it could draw a mark with a ruler-straight edge along a tile boundary, and the repair followed it. Frames saved at 99% open at 95%.
In a repair wider than about 60 pixels, the grain was put back only near the edges; the middle stayed smooth and pale, with a hard, right-angled border between the two. The grain now reaches the whole fill.
A stroke larger than the fill engine handles in one piece was filled in sections, and each section came out a slightly different tone, with hard rectangular seams between them. On a large-format plate a wide stroke could leave visible blocks. The sections now blend into each other, so a big heal reads as one fill.
A stroke over a spot you had already repaired used to start again from the original scan, so a second pass could put the blemish back before it could improve on the first. Each stroke now starts from the picture as it looks at that moment, so you can work a stubborn spot in several passes.
A brush heal that touched the edge of a chair back or a hat brim could pull the far side's tone across into the fill. Where the film around a heal is two distinct levels, the fill keeps to the level it sits on.
A repair between two scanner lines on color film could borrow a neighbor's tint, leaving a faint orange mark on blue sky. The fill now takes the color of the film around it and keeps only its own grain.
On grainy film, a scratch too close to the grain to follow now gets a message suggesting the brush instead of a wandering trace.
Repair used to trim a detected hair back to its brightest core, and the fill picked up the soft edges it left behind, leaving a pale copy of the hair. The parts the detector is sure of now stay in the repair.
Canceling a batch export, Repair All, or stopping the Hot Folder now interrupts the frame being repaired instead of letting it finish and write its file.
Same K shortcut, same behavior, a name and icon that say what it's for. Its tooltip and Help explain when to use it: fine scratches the picture still shows through, at any angle; gouges still belong to the brush.
Hover any button in the main window, the tools, Fit, 1:1, rotation, the inspector, or a filmstrip thumbnail, and it says what it does. On thumbnails, the tooltip explains the frame's badges.
The status line and tool strip stayed dark in Daylight; they now follow the theme, and so does the window's title bar.
Heals you made with the brush and scratches you leveled were left out when a batch rebuilt a frame's repair; they're now laid back on, as a single-frame repair always did.
The orange marks showing where the Scratch tool leveled a scratch now reopen with the frame, and undo and redo move them with the change.
After Repair fills a long scratch or hair, it goes back over it in short pieces, the way you would with the brush, and each piece is re-healed on the repaired picture. Where a scratch crosses a soft edge, like the rim of a hat against the sky, the same steps the brush uses keep the fill from bleeding one side into the other. Short hairs lying on a soft edge get the same treatment. It is on by default and adds a few seconds to a frame with long marks; Settings ▸ Editing has "Re-heal long marks in sections" to turn it off.
It used to measure a line across the full width of the picture, so a scratch covering part of it went unnoticed. Now, when a line doesn't run the frame, the tool measures along your stroke and removes only that line's brightness offset, leaving the grain untouched, which works well for fine straight scratches on grainy film. Scanner lines that run the whole frame are repaired exactly as before.
Draw over part of a slanted or curving scratch, with any brush size, and the tool finds the scratch under your stroke, follows it past both ends for as long as it continues, and removes its brightness offset along its length, keeping the grain. The stroke doesn't have to sit exactly on the scratch. It works on fine scratches over intact film; on a gouge, a blown-out mark, or a picture edge it declines and says so in the status line ("this mark needs the brush") rather than making it worse. Scanner lines that run the whole frame are repaired as before.
With the overlay on (O), the pixels it leveled are drawn as marks (they are not part of the mask, so Repair leaves them alone). With the overlay off, they flash for a second after the stroke finishes. ⌘Z removes both the change and its mark. The overlay setting is now remembered between launches, as you last set it.
A long horizontal stroke also swept every column it crossed and could mistake textured picture detail for vertical lines, changing far more of the frame than intended.
A tiny speck at the middle of a tight loop could be passed over for a larger mark nearby, and a dark speck on a frame where most dust reads bright could be ruled out before it was judged. The loop now gives the speck at its middle the benefit of the doubt, whichever way it reads, and chooses by how clearly each candidate stands out rather than by its size. Keep the speck near the middle of the loop.
It measured the tone partly from the pixels being covered, so cloning over a dark scratch could carry some of the scratch's darkness into the fix. It now measures a ring of film just outside the stroke. It also uses far less memory when the source is far from the stroke on a very large frame.
A repaired 16-bit frame could leave the canvas an empty gray for a second or two while it loaded; a soft preview of the frame now fills that moment.
Settings ▸ Panels has "Place Hot Folder below Tone," or right-click the Hot Folder header.
Where the files go (a folder, with or without the scans' own subfolders, or next to the originals), how they are named, and the format are all on one sheet that opens filled in with what you used last, so Return exports as before. Nothing in it hides or moves. Save the whole setup as a preset and pick it next time. In Overwrite Mode the Export button still writes straight back over the originals; File ▸ Export makes a copy through the dialog instead.
Each slot is the original name, text you type, a sequence number, the date, the folder, or an order detail, with an example of the result above them. A sequence starts wherever you say, and how you write the start sets the padding: 0001 starts at 1 with four digits.
Order number, client, client ID, and twin check sit in the dialog and can go into the file name. One filled in but not used in the name gets a note, so it does not go missing quietly.
Softness, opacity and tone matching sit in a bar above the picture, the way Crop's options do. Tone matching evens out a clone taken from a slightly lighter or darker part of the film.
On our test frames it makes about a quarter fewer false marks on grain, reticulation and color noise, and finds nearly all of the dust the previous one did. It also arrives on its own as a model update, if you do not update the app.
In gray, grainy areas a small loop or dab could settle on a clump of grain instead of the faint speck you circled. It now weighs how much evidence each candidate has as a whole, so a real speck wins.
Detected marks over a certain size skipped the smoothing and level matching every smaller heal gets, so a long hair or scratch could heal a little mottled, or a level off the film around it. They now get the same treatment.
With the preview off, erasing marks and pressing P could fade the picture toward gray for a moment before the repair appeared.
Browse Sessions labeled saved sessions by the folder of their first frame; they now show the name you saved them under, with the folder in the tooltip.
It sits above Tone in the inspector and says what it does before you choose a folder.
On skin in a tintype, every detected speck came back as a slightly smoother disc with a soft edge, where a lasso or brush heal of the same speck looked right. The detected spots were being sent through the magnified repair path meant for hand strokes, which averages away fine grain; they now take the same path the hand tools do only when you actually brushed them.
A Lab seat whose subscription ended, on a Mac that had also been offline for a month, could fall back to watermarked exports. It now falls back to Indie and stays there: the lab automation stops on the day the subscription ends, and everything you bought outright keeps working cleanly, offline, indefinitely.
They appear once on the first launch of this version, and again only if they change. Both are readable any time under Help, and a new Settings ▸ Privacy tab shows what leaves your Mac, what stays on it—with the folders, their sizes, and a button to go look—and when you accepted. Nothing is sent to us, not even the install record or a crash report, until you have accepted.
0.2.87 added a filter meant to stop camera-scanned frames marking a subject's outline as dust, and it was too eager: a speck that happened to sit on a strong edge—the shoulder of a shirt, the side of a face—could be skipped. The filter is off by default again, and when it is on it now only applies to long, thin marks that trace an edge, never to compact specks.
When a wide stroke covered a thin hair, the repair kept the hair and refilled the film around it: the fill for the hair sampled a small window that, deep inside a wide stroke, held nothing but the stroke itself, so it wrote the hair back. The fill now reaches for real film, and the stroke is trimmed to the hair and its flanks rather than to everything on mottled film that looked a little off—so less of the surrounding film is rewritten, too.
The fast path that repairs small specks worked in a magnified crop and finished there, so its fills could sit a couple of levels off the surrounding film with too little grain. They now get the same level and grain matching as everything else, at the frame's own scale.
The repair read the healed image through a generic color space while the scan itself was read as-is, so on a scan whose profile sits far from sRGB every heal landed a step brighter than its surroundings—and each pass over it made a brighter patch. Both are now read the same way.
The last half-second of main-thread work at open—converting the repaired image's tiles for display—now happens in the background, so the window stays responsive from the first frame.
Every tone section (Light, Curves, Levels, Color, Split Toning, the Vectorscope), Detect and Clear Detection, the Before chip, the View menu (Visualize Spots, the Examined-Area Overlay, Navigator, Workspace Background), Auto-Rotate, saved sessions and Browse Sessions, and the Getting Started tour each have their own entry, in the same words as their tooltips.
A large repaired TIFF was being read from disk again every time the canvas drew a piece of it—on the main thread—so a big 16-bit frame could lock the window for ten seconds or more while it opened, and again after each edit. The repaired image is now read once, in the background. This is also the cause of the sluggishness some of you saw stepping between repaired frames.
When the film sat near a boundary between the tone bands the grain matcher works in, fill pixels could be read against the wrong band's table and pulled down by up to 26 levels—a white speck became a dark spot, and each pass over the spot made it bigger. The tables now continue sensibly past the fill's own range.
Circling a speck in an area you have already worked could appear to do nothing: the lasso can only add marks, and those pixels were already marked. What it finds now joins the heal, bounded to what you circled.
Erasing a mark heals the area, and that was switching the preview back on every time—so working with marks visible meant pressing P again after every erase.
Repairing a frame and then brushing or healing it left the result in memory only: the file on disk was abandoned as soon as the first heal landed, and nothing replaced it. Reopening the session re-ran the repair from scratch instead of reloading yours, which could not give back the same frame. The repaired image is now written back to disk a few seconds after you stop working on it, and any repair still in memory is saved before the app quits (the status line says "Quitting…" while it does).
A find at the edge of a loop could be re-healed past it, because the sweep searches a padded area around what you drew and the fill grows a little around what it finds. The write now stops at the loop, with a one-pixel rim so a mark touching the line still heals whole.
Circling a cluster of small dots, the lasso could take one bigger blob elsewhere inside the loop instead. Among marks that clear the bar, it now prefers the certain one nearest the middle of your loop, rather than the largest.
, the same question Detect asks per frame, and with the same "don't ask again."
Turning the preview off to erase is remembered, but an explicit Repair, or moving to another frame, shows the repair again.
It removes a detection for good, and it sits directly under Detect Dust in the Image menu, so it was easy to hit by accident. Suppressible.
While a sweep was still working, finishing it wiped the outline of the next loop out from under the pen, and the rest of that loop was never drawn.
If a frame already has your marks or heals on it, Detect asks first and says that it cannot be undone. In exchange, Repair no longer asks: detecting, touching up and then repairing is an ordinary way to work and it used to warn every time.
A session you named with Save Session As… now appears in its own Saved section at the top of the browser, instead of only in a drop-down.
While you drag, the preview is computed from a smaller copy and the full-size version lands when you let go.
, instead of waiting for the next one.
: levels, light, highlights and shadows, color, curves, split toning, crops drawn, and Hot Folder runs. Local unless you turn sharing on, and still numbers only.
Circle a single spot and, if the best thing in the loop is a hair under the bar, it is taken: you said there is a mark there. Wide sweeps are unchanged, so clean film stays quiet.
On some Macs the button did nothing.
, and the menu explains what it shades: the film you have not yet looked at closely on this frame.
Hold it to see the scan as it was before the repair, let go to come back. P still leaves it on if you want both hands free.
The preview copy a drag works from is now made once per drag instead of many times a second.
Selecting a repaired frame re-read its full-size repair from disk before it would draw anything, which on a folder of repaired frames turned every step into a pause.
Dragging a tone control while zoomed in snapped the canvas back to Fit and drew the marks overlay at the wrong size for the length of the drag.
In rare cases part of the picture kept its pre-repair pixels until you toggled the repair preview.
Moving to another image flashed the default surround until the picture appeared.
Zoomed out, only part of the overlay was painted, and which part changed as you toggled it or zoomed.
A small revert button appears in a section's header when something in it has moved, and puts just that section back. Curves, Levels, Light, Color, and Split Toning each keep their own.
Undoing a stroke while its heal was still running could drag the repair a version behind the marks, and from then on every heal was judged stale even though the picture was current. The badge only reads out of date when it is.
Its description had drifted onto the button below it, so neither one said what it did.
: "401 marks, 23 tiny, 41 big." Hover it for what tiny and big mean and how many marks came from Detect versus your brush.
A hue and strength for the shadows and for the highlights, and a balance for where they meet. It changes color, never brightness, and it works on black-and-white scans too: a toned black-and-white frame exports as RGB so the tone survives.
Two new sliders in the Light group, Camera Raw's numbers. They work by region, not by pixel: a blurred guide decides what counts as shadow or highlight, so a bright speck in a dark area is left alone and edges don't halo. Lab tier, like the rest of Tone.
A wide stroke down a plain area next to a brighter one used to heal with a smooth patch in the middle and coarse dark specks at the ends. Two causes: the fill's own grain was being counted short, so a second layer of grain was laid on top of it; and the grain matcher was judging the fill against the wrong film. Both fixed; the film's grain now runs straight through the stroke.
Before, it kept its marks but never got its heal, and the repair read as out of date.
A big lasso can take ten or twenty seconds to heal after it reports what it found. The Repair section now shows a sweeping bar, a clock, and a count of heals waiting their turn while any heal is in flight, with an ✕ to stop. Stopping removes the loops that hadn't landed yet, marks and all, and leaves finished ones alone. ⌘Z on a loop that is still healing stops its fill too. The status line says "Healed N px" when a heal lands.
, not after its heal finishes. ⌘Z also takes back a lasso that is still being scored, or waiting its turn behind one, before it ever becomes marks.
Undoing or redoing a brush stroke or a lasso puts the mark and its heal back together, so a repair that was current stays current.
Where a repair had absorbed a mark's faint flare just outside the mask, erasing the mark used to leave that flare standing as a light halo. It now goes too.
When a stroke follows a hair or scratch, the ends of the defect outside the stroke used to guide the fill, so a ghost of the line continued across the repair. The fill now ignores the parts of a line that run out of the stroke's ends; a line that crosses a stroke is still treated as picture and continues.
The grain synthesized into a fill was finer than real film grain, so a repair could read as a smoother patch. Each fill now measures how the surrounding grain clumps and matches it, so a 120 scan and a 35mm scan each get their own grain.
The fill was being given a full dose of synthetic grain on top of texture it already had, and the dark tail of that excess showed as tiny black specks. Fills now add only the grain they are missing.
A brush stroke used to heal live only after the frame had been repaired once; before that it only left a mark waiting for Apply, so the same stroke behaved two ways. Now it heals as you lift the pen every time, like Heal, the Lasso, and Clone. The mark still counts, and Apply still runs the detections.
Holding space to pan, or picking Hand after the Lasso or Crop, used to snap the picture back to center as the tool's options bar came and went. Only Zoom to Fit itself moves the view now, and it still fits below the bar.
After a detection the status bar reads "143 marks found—review, then Apply" instead of just "detection done."
Exporting a single frame from the panel wrote the file on the main thread; it now works in the background like batch export, and the status bar says when it's done.
Settings › Stats has a new switch, off by default. When on, once a week the counts on that page are sent with the app and model version, your macOS version, how much memory the Mac has, and a random install id. Numbers only, never a picture, a filename, or a path. It tells us what is working inside the app and what isn't.
Detect + Repair All stores each result so a frame opens repaired. Settings › General shows how many are kept and their size, with a Clear button; untouched results age out after 60 days. A frame you brushed or healed keeps its result until you forget it, and clearing never touches your brush edits.
A brightness correction meant for small spots was being applied to whole brush strokes, where it pushed each edge of the fill away from the film beside it. It now runs on spots only; brush strokes are left to match the film around them. Repairs of marks the detector found are unchanged.
The fill was being solved over a slightly larger area than the stroke, then trimmed, so where the two met a faint ridge could appear, most visibly on strokes that overlap an earlier one or cross a tonal edge. The fill is now solved over exactly the area the stroke writes.
A smoothing pass that helps small spots was flattening the mid-scale texture inside larger brush strokes, which is why a repaired stroke could read as an even patch at 50% and above. Strokes larger than a small spot now skip that pass. Spots and detected marks still get it.
On film without color grain, the fill's color was averaged across the whole stroke, so a stroke from a warm dark area into a cool light one came out slightly cool on the dark side and warm on the light side. Each part of the fill now takes its color from the film next to it. Film with visible color grain is handled as before.
Since 0.2.78 it also searched for tiny bright specks the detector scores too faintly to mark, and repaired them without marking them. Checked against scans with every speck marked by hand, most of what it found was not dust but bright detail: sunlit leaves, specular points, highlights in grain. That search is off until it can tell the difference.
Specks it found on the cleaned frame and repaired were never marked, so those repairs showed only when you toggled P. They now appear with the rest of the marks when you turn marks back on after a repair, stay marked after reopening, and can be erased like any other.
Zoomed in, the old marks stayed on screen until you zoomed or scrolled.
Beside TIFF and JPEG in the export bar, Settings and the Hot Folder: each frame is written in its original's format. A TIFF comes back as a TIFF at its own bit depth, a JPEG as a JPEG, a PNG as a PNG, so a folder of mixed scans leaves the way it arrived. Auto is the default unless you have already picked a format; a Hot Folder that was already set up keeps writing TIFF until you change it.
The QC log now lives in a _qc folder inside the In folder, beside _completed and _needs_review, so an Out folder you deliver from carries nothing else. The red-overlay QC images are now a setting, Save QC overlays, off by default; turn it on and they go in the same In folder _qc. In Overwrite originals mode nothing at all is written to Out.
, and the check for unusable repairs before an export no longer freezes it on a slow network share. The save panel also opens without first preparing a full-size copy of the frame.
Quitting, or a network share dropping, partway through copying an original to the export folder could leave a truncated file under its final name that looked finished. Copies now land under that name only once complete.
Brushing again over a spot the repair missed prepared a full-size copy of the whole frame; it now works on just the area around the spot.
Exports of color TIFF scans carried an extra, fully opaque alpha channel, making the file larger and structurally different from the scan the lab delivered. Black-and-white scans were not affected.
In 0.2.78 and 0.2.79 a 16-bit frame's saved repair was wrongly rejected whenever it was loaded again—after reopening a session, or during an export—and the frame came back unrepaired. Black-and-white scans could be caught the same way. Both are fixed. A frame that lost its repair this way needs to be repaired again.
A grayscale scan whose profile is not the sRGB curve—Gray Gamma 1.8 is the common one—came back lighter across the whole frame: its tones were written into the file without being converted back to its own profile. They are now, and an export matches the original everywhere except the repaired spots. If you exported black-and-white scans with an earlier version, export them again.
After a session is reopened, a frame repaired with heal strokes, or with Repair but never exported, waits to rebuild its repair until you open it. Until then an export wrote the original instead, without a word, and that copy then counted as the frame's repair. Export now rebuilds a heal-stroke repair itself, and a frame whose Repair has to be run again, or is still being restored, is named before anything is written. Overwrite Mode includes those frames too; it used to leave their originals untouched and count them as done.
When the exported file could not stand in for the repair, the frame went on showing, and exporting, the repair it had before.
A frame exported and then repaired again could keep the earlier export standing in as its repair, so reopening the session brought back the older result.
, instead of throwing the repair away. Removing a frame, or quitting, also warns about a repair that has not been exported even when an earlier repair of the same frame was.
If a saved repair is missing or no longer matches its frame, the export asks first and lists those frames: Stop and Show Them, Export Originals, or Skip Them. Stop and Show Them exports nothing and shows only those frames, each with a red badge, so you can repair them and export again. "Needs Re-repair" beside the filmstrip's filter field (under it when the filmstrip is at the side), and View ▸ Show Frames Needing Re-repair, switch between those frames and the whole roll.
, in a warning you can turn off and in exported-unrepaired.txt in the destination folder, with the reason when it is known.
, in export-failures.txt, and a failure caused by a momentary shortage of memory is retried. A repair that turns out to be unusable partway through an export no longer fails the frame: it is exported as it is and listed.
If the destination already holds a file with the same name, or two frames would get the same name, the new one is saved as name-1, name-2 and so on, and the status line says how many were renamed. Only Overwrite Mode replaces files.
A synced folder can move files to the cloud as they are written, so an export can look like it is missing files.
A frame with no repair and no tone, crop or rotation, exported in its own format, is now a byte-for-byte copy of the original instead of a re-saved one, so nothing is lost to recompression and its metadata stays. One that is re-saved keeps its full bit depth; a 16-bit scan used to come out 8-bit.
The exported JPEG used to become the frame's saved repair, so later heals and exports were built on a compressed copy.
Frames that share nothing more specific than the drives they are on are written straight into the folder you choose. Frames from one drive keep their folders, so a lab's roll folders come through intact.
With a filter on, Repair, Detect, Sync, Auto Levels, Auto-Rotate, Rotate, and Export act only on the frames shown, and their buttons say how many. Select All and Shift-click select only the frames shown.
Remove from List, and Forget in the Missing Files window, used to delete a frame's brush marks and heals. They now stay saved with the image and come back, with the frame's detection, when you open it again. Reset still starts the frame over. A reopened session now says when a frame's brush edits are no longer on disk.
, and clicking a frame takes the keyboard back from it, so ⌘A selects frames again rather than the filter's text.
The warning appeared on frames repaired with Repair, and on frames whose only hand work was erasing marks. It still warns before a repair built from your marks alone is replaced by one that repairs everything Detect found.
Most strokes laid near an earlier repair were being treated as a request to try again, which changed how the repair was set up each time—why results could swing from good to bad and back. Only drawing the same mark again counts as a retry now.
Film beside the stroke that the repair reads for reference could still show the original scan, defect included, instead of the picture as it is now.
while it gets ready.
The new file is written before the old one is replaced, so running out of disk space can no longer leave a frame with no saved marks, and a failed save is reported.
, with a count in its monitor.
when the server can't be reached, instead of being lost.
, matching the number it shows.
, in Settings ▸ Editing, off by default. Scans wider than 4,400 px have always been detected at 3,600 px, which is why a 12,000 px lab scan or an 8×10 plate came back with the big marks and few of the small ones. On, the model also runs over the frame at full resolution and the two results are combined. On the large frames in the corpus it found 2,406 of 3,669 labeled marks where the shipping pass found 1,312. It also marks grain on grainy film, so it is a switch and not the default. Detection takes longer on big frames.
, in the Repair section beside Apply Repair, the same way Detect All reports in Detect. It used to report at the bottom in the export bar. Export batches still report there. Asked for by the techs at Indie Film Lab.
Opening another session used to discard the saved detection of every frame not in it, so a repaired frame you came back to showed no marks and could not be applied until you detected it again, minutes on a big plate. Marks and heals were never at risk; only the map was. It stays with the frame now, like the mask.
It used to reach 100% at the end of the first pass, then sit there through the second pass and the final composite, a good while on a big plate. The second pass and the composite now have their share of the bar, and the status line says which is running.
Its preview of the original under the stroke was handing the whole scan to the graphics system on every press; it now hands over only the part of the frame on screen.
The fog and the mark overlay were drawn through image views that re-rendered themselves at the full size of the frame on every change, 850 MB of drawing on an 8×10 plate. They are now plain layers the graphics system scales on its own.
Each now tells the canvas exactly which patch changed, the way a live heal already did, so on a big plate a stamp lands in milliseconds instead of a two-second freeze.
Toggling between the scan and the repair used to hand the whole picture back to the graphics system every time, a one- to two-second freeze on an 8×10 plate. Both pictures now stay resident and a toggle just switches which one shows. On Macs with less memory the old behavior remains for very large frames.
On big scans the mark overlay was built at a quarter (or less) of the picture's resolution, so at 640% each mark was a block of 4×4 image pixels while the picture underneath was sharp, and at moderate zooms it still showed the coarse copy until you were most of the way in. Now the part of the frame on screen is always drawn from the full-resolution map, scaled to your screen, however far in or out you are. Found on an 8×10 plate.
Healing across a tonal boundary—the edge of a face against a bright sky, a shoulder against a wall—used to drag the bright side toward the dark and shift the edge itself. The repair now keeps the film sitting on the boundary as evidence of where the edge goes, instead of asking the model to invent it. Measured on real heals: eight levels less darkening, and the edge moves about half as far.
Painting over a mark that is already there used to do nothing at all when the brush was small: the app saw no new pixels and stopped. It now takes that as what it plainly is—the same spot, drawn again—and tries a different repair on it. A stray click cannot set one off, and repeats are spaced so a burst of clicks does not queue several.
It often gave the identical one. The model works in a window laid over the frame, and on a small repair that window could land in exactly the same place every time, so the second and third attempts were the first one again. The window's content is now varied on each attempt, which the geometry cannot undo.
The engine is shown the original scan inside the area it is about to fix, so it can see what it is removing. Where it then left a pixel alone—a spot no pass covered—that original was being written back into the picture, putting the defect over film an earlier pass had cleaned. A pixel the repair does not touch now keeps what the picture already showed.
Dragging along a faint hair on light film could leave the middle of the hair in place: the app narrowed the stroke to the parts that stood out most and those came apart into separate islands, and only the islands were repaired. A stroke is still narrowed to the mark under it, but never broken up, so what you drag over is what gets healed.
, in Settings ▸ Editing. New frames used to start at the middle, and a lab that had settled on the maximum had to set it per frame or carry the slider with "Use this sensitivity on new frames" and never nudge it. Now the default is a setting. A frame you have already reviewed keeps its own reading, and the carry-over option still wins when it is on.
Moving it away and back used to leave the badge up and ask for another Apply Repair even though nothing had changed. The repair is out of date only while the slider sits somewhere other than where it was applied.
The order in which the model's windows were laid over a frame depended on the launch, so the same frame with the same marks could fill slightly differently after a relaunch. It is fixed now.
Restoring a session with the open frame far down a long roll used to leave the strip at the top, so you scrolled to find the picture already on screen.
On mouse-down it appeared to glide from where the previous erase ended to where the pointer is; it now appears where you press.
It used to draw the original scan whatever was on screen; now it follows the repair, the tone panel, and the spots view.
Each license is named on its own line with the project link under it.
It used to scroll to reveal about ten pixels.
, since that slider is what defines a fence-sitter. "Sticky between images" is now "Use this sensitivity on new frames", which is what it always did: the value carries to frames that have not been detected yet, and never overrides one you have already reviewed.
when the button beside them says "5 Images" instead of "All". The shortcut hint steps aside to make room.
It writes this frame, the selected frames, or all of them, and says which: "Export…", "Export 5…", "Export All…". "Repair + Export All", "Detect + Repair All" and "Export N Repaired" are gone from the export bar; Repair All now sits beside Apply Repair. If any frame you are exporting has no repair, the app asks first: export it as it is, so the order is complete at the destination, or write only the repaired ones. Overwrite Mode follows the same grammar and never overwrites a frame that has no repair.
The frame's folder, in bold, then the file. Hover for the folder's location; click to show the file in the Finder. Asked for by the techs at Indie Film Lab.
, matching Detect's. It repairs the selected images, or every image when nothing extra is selected, detecting first where needed, all in the app with nothing written until you export. The "Detect + Repair All" button leaves the export bar, which now holds only what writes files. Lab license.
Past about 200% they thickened with the zoom while the dashes did not, so at 500% and up the outline looked chunky.
On frames with no detections (marking by hand, or with the Dust Lasso), the orange marks were drawn from a half-size copy of the mask, so every mark grew outward to a 2-pixel grid the moment the stroke ended. The mask underneath was always precise; now the picture is too.
The Size slider now goes down to 1 like the [ key does, and a pen's pressure floor no longer lifts a size-1 brush to size 2.
Enter the email you bought with and a six-digit code is sent to it; enter the code and your license loads. The code works for fifteen minutes and only on the Mac that asked. If that email bought more than one license, you are asked which to load, and the result says which one it was. Earlier versions of Spot Tone cannot complete this step: if Recover License reports no license found, reply to the code email and the file will be sent to you.
An Indie license keeps working indefinitely offline. A Lab license keeps working through its paid-through date, which the license file itself carries. Only a Lab subscription that has ended and has also been offline past its grace period steps down to the hand tools.
lists the open-source work that ships inside the app.
The license prompts (recover, code, choose Lab seats, free a seat) and Save Session As opened with a button focused, so typing did nothing until you clicked the field.
Only affects installs that never changed the setting.
A licensed Mac claims its seat automatically the first time it launches online; nothing to click. An Indie license covers two Macs, a Lab license one Mac per seat, and Settings ▸ License shows which Macs hold them and lets a lab choose. A Mac that cannot reach the license server keeps working for 90 days on an Indie license and 30 days on a Lab license. A lab with more active Macs than seats keeps the hand tools on every Mac; the lab features step aside on the extra Macs until the lab admin reassigns seats. The public beta is unaffected: every beta Mac keeps every feature through December 31.
A vertical strip sized its thumbnails as if it were a horizontal one, so a wide frame's cell came out wider than the strip itself. Cells now fit the strip they're in—and portraits in a vertical strip grow to use its full width.
There were two menus called View; their contents are now in one, in the same order, with the same shortcuts.
Two fixes. The search's tuning values were being re-read from the system on every pixel, which cost seconds per tile and got worse the more tiles ran at once; they're now read once per sweep. And a loop larger than about 2.4 megapixels is searched in tiles that used to run one after another; they now run at the same time, on as many cores as you have. A loop that took three minutes on 0.2.77 takes seconds.
Draw a second (or fifth) loop while the last one is still searching and it's queued and run next—the status bar says how many are waiting. Previously a loop drawn mid-sweep was dropped, and if several were drawn quickly only the last survived, which is why a loop sometimes seemed to vanish. A loop finished while Space was held for a pan no longer waits for the tool to come back, either.
B repairs exactly what you paint, so a mark whose bulk lies outside the stroke can't clear by brushing it again. The app now says so—with the size of what's outside—and points you to the heal (W), which traces the whole thing.
A stroke straddling a tonal edge (a shirt against a background) could come back with the speck's fringe untouched; the part of the stroke the refine second-guessed is now reclaimed on every path, not just some.
First launch opens a filthy sample frame and walks the flow on the actual controls—Detect, Sensitivity, a brush mark, Apply, Export—spotlighting each one and moving on when you do the thing. Nothing you do to the sample touches a file you own. Skip Tour from any step; Help ▸ Getting Started runs it again, and Help ▸ Open Sample Scan opens the frame on its own.
If you did look the whole frame over, say so once with View ▸ Mark Whole Frame Examined (the same thing the dialog's first button did); otherwise the frame is recorded exactly as you worked it.
With Visualize Spots on, set the slider where the white dots are dust and not grain, then click Mark Spots (beside the slider) or use View ▸ Mark Spots Shown: every small, compact spot shown becomes a mark and heals right away, the same as a lasso commit. Undo takes the batch back in one step. Hairs, large structures, the frame border, and colored image detail are never marked this way.
An out-of-focus speck—a bright core inside a soft glow—used to have its middle trimmed away before the fill, so the repair was solved from the blob's own bright pixels and came back as a smudge. The trimming step now recognizes a fat blob and leaves the detector's mark intact; thin hairs and scratches are trimmed exactly as before.
A scratch at grain level comes back from the detector in fragments with gaps between them, and nothing in any tool could see the gaps: the pixels there look exactly like grain, and Sensitivity, the Dust Lasso, and the brush all judge pixels. What the fragments have in common is that they line up. Detection now follows a chain of collinear marks and closes the gaps between them, so the whole scratch heals in one pass instead of leaving stragglers to brush by hand. The refinement step also no longer trims a mark that is already thin, and no longer loses the middle of a scratch that is wider than its own measuring window: a 3-4 px scratch across plain sky was being judged against a background that was mostly the scratch itself, so half of it was handed back as film and survived every Apply as two bright chunks. Each stretch of a mark is now measured against the film around that stretch.
After the first repair, the app looks at the cleaned frame once more and repairs what that uncovered: the small specks the detector could not see until the larger dust around them was gone (on the hero frame, every one of the misses you could point to). Only marks outside the first pass's repairs are taken, so a fresh fill is never re-read as dust. The same pass also picks up pinholes, the tiny bright specks the detector scores near zero: a spot that stands well clear of its grain, 80 levels or more over the film around it, and alone in its patch is repaired with the rest. One extra detection per Apply; Settings ▸ Second pass turns both off.
Resetting a frame's spot work while its repair was in flight (typically the automatic re-repair right after launch) let that repair finish and land on the freshly reset frame. The reset now stops it first.
A saved repair with this frame's dimensions but a different color space or bit depth used to be accepted, so pressing P toggled between two encodings—a whole-frame density shift with no repair under it. Both are now compared, including for frames loaded ahead in the filmstrip.
The Cancel button used to wait for the whole repair task to wind down, and the preparation stage before the fill ignored it entirely. Cancel now releases instantly and every stage honors it. (The same fix the Dust Lasso's Cancel got in 0.2.76.)
The fill engine loads once at launch, in the background, instead of adding about two seconds to your first repair's "prep…".
If you've hand-cleaned a frame and a fresh detection would repair far more than your own marks, Apply now asks first—your marks and heal strokes survive either way, but the curated result deserves a warning before an automatic one replaces it. Its counterpart shipped quietly after 0.2.76: Revert Repair now says how many hand-healed pixels it would discard, and asks.
Settings ▸ License accepts a license by paste or file and activates your seat in one step; "Recover License" fetches a lost license with your purchase email; a lost or dead Mac's seat can be freed by name from any machine. Nothing changes during the free beta—every feature stays on through 2026-12-31—but a purchased license works today, and your Mac introduces itself to the license server only when you use one.
—stated here, in the terms, and in the app, so it's a disclosed rule rather than a surprise. Hand tools never lapse.
—its explanatory text was right-justified and hard to scan; both notes are now ordinary paragraphs.
Canceling a large sweep could take many seconds—the button waited for the search to fully stop, and it competed for the machine with any repair still finishing. The bar now releases the moment you press, and the search winds down quietly in the background.
A probe that only matters when you circle a single mark was running on every tile of a large sweep; it now runs only where it can change the answer.
Circling a large blotch used to report clean film; it now says the mark hit the size ceiling, so you know to brush it instead.
A tight loop around one speck that measured a hair below the acceptance bar was refused as grain. When you have plainly pointed at one thing, a near miss within a small margin is now taken.
Loops drawn partly outside the frame used to fall open and enclose nothing; the path is now clamped to the border.
A dab could quietly repaint two to three times its area by adopting nearby pixels; B now writes the paint, the whole paint, and nothing but the paint. Tracing a whole connected defect is W's job, as before.
A re-stroke on ground already repaired now routes to the reconstructing engine with a wider view, instead of re-running the same fill that just failed you.
Repairs that crossed dark-against-bright could come out speckled or smeared. The fill now pins to the structure it found while the grain is laid down once. Measured across 700,000 edge-crossing pixels: error at the crossing down 24 percent.
A hand-drawn rubber-stamp glyph, so you can tell at a glance which tool is loaded; cursor badges now also size and place themselves correctly at any zoom and rotation.
It used to wait for the first repair to finish before showing at all.
Corrections always were; now the install ping, crash reports, and diagnostic signals are sealed with the same key before they leave your Mac. Bundles you contribute also carry your Mac's name and the network address our edge sees, so we can trace a bad bundle to its source—spelled out in the beta disclosure.
The hand tools you bought outright never stop working. Crop and straighten without a Lab license are kept with the frame rather than applied, and the app says so when you open a session that relies on them.
Brushing or lassoing a speck where dark meets bright—a coat against a shirt, a face against a black ground—often filled with a soft gray blotch, sometimes a diamond. The fill engine had it right; the passes that level a fill to the film around it were treating the dark side of the picture as the black border of the film and lifting the whole patch. A hole that sits across an edge is now handed to the reconstructing engine and leveled against neither side. Measured on a brush across a 170-level edge: the dark half was 60 levels too bright; it is now within grain.
Pressing space mid-drag switched to the Hand tool and left the marching ants frozen with nothing behind them. Space now waits for the mouse to come up.
Loop-only passes uploaded as ordinary brush edits and the loop geometry stayed on your Mac; it now rides along.
The fill runs on a 2x-enlarged crop and is scaled back down—fine structure a hole sits on, like lettering or a thin line, survives the repair far more often. Measured against ground truth: error inside these fills dropped by more than a third.
Clipping a dot and brushing again used to pull the missed bright fragment into the fill's math; the repair now brings fragments within a few pixels of your stroke into the hole with it.
Everything under an erase stroke returns to the source scan—including pixels earlier repairs left behind that no longer showed as marked. One swipe is now a reliable "put it back."
The title bar shows the session's name (or its job folder) and frame count, and updates as you work.
Dragging a section to the first position dropped it at the bottom; each row also gains up/down arrows.
It shows what this copy is licensed for and takes a license when you have one. Nothing changes for the public beta: every feature stays on for everyone through the date shown there, and no license is needed until then.
Settings ▸ Updates has an optional address field. Leave it empty and nothing about you is sent—the report is the same as before, with file names and folder paths removed.
The same text as Settings ▸ Contribute, on screen where you can read it first.
It was built to gather training data and has no place in day-to-day work; the tool itself is unchanged.
After healing a spot, pressing P could redraw part of the picture from the repaired version and the rest from the scan—a subtle density change at first, and after several heals a strong, colorful mismatch. The whole picture now redraws together.
Two changes to how it measures: each speck is judged against the noise of its own neighborhood rather than one number for the whole selection, and a speck that reads the opposite way to most of what's in your loop is no longer discarded unheard—it answers to a stricter bar instead.
While one frame is being repaired, asking for a second gave a beep or simply did nothing. It now names the frame holding things up and tells you to try again when it finishes.
Same tool, same L shortcut, same lasso—the old name described a rolling motion, and what the tool actually does is enclose a spot. Only the name has changed.
Circling under a threshold means "this exact spot" and returns the single best mark; a wider loop returns everything it finds. The status line now names which happened and how large an area you circled, so two loops that look the same to draw no longer behave differently without explanation.
A mark could grow down the whole length of a strong tonal edge and be sent for repair. Marks are now capped, so a sweep cannot hand the repair a slab of the picture.
The right-hand end used to read "Every speck", which promised more than any detector can deliver. The new labels describe the control itself, so they stay accurate as the detection model improves.
Spot Tone now speaks en-GB, with British spellings throughout and the platform's own wording where macOS differs. Choose it in System Settings ▸ General ▸ Language & Region ▸ Applications, where you can set a language for one app without changing your Mac's.
It no longer carries over from your last session: a mode that replaces original files should never be running before you've turned it on and seen the warning. If it was on when you quit, the app says so on the next launch.
If you never watch a folder, the inspector no longer carries the section. Hiding it changes nothing that's running.
Holding space to pan, or stepping out to Hand, Zoom, or Crop and back, was tallied as abandoning the tool you were about to use. Only switching to a different tool without using the first one counts now.
A frame you have open that also belongs to the session you're opening keeps its decoded pixels and, when its repair is current and the session doesn't name a different repair file, its repair too—on a large scan that was minutes of reloading and rebuilding. Marks and settings still come from the session.
Re-reads the current frame's file, for when another app has saved over it. The app also tells you when it notices an open frame's file has changed on disk.
If you rename a scan in place while it's open (or between sessions), the session finds it again by identity and keeps its marks and repairs. Locate… matches renamed files too.
One action for the lab flow—detects and repairs every frame, then writes each repair back over its original. Asks first; frames whose repair fails are left untouched.
If a newer detection model turns out worse and the previous one is republished, the app now installs it; before, it treated anything older than what it had as "up to date."
On an 8×10 scan every brush heal used to stall the whole window for about two seconds while the entire picture was re-sent to the display. The picture is now handled in tiles, so a heal updates only the tile it touched.
If a restore came back empty (a renamed file, a skipped restore) and you quit without opening anything, the app used to save that empty state over your session. It now leaves the session on disk alone until you actually open or remove frames.
If Spot Tone was quit while restoring (or just closed within a second of launching), the next launch used to skip your session with only a line in the status bar. It now asks: Restore It or Skip.
If the only frames in your last session had been moved or renamed, relaunching silently dropped them and showed the session picker with no explanation. They now appear in the missing-files sheet like any other missing frame.
Sweeps over about 2 megapixels used to be refused as "too big"; they now search in tiles, the status line counts them off, and a Cancel button in the Lint Roller bar stops the search. Sweeps past 24 MP still ask first; past 64 MP the answer is still no, instantly.
Its own switch in the Hot Folder settings (off by default, separate from Overwrite Mode for exports): repairs are written back over the original files in the In folder instead of copies in Out. It confirms when you turn it on and again when you start watching, and the monitor shows OVERWRITING ORIGINALS the whole time. Frames flagged for review are still set aside, never replaced.
A file it had already processed and moved aside was silently ignored if you put it back in the IN folder, no matter how long ago. It now processes it again; only a file that could not be moved aside stays skipped.
Starting a Lint Roller loop before the previous one had finished healing could heal everything correctly and still show the out-of-date warning, with a full ⌘R the only way to clear it.
Circling a patch used to clear the fog only along the line you drew, leaving the area inside—the part the tool actually searched—still marked unexamined.
Around 200% the outline's black dashes sat exactly on top of its white ones, so on dark film the selection all but disappeared until you changed zoom. The two now stay offset at any magnification, and the outline keeps its hairline weight as you zoom in to inspect.
Those bars float over the top of the canvas, and Fit used to put the top of the picture—and the top crop handles—underneath them. Fit now aims for the space below the bar, so every handle is reachable at Fit.
On very large scans, lassoing a big area could mean minutes of silent work; past 24 megapixels the sweep now tells you what it's about to take on and offers the faster path—several small sweeps that show results as you go.
On very large scans the repair spends minutes preparing before the first visible progress; during that stretch the bar now sweeps continuously and shows elapsed time ("prep… 1:20"), so you can tell working from stuck at a glance.
(the EXIF make and model already in the file—a machine name, never a person). Different scanners leave different fingerprints, and training can now tell them apart.
Detects any frame that needs it, repairs every frame in the app, and writes nothing—the other half of Repair + Export All. Batch first, review what it did, then export (or overwrite) what you're happy with. The status line names the heaviest frames so you know where to look first.
"Export 1 Repaired…" duplicated the single-frame Export beside it; the repaired-set button now appears from two frames up.
The export bar, status area, filmstrip, and inspector could keep the previous theme's colors until something else made them redraw.
"Export N Repaired…" becomes "Overwrite N Originals…", and the single-frame export becomes "Save (Overwrite)…"—replacing that frame's file directly, no save panel.
Turn it on (Settings ▸ Export) and Export and Save Back replace the original files in place—no copies, no suffixes—with the file's format, bit depth, profile, and metadata preserved. It confirms every time it turns on, and a banner stays across the window the whole time it's active, so there is never any doubt which mode you are in.
Your own numbers—frames detected, repairs applied, pixels healed, sweeps, exports—counted on your Mac and shown to you. They live in a small file on this machine and are never sent anywhere.
When strokes came quickly, a repair could get filed under the wrong stroke—so ⌘Z sometimes reverted the wrong spot and left another unreachable. Each repair now stays with the stroke that made it.
They had quietly drifted to a slightly wider one; measured against ground truth, the app's setting is better on every axis.
Leveling a scanner line measured against the original scan, so where your line crossed an already-repaired spot, the old dust could reappear inside the leveled strip—and stick through re-repairs. It reads your current result now.
A speck on film blooms wider than its hard center; repairs used to replace the center and leave the faint halo, so the spot looked like it never quite went away—no matter how many times you repaired it. The whole speck goes now, halo included.
A stroke on repaired ground used to rewrite only the center of what you marked, leaving the rest of the old repair standing—which often looked like nothing happened. Everything under your stroke re-solves now, each repeat stroke tries a different source, and nothing outside your stroke is ever touched.
On a gentle tonal rolloff the repair could take its film samples from too far away and leave small plugs that did not match the gradient—and a re-repair brought them back. The sampling now stays local.
Sweeping again before the previous sweep's repair finished computing could throw that repair away silently—the specks stayed, and whether a sweep "took" depended on your rhythm. A repair that loses that race now re-runs instead of giving up.
Reset Image - SPOT Only starts you over on the Spot side—detection, brush edits, repair, touch-ups, Sensitivity—while Tone, crop, straighten, and rotation stay exactly as you locked them in. Reset Image - SPOT and TONE takes everything back to freshly opened. Both live in the Image menu and the filmstrip right-click, just under Clear Brush Edits, with confirmations you can suppress. Your file on disk is never touched by either.
A heal made on top of an existing repair was computed and saved correctly, but with no tone adjustments active the canvas was never told to repaint—the stroke looked like it did nothing until the frame was reopened. If you have ever brushed a spot, seen no change, and found it fixed later: this was why.
A stroke on already-repaired ground used to touch only the few fresh pixels at its edges. It now re-heals everything under the brush, and each repeat stroke tries a genuinely different source—a different patch of donor film, a different solve—instead of returning the same answer. Pixels you placed with Clone are never re-opened.
The fill could read the unmarked remainder as film worth continuing. It still repairs only what you brushed, but the surrounding defect can no longer serve as its template.
Press A and the cursor becomes a small level: drag a line along anything that should be level or plumb—a horizon, a doorframe—and the picture turns to match. No more pre-placed line to fish for. Rotating by dragging outside a corner still works.
—including tone, crop, and straighten, which used to survive it. The confirmation says plainly that a reset cannot be undone, and grows a "Don't ask again" checkbox.
Better at small faint specks—the kind worth finding on a lab scanner's output—with false marks held in check, and it no longer learns bad habits from scanner-mask edges on over-scanned film.
While a scan's full-size pixels decode, Spot Tone shows its thumbnail so you see the right picture immediately—but that stand-in was drawn unturned, so any frame whose stored pixels are not upright appeared as it came off the scanner and then snapped around when the decode landed. Most visible right after Auto-Rotate, and only on the first visit to each frame. Reported by Josh and Emma at Indie Film Lab.
With Preview adjustments on, the picture on the canvas was held over until the new frame finished rendering. Harmless-looking on a roll shot alike, thoroughly confusing after Auto-Rotate, where the frame you just left was drawn at the new frame's rotation.
A quarter turn swaps the picture's proportions, but the zoom was only recomputed when the pixel dimensions changed—so turning a frame left it at the previous magnification until you pressed ⌘0.
, beside Rotate Left and Rotate Right. It says what it will act on: "Auto-Rotate All", or "Auto-Rotate 12" when you have several frames selected.
when Auto-Rotate is switched off in Settings. The switch was taking the neighboring menu with it.
The exported crop was rounded outward by up to a pixel on every edge, so a crop placed just inside the frame edge brought the rebate with it—a thin light outline along the sides. It rounds inward now, so nothing you cropped away can survive. Reported by Emma at Indie Film Lab.
At Sensitivity 99% the marks you rub out were being recorded as "no opinion" rather than "not dust", so the most useful correction a person can make—overruling a faint detection—taught the detector nothing. Only 99% was affected; every setting below it was already fine.
Every cell was the same landscape box whatever the frame was, so a 6x6 negative or an upright portrait sat in a box a third empty and the pictures looked far apart. Each frame now gets a cell its own shape, read from the file before the thumbnail is even decoded.
A quarter-turned thumbnail was being shrunk to 72% to keep it inside its cell, so a rotated frame read as smaller than its neighbors.
, not round the box it sits in. A square frame was getting a landscape outline with dark bars inside it.
A row of height was reserved for badges that are drawn over the image and take no room, leaving a dark band above and below.
They used to belong to the session that made them: once that session aged out of the last few, the brush work went with it. Open the same negative again—from a session, the Finder, or a round trip—and the work is where you left it. Settings ▸ Saved Repairs lists what is kept and is the only thing that removes it. Repairs on files that live on a drive you have unplugged are safe; a missing file is never read as a deleted one.
Select variants, then Scripts ▸ SpotTone. Capture One processes them to 16-bit TIFF through a recipe it creates once, hands them over, and Save & Return (⌘S) imports each cleaned frame back into the collection it came from. Your originals are never opened or written. The recipe is a normal one you can edit—change its output folder or profile and Spot Tone follows what you set.
Destroy was never a second tool—it was the Lint Roller with one flag set, and no name could honestly separate them. Now there is one tool, and whether the detector gets a vote is a checkbox in its options bar. D and L both reach it. Sweeping an area still finds marks the detector scores zero on, which is the point of it.
It was moving at exactly half speed—the divider sits inside the pane it resizes, so every point the pane grew canceled a point of the drag, and it fell behind and stuttered after the pointer.
With both a crop and a rotation—which "Frame whole image" and Auto-Rotate now produce together—Fit was zooming for the frame's pre-rotation shape.
Space was being reserved for a scrollbar that floats above the content and never needed it.
Exposure, Contrast, Whites, and Blacks, above Curves in the Tone panel—Camera Raw's group in its order and its numbers. Exposure works in linear light, so it clips highlights and moves midtones the way stops do rather than sliding everything up. Highlights and Shadows are deliberately not here: theirs is a local adjustment that reads a region by what surrounds it, and imitating it with a curve would carry the names without the behavior.
, in Color. Channel gains, which is what white balance can be on an already-developed scan—hence "Warmth" rather than a temperature in Kelvin it couldn't honor.
, in the Image menu. Turns frames upright from the faces in them, and pools each roll so a frame with no face can follow the rest of its roll. It selects what it turned, ⌥← ⌥→ steps between just those, and ⌘Z undoes one. About one turn in fourteen is wrong on real rolls, so it is a suggestion to look over—it never runs unattended, and Settings can remove it entirely.
⌘Z after turning a frame used to undo whatever you did *before* it; the rotate commands recorded nothing.
It was being drawn underneath the export bar, where it could never be seen—the vertical strip was never affected. Bottom-docked filenames were also being clipped.
Right-click the area around the frame, or View ▸ Workspace Background, for a lighter surround—the film's own edges are hard to find against the dark default.
now appears in the bar above the tools, not only on the Sync button.
"Detect" and "Detection" were two names for the same step; Sensitivity and the overlay controls now sit under Detect.
—"Open All Inside" when a folder is selected, since that opens every image underneath it, and double-clicking looks inside instead.
behind the same switch the model share token uses. An upload to a wrong token fails silently.
The summary—how many frames came back, how many changed on disk, how many couldn't be found—was written and then immediately overwritten by the frame load, every time. If a session came up short, nothing said so.
Frames whose folder had been deleted were dropped from the count without appearing anywhere: not the status line, not the missing-files list. Open a session listing 17 frames, get 1, and hear nothing about the other 16.
, in the missing-files sheet. Locate points the session at the folder those files moved to, matched by filename, and carries their brush edits across with them. Forget drops them for good when they're gone rather than moved.
"Don't show this again" applied to every session, for ever, and the only switch for it lived inside the sheet it silenced. It's now in Settings ▸ General too, and says what it actually does.
The shortcut was quietly switching you to the Clone tool instead—the tool letters were claiming it before the menu ever saw it.
while it's deprecated.
Marks drawn in an earlier session live on disk until you click that frame, and the batch was reading them as absent—so the detector's dust was repaired and every hand-drawn mark was silently dropped. Erasures went the same way, meaning a false positive you'd rubbed out came back repaired. If you mark up a roll and then export without visiting each frame, this was losing that work.
It always wrote TIFF regardless of the export format, because its filename was fixed. Format is now its own setting in the Hot Folder panel, separate from the export bar on purpose: a watched folder runs unattended for days and shouldn't change because you picked JPEG for a one-off.
, down to 1%, for a conservative pass that repairs tightly. Worth knowing what it does: almost everything the detector flags, it flags with near-total confidence, so this mostly shrinks each repair rather than removing whole false detections.
, matching Camera Raw, and a Sync button now appears beside the export buttons whenever more than one frame is selected.
Pick "Auto, per image" and this frame's numbers don't travel—every frame gets the black and white points its own histogram asks for.
A Custom… entry in the Ratio menu with separate W and H fields, decimals included—2.39, 1.85, 1.414. It commits on Return, so typing "16" over a "4" no longer lurches the crop through 416 on the way, and Return hands the keyboard back instead of swallowing the next tool letter.
Picking a shape, or flipping 4:5 to 5:4, used to change only what the *next* drag would do and leave the box on screen exactly as it was. It now turns in place, holding its area and its center.
A 45:4 crop reshaped to about 14,900px wide on a 5,444px frame, then had its width clipped to the film and its height left alone—so the box hung off the picture and no longer held the ratio it was locked to. It's now scaled down to fit at the shape you asked for.
The gesture always worked there; the cursor never showed it, because the only reachable part of the ring was inside the box. You can also now reach past a corner into the gray surround to rotate, which is where that gesture wants to live.
With the box around the whole frame, the far edges showed a crosshair that did nothing when clicked. The left and top edges were always fine, which is what gave it away.
Opening a menu during a repair—Open Recent Session, say—made it flicker and close before you could pick anything. The progress percentage was rebuilding the whole menu bar every time it ticked. It now updates the progress bar and nothing else.
A repair restored from a previous session lives only in its edit history until you look at that frame, so any frame you hadn't clicked on since relaunch was counted by the button and then silently left out of the export. It now writes them.
while it works, and gives each frame's pixels back as it goes instead of holding the whole roll in memory.
Removing images or starting a new session while an automatic round-trip clean was running could leave it saving over a file you'd just removed. Both now wait for it to finish or be canceled.
Finish one frame, tick what should travel, push it onto the rest—sensitivity, levels, curves, color, crop & straighten, rotation, detector type. Crop and straighten always move together, because a rotation without a crop would export on a black ground. Syncing sensitivity marks an existing repair as out of date rather than silently recomputing it, and each frame keeps its own undo.
Sets black and white on every frame from *its own* histogram—which is the opposite of syncing levels, where one frame's numbers are copied to the rest. A roll shot in changing light wants this one.
A roll filed as Job/Roll1, Job/Roll2 used to open as nothing at all, because the folder you picked held only more folders. Above 400 images it asks first. Folders Spot Tone itself creates inside a watched tree are skipped, so a hot-folder input no longer opens every frame twice.
Clears the filmstrip and goes straight to Open. The session you were in is archived first, so it's one click away again under Open Recent Session.
Tabbing to them worked; pressing them didn't, because Space is held by the Hand tool. Return now commits the focused button—tools, Fit, 1:1, both rotates and Help.
An erasure is recorded as "this is not dust" only where the detector actually saw something—rubbing out blank film asserts nothing it didn't already believe, and recording it buried the real judgments under bulk. Erasing a faint mark the model half-sees still counts, and is still the most valuable correction you can make.
instead of nothing at all, and levels the rotation with it.
The filmstrip and the main window worked from two different starting orientations kept in step by hand; they now share one. Fixes rotated frames whose thumbnail faced a different way than the picture—and, along the way, the filmstrip previewing the wrong region for a crop on any rotated file.
Stretching R, G and B separately (for a cast a single Black/White pair can't reach) used to leave no way to see or adjust what it did, and no way to undo it short of ⌘Z. Reset now recognizes and clears it, and R/G/B Black/White sliders appear under Levels once it's set—drag them more or less aggressive in either direction, same as the composite sliders. Never touches a curve you've drawn by hand on the Curves tab.
Desaturate fully strips all color from every processed frame—for a scanner that leaves an RGB cast on nominally black-and-white film. Apply Auto Levels sets black/white points from each frame's own histogram, composite only and defaulting to no clipping, so an unattended folder can't stretch more aggressively than a person watching one frame at a time would.
, next to Ratio in the crop bar. Draws a box around the full frame the moment Crop opens, until you draw a real one of your own or use Align—Reset doesn't use it up, only actually cropping or aligning does.
Once a crop is made, both used to keep fitting and centering on the original frame underneath it rather than the crop itself.
, next to Ratio and Reset, and now turns itself off once you've drawn a line with it rather than staying the active tool. A switches to Crop and the level line together, matching Camera Raw.
the moment it actually runs, so a detection landing on a new frame is visible without a separate press of O.
Carries the Sensitivity slider to the next frame instead of resetting, but only onto a frame that's never been detected—one you've already reviewed keeps its own value.
on a frame that had never been individually opened this session—the crop (and sometimes the rotation) just didn't make it into the file, with nothing to say why. Exporting now works correctly regardless of whether you've clicked through every frame first.
"12 exported, 2 failed" used to be the whole story; a text file listing which ones and why now lands next to the exported images.
The old General tab stacked every setting in the app into one column, tall enough to run off the bottom of a 15" screen. Each tab now covers what it says: interface and session in General, brush and repair behavior in Editing, export destination/rotation/format in Export.
, under an "Unlock to edit" checkbox in Updates. They're the two fields where a stray click or a keystroke while tabbing through the form does real, silent damage—pointing future model updates at the wrong share, or clearing the token and turning updates off with nothing on screen to say why. Unlocking doesn't stick between visits, on purpose.
Drag just outside any corner of the crop box and the picture turns underneath it while the box stays upright, the way Camera Raw does it. The angle reads out in the bar under the toolbar and has its own Reset. Non-destructive like the crop itself: the angle is stored with the frame and applied when you export, so it can be changed or removed at any time and never touches a pixel.
Turning a frame opens empty wedges at its corners, so the box is held to the film as you rotate—whatever it encloses is real picture, never a black corner. Clearing the crop clears the rotation for the same reason: a tilt on its own would export the frame sitting on black.
, crosshair in hand, so your first drag draws a box rather than adjusting one that was already sitting there.
Pull a box past the edge of the frame and its handles went out of reach, leaving only the part still over the film clickable.
—crosshair to draw a box, arrow over a handle or inside one, curved arrow where a drag will rotate.
, beside the picture, instead of along the bottom of the window.
, so the marks can be faded back against the film they cover.
After a certain run of edits the canvas kept drawing the version rendered before the repair, so brush, heal, and the Destroyer all appeared to do nothing until you switched the repaired preview off and on again.
With any tone adjustment set, the canvas kept displaying the version rendered before the repair, so the frame looked untouched until you toggled the preview off and on. Reported by Indie Film Lab.
, not just the corners, so one edge can be moved on its own—and ⌥ while dragging moves both sides at once, as in Camera Raw.
Non-destructive—the rectangle is stored with the frame and applied when you export, so it can be re-drawn or cleared at any time and never touches a pixel. Drag to draw, drag inside to move, corners to resize, ⇧ to keep the shape you have, or lock a ratio in the bar under the toolbar. The canvas keeps showing the whole frame with the crop outlined, because dust outside it still matters the moment you re-crop; the filmstrip shows the finished picture.
⌥-click the film you want to copy from, then paint. For a mark lying along an edge—a hair on a lit chin, a scratch down a shoulder—where no automatic donor is the right answer. The film you're about to copy shows inside the brush as you move it, so you can aim; hold ⌥ again and the preview steps aside while you pick a new source. The offset locks on your first stroke, so an area can be built up in passes. Works at the file's own bit depth, and on frames that have never been repaired.
, optional, in Settings. Off, exports keep the file's own pixel orientation and its EXIF flag, which is what a round trip to Lightroom expects. On, your rotation is written into the pixels and the file is marked upright, so every viewer shows what you saw.
, and goes when you let go. It used to show on ⌥ alone, so resting a finger on the key repainted the whole frame.
They're drawn over the pixels the repair is about to change, so they land on top of the result and have to be cleared by hand before you can judge it. Off by default; Settings ▸ General. Asked for by Indie Film Lab.
It was allocating memory for every pixel in the frame—205 ms a pass on a 10-megapixel scan, against 73 ms for an ordinary tone render doing more arithmetic.
—a crop or a rotation leaves through Export instead. The file belongs to the app that handed it over, and its edit stack is built on those dimensions.
A mark sitting on an edge—a hair against a lit chin, a scratch along a shoulder—was being repaired with a mask ten to fifteen times wider than the mark itself, so the fill was asked to invent a band of film where only a few pixels were damaged, and it filled across the edge with the wrong side's tone. Masks are now cut back to the mark before filling. On the frame that showed this worst, the dark side of the edge was being lightened by twelve levels; it is now half a level, and the lump is gone.
It was consulting a detection made at reduced size, where a hair-thin fiber is smaller than a pixel and simply absent.
instead of laying down the same answer again. Each stroke reads the cleaned frame and writes only what you drew, so building a difficult area up in passes works the way it looks like it should.
A histogram, curves, black/white/midtone levels, saturation, and vibrance, under the repair tools. Laid out the way Camera Raw lays it out—the histogram at the top with clipping indicators, and each control as one row with a tick at the value it does nothing at. Nothing here touches your pixels until you export: the settings are numbers, so they never degrade the file, never affect detection or repair, and never travel with a contributed correction.
, which is the honest tool for a scanner's color cast—saturation can only mute a cast, at the cost of the whole frame's color.
Set how much may be thrown away at each end, and *none* means exactly that: the black and white points go to the darkest and lightest pixels in the frame, so the stretch costs nothing. Stretch each channel separately and it also corrects a cast that lives in the black and white points—base fog, or one channel running hot—landing in the R/G/B curves where you can see and adjust what it did.
, as in Photoshop, and it names which channel when only one is going.
(⌘⌥C / ⌘⌥V), onto the whole selection when several are picked. A roll scanned in one sitting wants one tone move, not the same move twenty times.
A single-channel file was being exported as a three-channel color one—the same picture, but a different kind of file and up to three times the size. Color scans are unaffected.
Hide any tone section from the View menu or by right-clicking its header, and drag them into the order you want in Settings ▸ Panels. Hiding a section never switches it off, and the panel tells you if a hidden one is still doing something.
A frame with only a tone change—or no change at all—can be exported now. It writes a new file and never touches your original, so there was nothing for the old restriction to protect.
, whether that was a brush stroke, a repair, or a tone change.
, independently of P, so you can look at the scan, the repair, the tone, or all of it.
, each collapsible, with their sections foldable inside.
It is a property of your scanner, not a decision to make on every frame.
It was consulting the detection made at reduced resolution, where a hair-thin fiber is smaller than a pixel and simply absent—so it was asking a witness who had never seen the mark. It now runs a fresh full-resolution detection on the area you sweep, using both detectors together, and the model's opinion can keep a mark on its own rather than only nominating one for the statistics to judge. On the first frames tested it held a scratch of over a hundred marks that the old version discarded whole.
Each mask was being expanded by two pixels in every direction before filling, which on one measured frame added twenty-one thousand pixels of clean film to the repair for no gain. That margin is now one pixel, and the marks it exists to cover are still covered.
, and it sits at the size Mac icons are meant to sit at.
—the wand from the tool strip, with its tip on the spot you are aiming at.
until you move the mouse.
, not two.
Sweeping ground you have already marked used to add nothing and stop—no fill, no change—while the same request made with the brush re-healed it. Same intent, two different answers depending on which tool was in your hand.
A mark standing 5 sigma clear of the film could be refused for being under five pixels, and every message the app had for that case said "nothing here". Its floors are separated now: two pixels to be considered, and the measured gate decides what is kept.
Asking for a second pass in an area you had already repaired rebuilt it against the untouched scan, so your earlier repairs were handed back to it as dust—which could bring a scratch you had removed back up. It now works from what you are actually looking at.
A stroke that lands on ground already marked used to change nothing at all. It now re-heals that spot from a different donor.
Sliders, progress bars, checkboxes, and the Apply button drew from three different colors—two of them the macOS system accent rather than the app's, so they changed with your Mac's settings rather than your theme.
The outline of your last stroke could stay on screen until you moved the mouse.
The focus ring added a second stop in the tab order.
Circle an area where you can see dust the detector missed, and it finds it—every mark in the region, not one. It consults no model at all, and that is the point: across 55 specks the detector had missed, dropping the model's own threshold as far as it goes recovered 9% of them, so neither the Sensitivity slider nor the Heal brush can reach this dust. The Lint Roller finds 89% of it by measuring the film instead. Marks with a lasso, marching ants while you draw, and it says "nothing here" rather than inventing something when the film really is clean.
A repair on one frame put every tool to sleep on every frame; only the frame actually being repaired is held now.
L now selects the Lint Roller, which is the key the hand reaches for.
A stroke dragged off the edge of the frame could take the app down—in the new tool, in the Line tool, and in the dust-hunt overlay. All three had the same cause.
A long mark is traced as a thin line, and wherever it broadened—usually right where it crosses something—the rest of it was discarded before the repair ran, so the mark survived inside your own mask. On the frame this was found with, that stretch went from 3% repaired to 85%, and what was left of it was the most visible thing on the picture.
The correction used to be worked out once for each mark. On a scratch crossing a sky that meant it could run five levels dark for four hundred pixels, drift back, and still measure correct on average—invisible up close, a faint band when you step back. It is now worked out pixel by pixel against the film beside it.
The replaced grain carried about the right amount of energy, but its bright specks were a third too dim and its dark ones a fifth too shallow, which reads as flat gray at 100% no matter how well the average matches. Its whole distribution is now matched to the film around it.
Film just outside a mark that is still part of that mark used to become the repair's reference, so the fill rebuilt a piece of the defect out of the defect.
The test deciding which of a brush stroke is real defect used a single measurement for the whole mark. On a stroke running from light film into dark it kept everything at one end and discarded real mark at the other.
A filled mark could land slightly lighter or darker than the film beside it—invisible on a speck, but a long scratch across an even sky read as a faint band once you stepped back. Every repair is now compared against its surroundings, tone by tone, and nudged to match.
A scratch running from a dark area into a light one used to get a single grain strength for its whole length, which is too much at one end and too little at the other. Grain is now measured and applied by tone, so each part of the mark carries the grain the film has there.
A frame you masked entirely by brush has no detection on it, by definition—so reopening it passed the "detect on open" test and ran a detection straight over your work. Frames carrying brush edits are now left alone.
Discards a detection and keeps your brush work. Clear Edits does the opposite and Reset Image discards both; there was no way to drop just the detection.
If a scan is re-exported or edited after Spot Tone saved a detection and brush edits for it, that work describes pixels which no longer exist. Spot Tone now notices and declines it instead of laying it over the new image.
The brush has always been asleep while a repair runs, but the canvas drew the stroke anyway—so the mark appeared under the pen and then vanished when the repair landed. The pointer now shows the brush is unavailable, and nothing is drawn.
On frames where a lot of dust crosses an edge, the bar reached 85% in a few seconds and then appeared to hang for half a minute—the last stage was doing most of the work while claiming a sixth of it. The bar is now weighted by how much work each part actually is, measured per image, and it moves the whole way through.
(or a detection, if that's what's running)—the Mac shortcut for stopping a long job.
It was ignored during the two longest stages, so pressing it looked like nothing happening.
The app compares against the model it has loaded, and none is loaded until the first detection of a session—so every restored detection was reported out of date until you detected something. It now says nothing until it knows.
Moving to a different frame mid-repair showed the first frame's percentage against the second, as though the new image were repairing.
The repair used to run first, against the old detection, so the frame arrived already out of date and needed repairing again.
Around a third off on a heavily marked frame, from work that was being repeated needlessly inside the new fill.
Taking an image out of the list and quitting straight afterwards could bring it back on the next launch—the list is written a moment after you change it, and quitting inside that moment discarded the write. It is now written before the app closes.
The new repair only does its extra work where a mark sits across a tonal edge, which is the only place it helps. Marks on even film skip it. On a frame carrying over a thousand specks that is roughly a third off the repair time.
A hair or scratch running from a dark area into a light one used to be filled with a gray smear—the old fill could only average what surrounded it, and there is no single average that is right on both sides of an edge. Repairs now hold the edge through the mark, and take their grain from the film beside them. Judged blind against the previous version on 76 comparisons: preferred on 96% of marks crossing an edge, and indistinguishable on ordinary dust, where the previous fill was already good.
A frame carrying well over a thousand marks can take around three times as long as before. Ordinary frames are unaffected.
A filled mark took its texture from the single best-matching patch of nearby film. It now blends the top matches, which averages away the quirks of any one patch—grain that reads as grain rather than as a copied fragment.
The warm accent is the app's own; the previous default palette is still there, renamed Neutral (Settings ▸ General ▸ Interface palette). Switching palettes now updates every control immediately instead of waiting for a relaunch.
Bright red sat at the same brightness as film highlights and could compete with them; the new color sits on top of the image rather than among it. Red is still available, and ⇧O cycles the choices.
They were drawn at full accent strength and pulled the eye away from the picture they exist to adjust.
Choosing a session from the menu whose files live on an unmounted drive did nothing at all and said nothing. It now names what is missing, and says plainly when the volume itself is not mounted rather than implying the files are gone.
Panning by gesture was only bounded while the pointer happened to be over the picture—the moment the image moved away from the cursor, nothing held it, so a casual scroll could send it out of view entirely and getting it back moved in stubborn little steps. All scrolling is now bounded the same way the Hand tool always was, wherever the pointer is.
A file was treated as a Photoshop hand-off—cleaned, saved over, and the app closed behind it—whenever any .json happened to sit beside it with a matching name. That is the exact shape of a correction bundle unpacked for review, so opening one to inspect it overwrote it. Spot Tone now reads that file and only treats it as a hand-off if Photoshop actually wrote it.
Handing a frame back to Photoshop closes Spot Tone so the editor comes forward—but that quit fired even when the hand-off was one file among many, so a single image opened from Finder could take a whole restored session with it. It now only closes when the handed-over file is the only thing open; otherwise it stays put and tells you it saved.
It used to be W, which was only ever a leftover from before the tool was called Heal. W still works, so nothing breaks if your hands already know it—but everything on screen now says J.
Anything sent that way had most of each detected mark discarded before it was repaired, so marks came back barely touched—a large blob might have under a tenth of it filled. Repairs made in Spot Tone itself were never affected. Both paths now do the same thing.
The smallest brush was a 13-pixel disc; there is now a 5-pixel one below it, for single specks that the old minimum painted straight over. The brush size refects as "1px".
File ▸ Save Session As… keeps the current set of images, with their detections and brush edits, under a name you choose. Recent sessions are replaced as you open other work; named ones stay until you delete them, so a job you come back to over weeks is not quietly rotated away. Reopen from File ▸ Open Saved Session.
Move or rename scans while a session remembers them—or work from a drive that isn't mounted—and you get a list of the full paths, selectable, with a button to copy them. Suppressible if you'd rather not see it. Missing frames are marked in the filmstrip instead of spinning forever as though they were still loading.
A file that had gone missing was remembered indefinitely and reported again every time you opened anything, long after you had moved on to other work. Now it is only mentioned while you still have other frames from the same folder open.
It was drawn hard against the circle at small brush sizes because the spacing was measured before the outlines were drawn, not after.
The command-line tool behind those integrations resolved its model separately and had fallen three updates behind, so the same frame could come back different depending on which way you sent it. Both now resolve the same model, and the installer checks they still agree.
Spot Tone listed the entire training corpus at every launch—about eighteen seconds on an external drive—and until it finished, frames you had already contributed were shown as if you hadn't. It now remembers the answer between launches and re-checks quietly in the background. Restoring a session no longer touches the disk from the main thread either.
Showing a repaired frame decoded it on the spot, stalling the window for about half a second each time. Decoding now happens ahead of you, on the next frame along. Large rolls of repaired frames also stay within their memory budget, which previously did not count them at all.
Settings ▸ General ▸ Interface palette ▸ Daylight. The area around the picture stays neutral either way, so it does not change how the image reads.
The toolbar, the tools and the filmstrip announce what they are and what they do, rather than reading out an icon name. Keyboard shortcuts are spoken as part of each control's name.
, in Settings and elsewhere, and the focus ring is now visible where it was being drawn over.
On the Cyan and Green palettes, marks and fence-sitters were nearly identical in lightness and could only be told apart by hue. All five palettes now separate them by brightness as well.
Useful on a long roll when you want one frame or one run of frames.
when you move to it while a detection is already running; it waits for the one in flight instead.
, in the inspector, so you know when a frame is worth re-detecting. Re-detecting (⌘D) keeps your brush edits—only Reset Image clears those.
Spot Tone protects the film's own edge—the rebate, or the holder—because a frame border looks exactly like a long scratch to the detector, and filling one leaves a solid streak. The test was too broad—any mark with a different tone on its two sides, like a hair across a shadow or a collar, was treated as the film's own edge and left alone.
The automatic sweep used to mistake hard vertical subjects—bare trunks against bright sky, industrial stacks—for scanner lines and smooth them away; those are fixed. Horizontal courses of brick or mortar still fool it, and will be flattened. If a repair loses detail it shouldn't, switch off Scanner lines and repair that frame again.
Grain was synthesised from a fresh random source every run, so two identical repairs came out slightly different.
Rubbing out one of the faint teal detections used to change nothing that reached training—the strongest judgment you can make, that a thing the model half-saw is not dust, was being thrown away. Those erasures are now recorded and weighted heavily. This applies to corrections made from here on.
, beside the masked percentage.
, directly under About Spot Tone, where macOS apps keep it. Both the app and detection-model checks are there.
on a rotated frame, instead of turning with the image and reading as a vertical bar.
, and keeps the same visual gap at any zoom or brush size.
When Spot Tone repairs by copying nearby film, it looks for a patch whose tone and grain match. On smooth film there is usually a good one. On a face, a hand, or anywhere with real detail, there often isn't—and it was taking the closest thing it could find and pasting it anyway, which could leave a distinct disc with an edge running through it. It now refuses a poor match outright and reconstructs that spot instead. Repairs on detailed frames take a little longer as a result.
The Heal, Re-heal and Line brushes carry a small mark beside the cursor. It sat where a pointer's tip would be, so the eye kept aiming with the mark instead of the dot in the middle, and it drifted to a different corner depending on how the frame was rotated. It now stays in one place, clear of the ring, whatever the image is doing.
A minus, so all four marked tools read as a set and the plain brush stays unmarked.
"Check for Model Updates" could tell you that you were up to date when a newer detection model had already been published—sometimes for hours. The file that announces a new model carried no cache instructions, so macOS was free to guess how long its copy stayed good, and the guess got longer the longer a model had been in place. It's now always fetched fresh. (Fixed on the server side too, so it's already right even before you install this.)
When you paint over something the detector missed, Spot Tone decides which pixels under your stroke are really the defect. That judgment was too tight: on shallower stretches of a hair it was keeping two pixels where a careful hand retouch used nineteen, so the repair left a visible trace no matter how well you brushed. Retuned against a hand-cleaned frame rather than by eye. On the test frame the leftover halved, and a hair on a second frame now comes out as clean as painting the whole stroke in by hand.
Some scanner lines are a broad shallow band rather than a crisp line—several rows wide, only a level or two deep. The tool measured across a fixed narrow span, which for a wide line meant looking at the line on *both* sides of itself and concluding there was nothing there; it would report finding nothing on a line you could plainly see. It now widens its measurement until it clears the line. Sweep across the whole width of a band like that, not just its middle. Thin lines got better too.
The checkbox in the Getting Started walkthrough works now. And if you never touched it, Spot Tone asks once—after you make a correction that would genuinely help, so there's something concrete to say yes or no to, instead of on day one before you've repaired anything. Decline and it won't ask again. You can always turn it on at Settings ▸ Contribute, any time.
Painting with B over a defect that's *darker* than the film around it could do nothing at all—the mark went down, the repair ran, and the defect was still there. The brush was being quietly overruled: before healing, Spot Tone looks for the thin thing inside your stroke, and that search could only ever recognize defects *brighter* than their surroundings. On a busy frame it would latch onto some bright texture beside the hair, treat that as what you meant, and throw the rest of your stroke away. It now has to justify itself—if what it found doesn't account for what you painted over, your stroke is used as drawn.
The bar showed the current image's progress but never how many were left. It now reads "47% · 3 of 12" beside the bar, and the status line names the position too. Canceling reports where it stopped instead of going quiet.
, not just the newest release—useful if you skip a few.
The long horizontal and vertical lines a scanner lays across a whole frame are much more completely removed. Three separate faults were making a mess of them: the worst lines were being corrected the *least* (the measurement that decided how much of a line to treat got harder to satisfy the deeper the line was), a dark line could come back lighter than the film around it, and what did get repaired was laid down in hundreds of short dashes that read as a mottled smear. All three are fixed, and the automatic pass now also catches the faint bright bands that sit either side of a line—part of the same defect, previously left behind. On a test scan the result is now flatter than a careful hand clean-up of the same frame.
For a line the automatic pass still won't take. Sweep across it and the whole length of that one row or column is measured and leveled—the stroke only says *which* line. That's why it reaches lines Sensitivity can't: a line four levels deep is invisible one pixel at a time, and only shows up once you measure along its full length. Finds nothing? It says so and changes nothing.
A hair sitting on the white holder band at the edge of a scan could come back as a dark blotch dipping into the picture. The tone correction was pulling the whole patch down to the film level, including the part that legitimately belonged up at holder brightness.
Image ▸ Reset Image… (also on the filmstrip right-click) puts a frame back to freshly opened—detection, brush edits, repair, touch-ups, Sensitivity, and rotation all cleared. Revert only drops the repair and Clear My Brush Edits only drops your strokes, so there was no way back to a clean slate short of removing the frame and re-adding it. Your file on disk is never touched. If a correction from that frame hasn't been sent for training yet, it's withdrawn too—resetting means you didn't want that work.
Brush over a stray fiber—roughly, any brush size—and Spot Tone now finds the fiber itself instead of grabbing a chunk of your stroke. It works the way your eye does: judging each point against its immediate surroundings rather than the whole area's average, recognizing that a fiber lying on the film is *sharper* than a soft-focus picture, and following the curve through the faint stretches. The fill is simpler too—for something that thin, the surrounding image already tells us what belongs underneath, so nothing is cloned or invented. Previously these came back as a flat patch or a mottled smear no matter how carefully you brushed. Very faint tails can still survive; a second pass helps.
A defect close to the black rebate or the white holder could pull the border into the picture, or heal as a hard-edged shape with a bite taken out of the frame edge. Fills now keep both the repair and the film it borrows from on the picture side of the border.
Running Detect again on an already-repaired frame now flags the repair as stale, so exporting can't quietly save the older version.
Reopening a session now restores the work itself, not just the files: frames you healed by hand return pixel-for-pixel as you left them, and frames repaired with ⌘R quietly repair themselves again the first time you view them, with your hand touch-ups laid back on top. While a frame is coming back the brush pauses for a moment ("Repairing—the brush wakes when it finishes") and then you're off.
Running ⌘R again—say after raising Sensitivity—no longer re-rolls spots you'd already perfected with Heal, Re-heal, or the brush. Hand-healed pixels win over the global pass, and erased spots stay erased.
Once a repair exists, every stroke heals (or un-heals) on release—they used to quietly stop after an undo or a Sensitivity nudge, while Heal kept working.
Touching up a frame whose repair was out of date (marks changed since ⌘R) used to mark it current by accident, so exports could miss marks you'd added. It stays honestly out of date until you re-Apply.
⌘Z takes the heal back without quietly pinning the dust against every future repair—Erase remains the deliberate "leave this alone" tool.
The fill model now warms up in the background, same as the detector.
The detector now warms up in the background instead of on the main thread, so the window no longer freezes while macOS re-optimizes the model the first time you launch a new build (most noticeable with "Detect on open" turned on).
The tour shows exactly how to send a frame in from each—Photoshop's File ▸ Scripts ▸ SpotTone, Lightroom's Plug-in Extras ▸ Clean in Spot Tone… or a one-time Edit In ▸ Spot Tone setup—and that the installer already put both in place, no plug-in to add.
, laying out what's actually sent (the dust you brush, never your photographs), and that precise marks teach the model more than rough ones.
Sweep the new Re-heal brush over a spot you've already fixed and it heals it again from a different patch of clean film—sweep again to cycle through other sources until one sits right. ⌘Z steps back if a pass looks worse. It only re-does what the last repair filled under your stroke; the clean film around it stays put.
, and both healing brushes carry a bandage cursor so it's clear which one you're holding. Heal also reaches more: it combines what the model sees with a contrast pass in a single stroke, catching faint fibers it used to walk past—and a defect the model already found is no longer trimmed back before it heals.
A defect close to the black rebate or the white holder used to heal a shade too dark or too light, pulled toward the border. Fills now settle to the surrounding film tone—even a long scratch that crosses from bright film into shadow, corrected in pieces along its length.
Thin scratches, fibers, and scanner lines—the ones that used to leave a faint blotch—now clone real grain from nearby and match its tone, so they disappear the way a hand retouch does.
Undoing a brush stroke after a repair now reverts what it healed too, not just the mark—no re-apply needed to bring the original back.
Turn on Settings ▸ General ▸ Detect on open and every frame you land on runs detection quietly on its own, stepping aside the moment you pick up a brush.
The first session is selected the instant the window appears, so arrows and Return work right away, and it's sized to show a full set without scrolling.
Sweep the new Re-heal brush over a spot you've already fixed and it heals it again from a different patch of clean film—sweep again to cycle through other sources until one sits right. ⌘Z steps back if a pass looks worse. It only re-does what the last repair filled under your stroke; the clean film around it stays put.
, and both healing brushes carry a bandage cursor so it's clear which one you're holding. Heal also reaches more: it combines what the model sees with a contrast pass in a single stroke, catching faint fibers it used to walk past—and a defect the model already found is no longer trimmed back before it heals.
A defect close to the black rebate or the white holder used to heal a shade too dark or too light, pulled toward the border. Fills now settle to the surrounding film tone—even a long scratch that crosses from bright film into shadow, corrected in pieces along its length.
Thin scratches, fibers, and scanner lines—the ones that used to leave a faint blotch—now clone real grain from nearby and match its tone, so they disappear the way a hand retouch does.
Undoing a brush stroke after a repair now reverts what it healed too, not just the mark—no re-apply needed to bring the original back.
Turn on Settings ▸ General ▸ Detect on open and every frame you land on runs detection quietly on its own, stepping aside the moment you pick up a brush.
The first session is selected the instant the window appears, so arrows and Return work right away, and it's sized to show a full set without scrolling.
Wide (panoramic) thumbnails no longer spill across neighboring cards—and, less visibly, that overflow had been throwing off which card your click landed on. Hover any session and click the × to remove just that one, instead of clearing the whole list. Sessions whose files are gone say so plainly rather than opening to nothing.
—no separate Apply step, whether or not the frame has been repaired yet. Paint over a defect, it's gone. Brush and Erase still work alongside a repair as before.
Repairing, brushing more, and repairing again used to send the same frame several times with a half-finished mask each time—which taught the model that an unfinished mask was the right answer. Corrections now settle before they're sent, so a session contributes one complete example. "Send now" in Settings still sends immediately.
Where clean film exists nearby, Spot Tone clones it into the repair and lets a correction field blend the tone—the same thing a retoucher does by hand. Fills used to be a smooth patch with grain sprinkled on, which could match the grain's strength but never its character, so repairs stayed faintly visible at 100%. Measured against a hand-retouched frame, repairs now match the surrounding film as closely as the manual work does. Long scratches and fibers improved most: the model that fills them returned a grain-free surface that was never re-grained until now.
Painting over a speck used to heal the entire stroke, replacing good film around a small defect—which is why brushed repairs looked worse than Smart Dust's. Now only the film that actually differs gets healed, so a rough stroke repairs as cleanly as a precise one. A stroke that finds no defect still heals exactly as drawn.
Once a frame has a fresh repair, a brush or Smart Dust stroke repairs itself on release instead of marking the whole frame out of date—and erasing brings the original back, so you can see exactly what a mark is doing. The first repair stays deliberate: detect, review, ⌘R.
If the model scores nothing under your stroke, W now finds the defect by contrast instead of reporting nothing. The status bar says when it did, because those are the frames most worth committing for training.
On black-and-white scans, fills stay black-and-white.
Settings ▸ General can start export panels in the folder the file came from, rather than wherever you last saved.
The palettes are now Spot Tone (the default), Safelight (graphite with a warm orange accent), Ortho, and Darkroom—the first two were previously called Instrument and Studio Neutral. Getting Started is a proper walkthrough now, showing the real controls page by page.
Settings ▸ General ▸ Interface palette now offers four: Instrument (cool graphite, the default), Safelight (graphite with a warm orange accent), Studio Neutral (true grays and blue), and Darkroom (warm blacks and brass). Changes apply immediately—every window, panel, and sheet turns over together, no relaunch. The image area stays neutral in all four, so nothing tints your read of a frame.
Space and Return activate a focused checkbox or menu, Esc closes Preferences, and the spacebar still grabs the Hand tool whenever the canvas has the keyboard rather than a control.
File ▸ Browse Sessions shows your past sessions as cards—first frame, job folder, date, frame count—instead of a list of timestamps. The Open Recent Session menu gets the thumbnails too. If a launch opens nothing at all, the browser greets you rather than an empty window (switch that off in Settings ▸ General).
Chrome is no longer stock gray: Settings ▸ General ▸ Chrome style offers Darkroom (warm blacks, brass), Studio Neutral (true grays, blue), and Instrument (cool graphite). Takes effect on relaunch. Buttons now speak in a consistent hierarchy—the actions that produce work stand out, the housekeeping ones recede—and the canvas surround stays deliberately neutral so nothing tints your read of a frame.
It was being intercepted app-wide; selecting all files, and all images, both behave now.
File ▸ Browse Sessions shows your past sessions as cards—first frame, job folder, date, frame count—instead of a list of timestamps. The Open Recent Session menu gets the thumbnails too. If a launch opens nothing at all, the browser greets you rather than an empty window (switch that off in Settings ▸ General).
Chrome is no longer stock gray. The new default, Instrument, is cool graphite and nearly colorless—maximum deference to the image. Settings ▸ General ▸ Chrome style also offers Studio Neutral (true grays, blue) and Darkroom (warm blacks, brass); takes effect on relaunch. Buttons now speak in a consistent hierarchy—the actions that produce work stand out, housekeeping recedes—and the canvas surround stays deliberately neutral so nothing tints your read of a frame.
It was being intercepted app-wide; selecting all files, and all images, both behave now.
Both "Edit Original" and "Edit a Copy" arrive recognized, so you get Save & Return instead of just Export—no plugin required for the hand-off to work (the plugin's richer flow is still there in Library ▸ Plug-in Extras). Under the hood: Lightroom identifies itself in a legacy address format from the classic Mac OS days that took some archaeology to decode. Files you open yourself are still never treated as round trips.
A stray brush stroke mid-run used to invalidate the repair and quietly cancel that frame's return. While a run drives, a progress panel owns the window; Cancel (or Esc) stops cleanly—frames already returned stay returned, the rest stay open for your review.
The file being replaced is PS's temporary render—your document just gets the cleaned layer, so there's nothing to warn about.
On frames where red would sink into the image—warm plates, red-scale film—the mask now renders cyan automatically. ⇧O cycles the color by hand (Auto · Red · Cyan · Green · White) for anything the automatic pick misses; the status bar names each as you cycle, your brush strokes preview in the matching color, and the fence-sitter color always stays distinct from the mask's.
Since the first beta, a small trackpad or Magic Mouse scroll could fling the image into a corner no matter how gently you moved. The culprit turned out to be macOS proposing a garbage scroll position (literally negative infinity) whenever the overlay scrollbars woke up—Spot Tone now ignores nonsense proposals, so panning follows your fingers and stops inside the working buffer.
Return, Esc, or a click on the image all hand the keys back to the tools.
—a stroke that wandered past the pixels took the app down. Two of you found it within hours; that's the beta working.
0.2.16 clamped panning hard at the image edges and pinned smaller images dead center. Now you can pull an edge toward the middle to brush it comfortably—panning just can't strand the image: at least half of it always stays on screen.
Turn on "Show fence-sitters" (Detect section) and the overlay adds teal marks where the model *half-sees* something—above the Smart Dust floor, below your Sensitivity setting. Teal means "one W stroke marks this." Off by default; teal on purpose, so doubt never reads as a faint detection.
After a smart stroke, = loosens and - tightens the cutoff instantly—no re-detect, it re-reads the scores it already has. Works after a "found nothing" stroke too: tap = until it bites.
—you see the frame immediately (softly, from its thumbnail) and it sharpens when the full file lands.
Files whose uprightness lives in their EXIF flag (camera-scanned rolls, some lab JPEGs) showed upright thumbnails but a sideways canvas—and worse, *exported* sideways, because the flag was being stripped on save. The canvas now honors the flag, exports keep it, and your own ⌘[ ⌘] rotations stack on top.
(Settings ▸ Auto-clean round trips, off by default). When Lightroom or Photoshop hands frames over, they're detected, repaired, saved back, and returned automatically; frames the model isn't confident about are left open for your review. Only verified hand-offs qualify—files you open yourself are never touched.
Somewhere between the brush and the magic wand: paint over a defect and the model re-examines *just that area at full resolution*, then marks only the pixels it agrees are dust. On big plates this matters—the whole-image detect sees a 16k scan zoomed way out, where a hair-thin fiber all but vanishes; the cropped look sees it at 100%. Clean plate under the stroke stays clean, the stroke previews ghosted, real marks land on release, and if nothing qualifies the status bar tells you what the model actually scored there.
(bottom of File ▸ Open Recent Session) clears the session history—including the brush edits stored with it, which it tells you before doing.
Spot Tone kept the last three images in memory no matter their size—fine for 35mm rescans, but three 16-bit 80-megapixel plates is nearly 5 GB, and macOS quietly kills apps that ask for too much (no crash, no report, just gone). It now budgets by actual memory and by what your Mac has, keeps far more small scans than before, and hands memory back when the system says it's tight.
Opening a frame—or restoring a session at launch—used to lock the app up while it decoded. That work moved off the main thread, so the app stays responsive. It also fixes a full-screen relaunch that could come up black.
, and they now yield to the frame you're actually looking at—a big roll on a network drive or external RAID stops fighting itself.
If a frame's saved detection can't be read back (moved, re-scanned, or re-exported at a different size), it's skipped with a note instead of contributing a misleading example. Re-run Detect and commit it again.
A frame handed over by Lightroom or Photoshop gets saved back over—that's what it's for. Anything you open yourself (⌘O, drag, Finder, the Dock) never does; use Export. Until now *any* file opened from Finder was offered it, one keystroke from overwriting an original. The first Save & Return of a session asks first, too. Lightroom users: the plugin now installs with the app and needs to be current.
—same reason: it could write over a file you opened yourself. It'll come back once the round-trip rules have settled.
, Camera Raw style: format and filename suffix on the left, the buttons on the right. "Export N Repaired" counts what it will *actually* write—a repair lives in memory until it's exported, so frames repaired before a relaunch need Repair + Export (your brush edits are still there; it recomputes from them).
—throw a repair away and go back to the mask. Nothing is lost: ⌘R recomputes it from the original. And a repair that no longer matches your edits now says so instead of quietly exporting the old result.
File ▸ Open Recent Session reopens any of the last few (Settings sets how many). Scans on a drive that isn't mounted are held in the session instead of silently dropped—reconnect and relaunch. Hold ⇧ or ⌥ while launching to skip restoring, and if a session ever fails to load, the next launch skips it on its own.
—in 0.2.12 it only appeared when you let go.
Digital captures get a sensor-dust model; film scans keep the film model—picked automatically per image (or choose in the inspector, including "camera-scanned film," which runs both).
after a Detect, the model deals out the spots it's *least sure about*, one at a time—you call each dust or not (→ / ← / ↓ to skip). It exists purely to help train the model where it's weakest; if you contribute corrections, your verdicts do exactly that. The main view jumps to each spot at 1:1 for context.
sends a bug or idea straight to me, no email needed.
the brush outline shows its true size at every zoom level, and responds to pen-tablet pressure (Wacom & friends)—press lighter for a finer point.
(⌘[ / ⌘], or ⇧F2 for a whole roll)—display only, your file is never altered.
Generated 2026-10-15 from the release history.