Skip to content

What's new

What’s new lists what each release of Sift changes for you, newest first. To see the version you run, open Settings > Updates and Info.

  • A file on a network share opens with one round trip instead of five. Every read of a file’s bytes proved its path lay inside its library folder by resolving it, which on a share is five round trips, about 320 ms at best and seconds while an import reads the same share. A share’s root is resolved once, and the file gets one look: about 110 ms, 66% less.
  • An Identify pass no longer stalls the app at its first file. Every worker used to build the face gallery for itself as the pass began, each reading and unpacking every reference face (13,271 faces, 27 MB of numbers: 28 to 32 s each with 23 workers), and a video took up to 9.4 s to start while they did. One worker builds it now and the rest wait for its answer, and the build reads the numbers as one block: 256 ms to 35 ms, 86% less.
  • Screens re-read at a walking pace while an import runs. A screen reads again for the live feed’s bells at most once every ten seconds, immediately after a quiet spell and immediately for a change you made yourself; the file page went from 17 requests a second to 1.5, Downloads from 4.6 to 0.5, Tasks from 3.9 to 0.6.
  • A task gives the screens a share of its time, not a wait at every statement. Under the screens’ reads the sandbox settled 406 probes a minute against 489 with no reads (79 before).
  • The file page and History read only the folders on the file’s path (3 rows instead of a whole library’s 868 to 1,015).
  • The Tasks page of one kind no longer walks the whole queue for a rare kind: 475 ms to 0.25 ms on one library of 1.3 million jobs.
  • Pause all tasks survives a restart. The pause, whole or of one pass, is kept with the queue and holds through an update or a crash until Resume.
  • Time left is in the log once a minute per pass, exactly as the Tasks screen shows it, and a run’s finish is scored against the moment its work ended; a run cut short by a restart leaves its said windows behind for reading.
  • A share somebody is watching from gives way. While a stream plays from a storage, and for ten seconds after, the import’s readers on it take half its places, so a Theater cell on a share starts without waiting behind the import; a stream whose first bytes are slow says where the time went.
  • The archive cache stops copying at its ceiling. A take-in whose copies would be dropped before any pass could use them files none for a minute, and a cache that cannot free room is walked once a minute instead of once per file (2,870 ms of a 5,383 ms probe before).
  • A move of 300 files within a shared root is on screen within a minute while the same share is walked (8 min 54 s before).
  • A stall writes its own evidence: the loop’s stack, every other thread’s, and the collection’s time beside the processor it used, into the library’s log.
  • Faces to confirm builds its groups’ faces off the loop (a page of the 24 largest groups 106 ms worst to 16).
  • The top bar is one row at every width. The tile size, Add’s paste half, Filter and Sort by never leave it; the trail ends in an ellipsis when it is short of room, with the whole path as its tooltip; on a narrow window the tile size’s track shortens and Add shows its plus alone, so the search box keeps its width.
  • One mark on a face crop: the question when it waits for an answer, Sift’s face in a ring when Sift named it, none when you confirmed it.
  • A file stored in more than one place is modified, compressed, renamed and moved one copy at a time: each asks which copy, offers only the copies Sift may change, and preselects the first.
  • Every swap step is one list. What moves is grouped as Sift files it (People, Sites, Collections, Photo Sets, Songs, other files), each group with its files, size and a state that is the only thing changing from step to step; a guest ticks per group and per file and reads what it will have after (“203 to 612”); Start says the time at the tunnel’s last measured rate and, once, what the other side will learn; the transfer names the file crossing now; a cut-off counts down to the rejoin and offers Try again now.
  • A swap ends with a receipt, kept and opened from its History line: what landed or was sent per group and how it was filed, what was not taken and why, where, the rate and the tunnel. Its Undo takes back only the files the swap landed (from disk too, in the swap’s own folder) and the People, Sites and Usernames it made that nothing else holds.
  • A change you press is never undone by a slower read. A delete, rename or heart shows immediately and stays; a list read that began before it is not drawn over it, and the feed’s echo of your own write reads immediately.
  • A Theater cell that cannot play a file converts it instead of giving up. When the window says it can play a file and then cannot, the cell asks for the converted stream, plays it from where it was and says why; before, a run of such files left the cell sitting on its picture. Conversions play through Sift’s own stream player on every desktop, and a window’s “maybe” for H.265 or AV1 counts as no until it has played that codec once. Every plan is now in the log.
  • Other minor UI improvements.
  • Library tasks: correct, fast and fault tolerant. A folder scan writes its plan and resumes from where it was: a restart no longer costs it an attempt, and every file it had taken in keeps its probe and its place in Search (one kill mid-scan: 101 s to the next new file before, 31 after; 100 files left out before, 0 after). A cancel leaves nothing owed, whether the scan was running or waiting. A library folder that stops answering holds the scan and carries on when it answers again, instead of failing it. A full disk is a wait, not a failure.
  • Imports read each file once. On a network share a file is copied into Sift’s cache once and every task reads that copy; a picture is probed by one ffprobe and decoded once for its tile, its fingerprints and the three Identify passes (a photograph’s import reads about 2 times its size where it read 6, and launches 2 tools where it launched 6); an archive’s pictures are kept for their passes. A scan you press, a folder you move or a file you name reads ahead of a whole-library scan.
  • The queue claims by kind. The work queue seeks each kind’s next file instead of walking its rows (the claim 119 ms to 0.03 ms at 284,000 queued), no task waits for a whole scan to finish, idle workers wake for work they can take, a settle such as face grouping runs during the run that asked for it, and the duplicates pass compares nothing when no fingerprint changed (105 s to 0).
  • The screens go first. A task’s statements yield to a request you are waiting on, and the Tasks page’s long reads are kept and refreshed behind the answer.
  • Time left says “Measuring.” until it can say a figure, priced from a pace measured across runs, never from another device’s profile; a run is its batch; a family’s workers are the ones it can use.
  • Failures are classified before a retry. Broken bytes are refused once with the decoder’s own words; a disk or share error, a busy database and a tool that ran too long wait before trying again; a missing copy is a hold when its share is away and a refusal when its folder answers.
  • Browse no longer flashes while an import runs, and a file that was moved says so in the player (“Sift can’t reach this file where it last saw it”, with the scan that finds it named) instead of blaming its codec.
  • One chooser for Add a folder and Migrate from Stash, with Browse this device in the window and in a browser; Migrate from Stash chooses the database file itself.
  • The benchmark prices Faces and Smart Search from their own runs, reads small files and times the listing, and the Performance pane shows Sift’s achieved rate against what a drive or share can give.
  • The log keeps what a diagnosis needs: one summary line per task at Normal, the per-file lines at Detailed, and a job’s bytes counted truly.
  • Insights counts what happened. A Theater wall counts one hour per hour its cells played, never its idle span; time falls on the day it was spent; a sitting stops counting after 15 minutes of a picture or three plays of a video; files, People and Sites viewed leave a wall’s cells out; a finished day waits for its evening and is counted again when a later write reaches it; deletions count. Insights adds every day up again once after this update.
  • Every figure says what it counts, one hover away; the Stats press at the end of Insights’ tools row shows every figure of a period as tables with a Copy.
  • Charts read on the bar: each bar, day and hour carries its figures in a tooltip, from the pointer and the keyboard; the “in figures” table under a chart is gone.
  • Alongside: on Week, Month, Year and All, what moved together in your own record, said with its sample and never as a cause.
  • A recap of each day, beside the week’s, the month’s and the year’s; Settings > Insights turns each kind on or off. A recap re-counted after a correction says so in History.
  • A recap’s cards are one size as you turn through them, a Site’s mark whole on its card, and the saved picture is the card as you see it.
  • Your year, as a deck of 18 cards: the five files you viewed most as a mosaic, the first and last file, the first month against the last, how one visit went, People month by month, the year’s days, and a closing card of six figures. Tick cards and save them as pictures, one file each; save a year’s or a month’s deck as a video, with the cards’ own motion; keep the year’s lists as Collections with one press, never created on their own.
  • Insights is a board of tiles that fills the window: the period’s headline, the time viewed with its bars, the top People as faces, the top file, the Sites as marks, the days and the counts on the first screen, then the rest by family, each in its colour; every tile opens its own table on Stats, which has an index, a panel per table with a small chart, and a way back. “See today’s recap” (this week’s, this month’s, this year’s) beside Stats, on the tabs’ line.
  • The popout player’s Repeat and Shuffle are in its drawer, beside Randomize, as on Theater’s bar; the row keeps Previous, Play and Next.
  • Faces: a strength bar that is one rate. How well Sift recognizes somebody is the share of their faces it named without asking, drawn full width, with the line under it saying what it rests on: imported fingerprints, faces you confirmed, faces Sift recognized. Sift’s own picks never outnumber the pictures you confirmed; the ones over that are retired with a History line.
  • A facial fingerprints folder keeps more of its photos: a face too small on the first read is measured again at the file’s own size, against your library’s quality setting, and a face turned away is kept for its person and never matched.
  • Faces to confirm: every card one height, its strip two rows of six with a true “+N”; cards of different kinds pack without dead space; a card of several groups shows three and “and N more”. “Faces to name” is now Unnamed faces; a person’s card says “awaiting your input”.
  • Yes to all on hundreds of faces answers immediately and agrees in the background, in batches, with “Agreeing with N faces” on the card while it runs; after a Yes, a small working mark says Sift is matching the rest of the library against that person’s face.
  • Add as person opens with its filter box first and a list of eight rows; “All N on this page” and “All N in this group” now pick those faces and open the picker.
  • Back leaves a tabbed screen in one press, whatever tabs were pressed on it; a link to a tab still opens on that tab.
  • A press anywhere on a card opens it, and every card that opens something lights on hover.
  • The top bar keeps Filter and Sort by longer as the window narrows: the trail folds first, then the tile size leaves, then Add’s paste half, and the menus last.
  • Browse says “N moved”, never “N new”, for files already on the wall that moved up because you viewed or hearted them, and the wall does not reorder under an open player; the corner player’s Play through runs on past a picture; a filter chip pressed in Theater lands immediately.
  • Sift keeps answering through a busy moment. A connection that reset while the server was busy used to close the door for good: the app went on working its tasks while every page and every browser was refused until a restart. The door is opened again on the spot. The busy moment itself is gone too: a long task’s record of where its time went grew without bound and was sorted on every step (20,000 steps 68.6 s before, 0.03 s after).
  • Time left is each task’s own. Every long task’s time is its own work at its own measured pace, read over enough of its run to hold steady; a task that runs after the scan is no sooner than the scan and takes its share of the workers when the scan ends, instead of all four sharing one figure. While folders are still being counted, Activity says at least what the counted files take. On one library’s eleven-hour day, replayed, the windows held the later progress in 96 to 100% of samples for four of the five tasks (2 to 75% before).
  • A person’s strength bar rates the recognizer. It is now the share of the faces Sift named as them that were right by your answers; a face still awaiting your answer no longer counts against them (a person with 3,191 faces named and 572 awaiting read 85% before, now 100%).
  • Tasks wait for the screens only while a screen’s own statement runs. Before, every statement of every task waited up to a tenth of a second whenever any page was being answered; with the Tasks screen open a page was being answered 91% of the time, so a file probe with 39 statements lost about 3 s of its 3.3 s and the tasks ran one at a time. The wait is now on each task’s record.
  • A cache folder is listed at most once a minute, in one pass. At one library’s ceiling every new picture listed 10,000 kept copies again, 7.8 s a time, five times a minute; the listing is one pass (10,000 copies 882 to 314 ms) and a minute apart.
  • The filter columns are counted again at a walking pace during an import. Every bell of an import asked every column’s count over the whole library again (969 asks in ten minutes on one library, 626 ms each); the bells within ten seconds of an answer ask once, at the end of the ten.
  • Library tasks say what is true: “48 waiting, runs as files are imported”, “1 left out”, which opens the files with why each was left out, or “Up to date”; the time left is blank under a minute of work; a running Identify or Smart Search pass shows its window instead of “Not enough to say yet”. “Other tasks” sits under Import tasks.
  • A failed download waits before it tries again: 30 seconds, then 60, 120, up to ten minutes.
  • A cover picked by default comes from a picture only, never a GIF or a video; with no picture the letter shows. A cover you chose is untouched.
  • A desktop app older than the library it connects to offers its own download, with the title bar’s update mark and the banner; Settings > Logs > Download log finds the app’s own logs.
  • The Logs tab’s Warnings are warnings: slow-statement timing lines are filed as Info; the storage figure in Settings answers immediately from the last measurement.
  • Reads stay quick under a Generate: a History, Search or Organize read beside a busy pass no longer waits a timer tick per row.
  • Sharing a large folder or library no longer holds up everything else while it is applied: their files appear over the next few seconds, and taking a share away still applies immediately.
  • Fixed: a write that held the library database for more than five seconds kept warning in the log every five seconds after it had finished, and those warnings slowed Sift more the longer it ran.
  • A folded History line costs its presses’ totals, not their acts.
  • The release script asks again after a wrong signing password and signs an already built release with --no-build.
  • A file is imported, never “arrived”: every screen, folder setting, help line and the docs say imported.
  • Recap cards open with a short headline and a line in a warmer voice over their figure, compared only with your own usual; the plain sentence stays underneath.
  • The Task Queue lists what you pressed, not Sift’s own housekeeping. Counting a folder, keeping file details and the other work Sift starts on its own show only as their family’s progress, unless a step of theirs failed; a press over many files is one row with its steps; the list pages twenty at a time; a Done row’s time sits under Done.
  • A failed row says why. It is named for its job, its words wrap, and one line under it names the step, the file it was on, the tries and the reason.
  • Activity’s Run now is the task’s own press, and a pass or a sub-task can be paused, resumed and canceled on its row; the whole queue pauses from Options. A sub-task you have switched off no longer counts in its family’s status.
  • Importing is folded into Tasks and Activity. Scan, Generate and Identify are rows under Import tasks with their Edit before Run now and what each still has to do on its foot line; Folder-specific import settings sit under Identify; Activity and the Task Queue follow Other tasks on the same tab. An old Importing address opens the right place.
  • A folder’s answer no longer reaches a file whose copy there is gone while its real copy sits elsewhere.
  • A restarted facial fingerprints import passes over the people it already read.
  • Hidden no longer keeps a person out of a facial fingerprints file or a swap: Kept local keeps a person out of enrichment and the fingerprints file, Do not swap out of a swap.
  • Theater’s bar leads with Previous, Play and Next, then All 1 2 3; Repeat and Shuffle are in the drawer beside Randomize. Layouts are named Grid 1x1 to Grid 2x2 and Stage View 1x1 to 2x2, with pictures twice their size, and a saved filter chosen with All cells selected lands on every cell immediately.
  • The Audio player plays past a picture instead of turning into the mini player.
  • Opening a chooser no longer shakes the screen for a frame.
  • Downloading the models works on a Windows that lacks GitHub’s root certificate. Sift checks a secure connection against its own bundled roots as well as the computer’s, reads the computer’s roots afresh for every download instead of once at its start, and a failed download names the host that failed and what the certificate check said, with the connection’s own words under it; a refused certificate fails once instead of three times in a second. Every start logs which version of Sift it is, and the Download log carries the desktop app’s logs too.
  • App History’s first page in half the time (51.5 to 26.0 ms on a copy of a 94,000-file library), each act carrying its press; a folder’s files for an admin cost 95% fewer database steps; sharing a large folder costs a third fewer steps and holds the writer a quarter less.
  • A face in a file whose folder you answered as someone else is asked about, never named on its own, and a person’s page says what their picture count means.
  • Other minor UI improvements.
  • Browse, the Filter panel and every wall answer from stored counts. A page of Browse and its total cost 99.8% fewer database steps than before on a library of 102,579 files (83 ms to 1.8 ms); the Filter panel’s five columns 99.8% fewer (567 ms to 2 ms), and its numbers are drawn the moment it opens, never “Counting…” first; a person’s or a Site’s tab numbers come from one statement (74 to 86% fewer steps); a cover picture’s check is 56 to 93% cheaper.
  • The Tasks screen and Activity read stored tallies. The jobs summary costs 99.8% fewer steps, and the passes’ “still to do” numbers are no longer recounted from every file every half minute while a screen is open.
  • Similar files compares whole files, ranked in a files index: 86% less time for an admin and 94% less for a guest, and the strip shows the files that look like this one as a whole.
  • Every screen stays current without a reload. Favorites, a file’s page, Insights, the Settings panes, the hover card and the players follow changes made elsewhere within a second, in place; a settings change no longer blanks its pane; a new row at the top of Tags or Collections slides in while the top is on screen and waits behind a quiet “N new” when you’re reading further down; guests are told of renames and new tags and collections they can see.
  • Sift’s window is on screen as soon as it starts, drawing the sign-in frame in your theme while the library opens, and the real screen takes its place without anything moving; the installer ships compiled code (40% less load time); background work starts after the first screen has drawn.
  • Turbo mode is the name of the press out of eco mode, on every screen and in the API, and the press takes effect on the workers immediately instead of at their next three-second tick.
  • Renaming a person, a tag or a collection answers immediately; the search index catches up as a job, so a person with thousands of files no longer holds the app for a minute.
  • Presses answer on the press. Remove from Sift, Modify, Cancel and a tag added show their effect immediately and come back only if the server refuses.
  • Download log is three times as fast and says why when it fails. The archive of a 38 MB log took 11 seconds and takes about 3.5 now. When the file can’t be created, the message says the reason instead of “Try again,” the button reads “Creating the log file…” while it works, and a computer whose Downloads folder can’t be found gets the file in Sift’s own folder.
  • The log’s Detailed setting no longer writes database statements with their values (a file’s name, a folder, the words of a search) into the log.
  • Download and install closes Sift for the installer. Sift quits itself once the installer opens, so the installer’s “Sift is running” page no longer appears.
  • A face scan whose models go missing mid-way waits for them, as when the models are being downloaded again, instead of failing three times with “the detector model has not been installed yet.”
  • Every player is held to one bar. The popout shows a frame 32% sooner after a press (154 ms to 104 ms, median) and the gap between clips is 40% shorter in order (94 ms to 57) and 69% under Shuffle; nothing under the picture is asked for before its first frame (the panel’s 15 reads moved after it); the Theater wall opens with nothing moving; a file deleted elsewhere leaves the Mini player and a Theater cell immediately; hls.js runs on a worker and remuxed files play like direct ones.
  • A page of a wall is read once. Browse, Next, a Filter tick and a person’s page made 11 reads and now make 4 (64% fewer); the pager shows only a page that has landed whole.
  • Sharing and hiding settle faster. A share’s permission check costs 83% less per file, taking back a grant 74% less, and only the files whose answer moved are counted again; the People wall reads 55% fewer steps and every other wall 24 to 34% fewer.
  • The passes’ “still to do” numbers are exact at every announcement, kept by the database itself (99.99% fewer steps while nothing moves), and the Tasks screen’s time estimates are read from stored prices (99.5% fewer steps; the jobs page makes 52% fewer statements).
  • A person’s, a Site’s or a tag’s page draws its numbers once. The History tab’s number comes from the thread itself, beside the strip (a Site’s strip costs 99% fewer steps); a collection’s and a person’s header never show a stand-in name, letter or count; a page’s wall no longer takes in a namesake’s files.
  • Renaming a folder inside Sift no longer leaves a ghost folder behind that refused the rename back; a move the database refuses is put back on disk; a folder row made again takes back its files.
  • Activity names a re-index of some files for what it does (“Updating the search index”). Other minor UI improvements.
  • The desktop app connected to a library on another computer now says when its own copy is behind. It compared the library’s computer with the newest release and said “This is the newest version” while the copy in front of you was older. The line now reads “Sift 0.2.1 is available for this copy,” and Download and install updates this computer.
  • Sift no longer stalls for minutes while faces are grouped, matched or imported. The counts behind the walls and the Filter panel were moved once for every face a pass touched, so one regroup held every other write in the app for 18 minutes on a library of 81,000 faces; they now move once per write (a regroup of 300 groups 1,415 ms to 134, a match of 735 faces 1,392 ms to 124 on a copy of a real library), and the database says in the log whenever a write holds the others for over a quarter of a second, so a stall can never again pass unseen.
  • Sharing a folder of thousands of files answers on the press; the counts follow within seconds. A share of 30,831 copies went from 3.5 s to 1.7 s on a library of one million files.
  • A JPEG carrying two orientation records is read the way a browser reads it, stored and drawn upright; the ones already stored are read again at the next start.
  • A Theater cell given a filter that excludes a folder with a space in its name played nothing (“Nothing here matches what this cell is set to”); it plays the rest now, and a folder, tag, Site or person whose name begins with a minus can be filtered on.
  • Ctrl + an arrow moves to the next or previous file on a picture and a GIF, as it did on a video, in the full-size view and the corner panel.
  • The benchmark says which step it is on and about how long is left, timed from how long each step took the last time it ran on this device (“About 2 minutes left”), and its round count includes the step back between the two quickest, so it never says “6 of up to 5”.
  • App History and the Organize board stay quick while Generate runs. A page of History reads the marks each act keeps rather than the whole record (89% fewer database steps on a record of 40,000 acts), and the board no longer re-surveys every queue for each picture made.
  • Settings > Maintenance and Settings > Smart Search open from kept counts: 99.98% and 99.96% fewer database steps on a library of 101,616 files (0.4 s to 9 ms and 0.36 s to 10 ms).

Crashes and logs

  • Sift no longer stops when a model library can’t load. On some computers, turning on face recognition or Smart Search ended Sift at every start. The models now load only in a process of their own, so a failure there leaves Sift running and the screen says why.
  • The installer carries Microsoft’s C++ runtime, so Sift no longer depends on the copy a computer happens to have.
  • If Sift keeps stopping, the dialog says what’s wrong and what to do. It shows the exit code, what that code usually means and the last start’s lines. It offers Start without them, which holds face recognition, Smart Search and watermark reading off for that start, and Download log.
  • Setup is offered only when your library’s folder can’t be found, such as a drive that isn’t plugged in. The dialog names the folder, and no choice there moves or replaces a library.
  • Download log saves every log whole as one zip, whatever the screen is filtered to, with personal details removed. It saved at most 500 lines. It works even when Sift can’t start, and more is removed: a name with spaces in a path, a whole cookie header, a tunnel’s own address and the address of any device that opened Sift.
  • The app’s own log stays small: one file per start, 8 MB at most in all. It had no limit.
  • A model download that fails says why and what to check. It uses the proxy set in Windows, removes a damaged partial download, and two presses make one download.

Players

  • Every player bar keeps all its controls. The repeat control, Previous, Play, Next and Shuffle stand in that order on every bar. A grayed-out control says why when you point at it.
  • The Mini player and the Audio player move on at the end of a clip. They replayed the same clip before. Like the popout, they now get the next file ready while one plays.
  • A picture you open stays put under Play through until you press Play, Next or Previous. It moved on after 2 seconds.
  • The Remote has the same five controls, with Back 5 seconds and Forward 5 seconds above them.

Theater

  • The wall uses the room the bars leave. On a full-screen Center stage 1x3 the previews grew from 148 px to 212 px tall (43%). Cells ease with the bars, and a portrait cell stops 8 px above the bottom bar, where it ran about 100 px under it.
  • A cell takes its video’s shape even when the video’s size isn’t stored yet. Three portrait videos in a full-screen 1x3 went from 201 px to 607 px wide each.
  • 1x2 (P) and 1x2 (L). Layouts offers two cells side by side or two stacked, and pointing at either says Portrait or Landscape.
  • Layout Presets are now Saved Layouts, saved through a dialog that shows the whole wall and what isn’t kept. Renaming a Center stage Saved Layout no longer fails.
  • Pick up where you left off survives a reload, bringing back each cell’s file, paused. A preview comes up on a double-click, and its menu gains Close the strip.
  • Full screen no longer jumps. Entering or leaving it, each cell moves one way to its new place. The largest move the wrong way was 53 px and is now under 2 px.
  • The keyboard reaches Theater’s bar. Tab brings the bars up and goes into them, and B brings them back as well as sending them away.
  • Nine cells fit a narrow window. When the bar can’t fit every cell number, they fold into one press that names the cell it’s on and opens the numbers as a menu. At 900 wide with 9 cells, three pairs of controls overlapped; now none do.

Search, filters and the top bar

  • The top bar’s center holds still. Filter, Sort by and the search box stay centered as the window gets smaller, where they drifted up to 104 px. When room runs out, the tile size moves to a Tile size press on the row under the bar.
  • Has and No in the Filter panel. Six columns start with a pair such as Has tags and No tags, and a pressed chip now stays where it is. On 101,619 files the People column’s count went from about 0.12 s to 0.21 s.
  • More ways to sort, and quicker. Browse adds Favorites first and Highest rated. People, Sites, Tags and the other walls, and their pages’ tabs, add Largest, Smallest, Longest and Shortest in total. On 101,619 files, Highest O count’s first page went from 0.75 s to 0.13 s (83% less).
  • A search box on every tab of a person’s, Site’s, tag’s, collection’s, Photo Set’s or song’s page. A collection now pages past its first 200 files.
  • A collection’s Files tab has Sort by, with pinned files first, like every wall. Move earlier and Move later are gone, and an order arranged by hand in 0.2.0 isn’t kept.
  • The pager keeps your place when files arrive, and Previous page returns to the page you left. The last page is never one lone row.
  • Saved filters go with what they name. Deleting the last thing a saved filter names deletes the filter too, and History says so.
  • Clearer words. The search box’s suggestions say where each is set instead of showing a long ID. An empty wall says what emptied it, such as “No files match these filters.”

People and faces

  • Export carries the people waiting for a matching face, with no models downloaded. On one library the file went from 150 people to 657. Anyone marked Kept local or Don’t swap stays out.
  • Two libraries’ files no longer replace each other, because each carries its own library’s ID. Sift 0.2.0 can’t read a file exported by this version.
  • A folder import’s report lists the files behind each reason.

Importing, Activity and the benchmark

  • Every folder you add is counted right away, without waiting for another folder’s read. Nine folders on a network share were all counted 24 seconds after they were added. In 0.2.0 that took 71 to 136 minutes. Until all are counted, Activity says “Not known until every folder is counted.”
  • A folder added while another is being read is read once. It was scanned three times, so each new file was read twice.
  • Time left is closer to the truth. It takes in the files the scan hasn’t read yet, and prices a new batch apart from older work. The Scan row counts a folder’s whole total from the start. A two-minute batch read “About 1 to 3 hours” and now reads a few minutes. A fresh library gets a floor from the benchmark, such as “At least 6 hours”.
  • A folder that stops answering is one finding. One moved away after 9 of its 100 files were read had 91 refused one by one; now 1 is, and nothing in it is marked missing. The Scan row says the scan failed and why.
  • The benchmark measures what Sift uses: previews on your GPU, each installed model, and every drive and share. It runs its picks together for half a minute, and can give each share a number measured for it.
  • A new library’s files start arriving after about a minute. The first folder waits only for a short first measure. The full benchmark runs later by itself, once Sift has nothing to do and nobody has used the device for 10 minutes, and it gives way when you press something.
  • The full benchmark ends within 5 minutes, on a busy computer too. Each step has its share of the time and stops early rather than run over, and a setting from a step cut short is only suggested. It pauses your waiting tasks and says so, and Cancel keeps your last result.
  • A big first import is searchable sooner. While a folder is still being read, reading its files comes first. On a 1,220-file folder on a network share every file was read 269 seconds after the count, where it took 1,068 (75% sooner).
  • No task reads as further along than the scan. Identify and Smart Search counted files the scan hadn’t read as done: on a half-read library of 94,268 files Identify said 188,532 of 188,538 and now says 84,543 of 188,440. The settings lines for Faces, Smart Search and watermarks say how many files are waiting to be scanned beside what’s left to do.
  • A share’s number the benchmark measured the same isn’t suggested back to Automatic.
  • Time left holds steady. It prices what’s left as work over your computer’s workers and shows a range that counts down, moving only when the truth has moved. On seven recorded imports the rows whose range held the real finish through every third of their life went from 3 of 21 to 12 of 21, and the Scan row’s words changed 5 times an hour where they changed 91. A row that has stopped says “Waiting for other work.” A finished run’s Report says how often its time left was right.
  • A tool that can’t start says why. Its task fails with “A tool Sift runs couldn’t start, because a file it needs was in use or missing.” where it said “no detail”.
  • Eco mode has a name. While you’re working, Sift is in eco mode and the leaf says so. A new setting, Use less system resources while other programs are busy, adds that reason too: it’s off until you turn it on and works on Windows only. The leaf is then dimmed and says what is busy. A video playing in Sift on any device, or Theater open, is a reason too, and in the desktop app’s client mode the leaf says it’s the device running Sift.
  • A press for the full amount shows immediately. During a big import the leaf went gray and could take seconds to change.
  • Activity’s totals leave out files whose folder you removed. On 101,619 files, that makes the library’s count take 9.3 ms where it took 1.8 ms.

Settings and docs

  • Documentation in Settings holds every page of the docs with its pictures, offline and for the version you run. It makes Sift about 4.6 MB bigger. A screen reader can step through its headings, each has a Copy link press, and on the docs site a heading’s link now copies itself.
  • Backup and restore saves as you go. Save a backup spins from the moment you press it, where nothing showed for about 38 seconds. A second window shows a save that is going.
  • Picking a Download folder anywhere saves it as the default, and the choosers list only folders Sift can write to.
  • In the desktop app, an admin sees an update waiting as a button in the title bar.
  • History names a tunnel, never its ID. Renaming a song no longer marks its files as edited: all 50 files of a song were marked.
  • The first-visit hints are gone.
  • Other minor UI improvements.

Privacy and guests

  • Locking Hidden stops a Hidden clip everywhere immediately. The Audio player and the Mini player went on showing and playing one after Hide hidden items, and so did a Theater wall in the corner. Each now lets go immediately, in every tab, and comes back when you unlock.
  • A Site set to go through a tunnel now gets everything for a download through that tunnel. The link’s first check went out from your own connection, once per download, and so did the lookup of the Site’s name. The reads for the creator, the picture and the music now keep the same route.
  • A guest’s search no longer hints at files they can’t see. A word matching such files made the search slower. Words, names, and filters on people, tags and other things are now matched only against what the guest may see.
  • What that costs. A guest who may see half of a 100,000-file library waits about a quarter of a second the first time they search a word. Their Closest match lists newest first.
  • Smart Search and Similar to this rank only what you may see. A guest, or an admin while Hidden was locked, could get an empty page. A guest’s first search by meaning takes about half a second.
  • History and pages no longer name things a guest isn’t shown, a Site or a folder included. A guest is no longer offered presses that would be refused, such as Remove from this collection. Only you can read your saved filter’s name in History.
  • Has and No follow Hidden. While Hidden is locked and shows locked tiles, a file whose only tag is hidden no longer counts under Has tags.
  • A function’s branches are held as its length is. The code-shape ratchet records each function’s cyclomatic complexity over 10 in Python or 20 in TypeScript. A recorded number may only fall.
  • A release refuses a commit whose hosted suite isn’t green. scripts/release.py --publish names the commit and the run it found. A new release is made as a draft with its files, then published.
  • Every library inside a shipped program is named. bin/THIRD-PARTY-NOTICES.txt lists all 262 with their version, source and license. A signed build refuses while any lacks one.
  • Building the HEIF wheel yourself. Anywhere but the computer that builds Sift’s releases, add --wheel-by-contents to scripts/fetch_vendor.py. A seeded wheel is used only when it matches the pinned digest.
  • The server never imports the model runtime or the tokenizer. Both load only in the model process, and a gate walks every import from the server’s entry point to hold that.
  • A release carries the newest C++ runtime the build machine has. It refuses one older than the toolset any bundled library was linked with, and names the library.
  • python -I -m sift.logbundle makes the redacted log archive with the standard library alone. GET /api/logs/archive replaces POST /api/logs/redacted.
  • A collection’s items take add and remove only, and their GET takes sort. The catalog is at version 91: the stored position is dropped.
  • The client build reads the docs. npm run build, dev and prepare turn the docs site’s pages into the client’s Documentation. A page the reader doesn’t understand stops the build. It needs Node 22.18 or later.

The first public release of Sift.

  • Sift is open source. Its source is public on GitHub under the AGPL-3.0 licence, where you can read it, report a problem or suggest a change.
  • Every release is listed here from now on. What a release changes for you is written under its version, newest first, and Settings > Updates and Info shows the same notes when a new version is ready.
  • The docs have a page for every screen and every setting, and Help says where to ask a question.