This release includes breaking changes for platform teams planning a safe upgrade.
✓ No known CVEs patched in this version
Topics
+2 more
ReleasePort's take
Light signalRelease v1.7.5 introduces several UI enhancements (Safe Mode toggle, Linux sign‑in via Playwright, new context menus, collapsible history sections, toolbar actions) and critical download‑related bug fixes.
Why it matters: Bug fixes with severity 40 resolve app freezes during "Download All" and prevent downloads from failing to start or remaining paused, directly improving reliability for developers and SREs managing the application.
Summary
AI summaryUpdates New Features, anti-suspension, and Username across a mixed release.
Changes in this release
| Type | Severity | Summary | CVE |
|---|---|---|---|
| Feature | Low |
Adds Safe Mode toggle for sequential downloads with jitter and retry‑after handling. Adds Safe Mode toggle for sequential downloads with jitter and retry‑after handling. Source: llm_adapter@2026-05-29 Confidence: high |
— |
| Feature | Low |
Adds Linux sign‑in via bundled Playwright Chromium, replacing WPE WebKit dependency. Adds Linux sign‑in via bundled Playwright Chromium, replacing WPE WebKit dependency. Source: llm_adapter@2026-05-29 Confidence: high |
— |
| Feature | Low |
Adds "Copy artist ID" context menu entry to inline viewer and gallery cards. Adds "Copy artist ID" context menu entry to inline viewer and gallery cards. Source: llm_adapter@2026-05-29 Confidence: high |
— |
| Feature | Low |
Adds History date‑grouped, collapsible sections with job counts. Adds History date‑grouped, collapsible sections with job counts. Source: llm_adapter@2026-05-29 Confidence: high |
— |
| Feature | Low |
Adds Select All / Deselect All toolbar buttons to Gallery, Bookmarks, Discover, Rankings. Adds Select All / Deselect All toolbar buttons to Gallery, Bookmarks, Discover, Rankings. Source: llm_adapter@2026-05-29 Confidence: high |
— |
| Feature | Low |
Adds queue number badge to active job cards in History, showing position dynamically. Adds queue number badge to active job cards in History, showing position dynamically. Source: llm_adapter@2026-05-29 Confidence: high |
— |
| Feature | Low |
Adds descriptive download job names including artist name and count. Adds descriptive download job names including artist name and count. Source: llm_adapter@2026-05-29 Confidence: high |
— |
| Feature | Low |
Makes Overwrite Mode setting apply consistently across all download types (gallery, bookmarks, discover, rankings, scheduled artist downloads). Makes Overwrite Mode setting apply consistently across all download types (gallery, bookmarks, discover, rankings, scheduled artist downloads). Source: granite4.1:30b@2026-05-29-audit Confidence: low |
— |
| Feature | Low |
Adds bookmark sorting dropdown (Newest Bookmarked, Newest Posted, Oldest Posted, Title A→Z, Title Z→A, Most Pages). Adds bookmark sorting dropdown (Newest Bookmarked, Newest Posted, Oldest Posted, Title A→Z, Title Z→A, Most Pages). Source: granite4.1:30b@2026-05-29-audit Confidence: low |
— |
| Feature | Low |
Overlaps pagination fetch by half page size to prevent missing artists due to Pixiv offset instability. Overlaps pagination fetch by half page size to prevent missing artists due to Pixiv offset instability. Source: granite4.1:30b@2026-05-29-audit Confidence: low |
— |
| Feature | Low |
Prefixes gallery job names with the artist's name. Prefixes gallery job names with the artist's name. Source: granite4.1:30b@2026-05-29-audit Confidence: low |
— |
| Feature | Low |
Includes artist label in scheduled job names. Includes artist label in scheduled job names. Source: granite4.1:30b@2026-05-29-audit Confidence: low |
— |
| Feature | Low |
Introduces Queued status to distinguish waiting jobs from pending ones, updating UI indicators accordingly. Introduces Queued status to distinguish waiting jobs from pending ones, updating UI indicators accordingly. Source: granite4.1:30b@2026-05-29-audit Confidence: low |
— |
| Feature | Low |
Preserves progress counters and progress bar state when resuming paused jobs. Preserves progress counters and progress bar state when resuming paused jobs. Source: granite4.1:30b@2026-05-29-audit Confidence: low |
— |
| Performance | Medium |
Improves retry speed for failed/cancelled jobs by persisting per‑target completion status immediately. Improves retry speed for failed/cancelled jobs by persisting per‑target completion status immediately. Source: granite4.1:30b@2026-05-29-audit Confidence: low |
— |
| Performance | Medium |
Updates UI optimistically for Pause/Resume commands, eliminating visible lag. Updates UI optimistically for Pause/Resume commands, eliminating visible lag. Source: granite4.1:30b@2026-05-29-audit Confidence: low |
— |
| Performance | Medium |
Emits an immediate progress event at the start of resumed job execution for correct initial display. Emits an immediate progress event at the start of resumed job execution for correct initial display. Source: granite4.1:30b@2026-05-29-audit Confidence: low |
— |
| Bugfix | Medium |
Fixes app freeze during "Download All" by making queue placeholder creation fully async. Fixes app freeze during "Download All" by making queue placeholder creation fully async. Source: llm_adapter@2026-05-29 Confidence: high |
— |
| Bugfix | Medium |
Fixes downloads not starting while others were running by removing RelayCommand auto‑disable. Fixes downloads not starting while others were running by removing RelayCommand auto‑disable. Source: llm_adapter@2026-05-29 Confidence: high |
— |
| Bugfix | Medium |
Fixes queued jobs stuck as paused by correcting atomic slot‑claiming. Fixes queued jobs stuck as paused by correcting atomic slot‑claiming. Source: llm_adapter@2026-05-29 Confidence: high |
— |
| Bugfix | Medium |
Fixes enum ordering regression causing Cancelled jobs misread as Failed and other status mismatches. Fixes enum ordering regression causing Cancelled jobs misread as Failed and other status mismatches. Source: granite4.1:30b@2026-05-29-audit Confidence: low |
— |
| Bugfix | Medium |
Corrects followed‑artists pagination to stop only on empty page or offset >= total, fixing missing artists after partial loads. Corrects followed‑artists pagination to stop only on empty page or offset >= total, fixing missing artists after partial loads. Source: granite4.1:30b@2026-05-29-audit Confidence: low |
— |
| Bugfix | Medium |
Fixes CreateJobAsync dead‑code that always saved jobs as Pending regardless of slot availability. Fixes CreateJobAsync dead‑code that always saved jobs as Pending regardless of slot availability. Source: granite4.1:30b@2026-05-29-audit Confidence: low |
— |
| Bugfix | Low |
Preserves selected artist during followed‑artist list refresh to avoid navigation loss. Preserves selected artist during followed‑artist list refresh to avoid navigation loss. Source: granite4.1:30b@2026-05-29-audit Confidence: low |
— |
| Bugfix | Low |
Correctly resets IsLoading on cache hits when switching artist galleries, fixing stuck spinner. Correctly resets IsLoading on cache hits when switching artist galleries, fixing stuck spinner. Source: granite4.1:30b@2026-05-29-audit Confidence: low |
— |
| Bugfix | Low |
Cleans up orphaned Queued/Pending jobs from previous sessions on startup. Cleans up orphaned Queued/Pending jobs from previous sessions on startup. Source: granite4.1:30b@2026-05-29-audit Confidence: low |
— |
| Bugfix | Low |
Forces inline viewer to reload current card when switching sections, fixing blank image issue. Forces inline viewer to reload current card when switching sections, fixing blank image issue. Source: granite4.1:30b@2026-05-29-audit Confidence: low |
— |
| Bugfix | Low |
Suppresses stale crash report dialog for crashes older than 5 minutes or XamlLoadException. Suppresses stale crash report dialog for crashes older than 5 minutes or XamlLoadException. Source: granite4.1:30b@2026-05-29-audit Confidence: low |
— |
Full changelog
Pikura 1.7.5
Download queue reliability, retry performance, and History date grouping.
New Features
- History — date-grouped, collapsible sections — Completed, Failed, and Cancelled tabs now group download jobs by date with collapsible headers ("Today", "Yesterday", weekday, or full date). Each header shows the job count and can be clicked to expand or collapse the group. The list is fully virtualized so it stays performant with 1000+ history entries.
Improvements
- Retry speed for failed / cancelled jobs — Per-target completion status is now persisted to the database immediately when each artwork finishes, so retrying a partially-completed job skips already-downloaded artworks instantly without re-fetching metadata.
- Download behavior is now universal — The Overwrite Mode setting (Skip / Overwrite / Backup) is applied consistently across all download types: gallery, bookmarks, discover, rankings, and scheduled artist downloads.
Fixes
- App freeze during "Download All" — Queue placeholder job creation is now fully async; the UI thread is never blocked during large bulk-queue operations.
- Downloads wouldn't start while others were running — Removed RelayCommand auto-disable that was preventing new downloads from being queued while concurrent slots were occupied.
- Queued jobs stuck as paused — Fixed atomic slot-claiming so queued jobs correctly start as soon as a running slot becomes free, respecting the Max Concurrent Jobs setting.
- "Select an artist first" error on loaded gallery — Preserves the selected artist during followed-artist list refresh so navigation state is never lost.
- Stuck loading spinner — IsLoading is now correctly reset on cache hits when switching artist galleries.
- Orphaned queued jobs on startup — Stale Queued/Pending jobs from previous sessions are cleaned up on launch.
Pikura 1.7.4
Quality-of-life fixes for bookmark sorting, cross-section viewer persistence, and crash report noise.
Features
- Bookmark sorting — New sort dropdown in the Bookmarks toolbar lets you order by Newest Bookmarked (default/API order), Newest Posted, Oldest Posted, Title A→Z, Title Z→A, or Most Pages. Sorting is client-side and applies instantly across all three tabs (Public, Private, Local Favorites).
Fixes
- Viewer image blank when switching sections — Navigating back to Bookmarks or Rankings when a viewer tab was already open left the image panel empty. Each section now forces the inline viewer to reload the current card on attach.
- Stale crash report dialog — The crash report dialog no longer appears for crashes older than 5 minutes or for XamlLoadException (which is a build-artifact issue, not a real app crash). The flag is cleared automatically in both cases.
Pikura 1.7.3
Quality-of-life improvements to job naming, followed-artists loading reliability, and download job lifecycle fixes.
Fixes
- Followed artists — overlapping page fetch to prevent gap drift — Pagination now steps by half the page size (24 instead of 48) so consecutive windows overlap. Artists that shift between pages mid-fetch due to Pixiv's unstable offset ordering are no longer missed. The shared deduplication set discards any duplicates introduced by the overlap.
- Pause triggers "Completed" notification — Pausing a job no longer double-fires the JobCompleted event. The ContinueWith handler now owns the event exclusively, preventing paused jobs from appearing in the Completed list.
- Job restart loop after pause — Pausing a job no longer triggers TryStartNextPendingJobAsync, which was causing the just-paused job (or another queued job) to restart immediately.
- Cancel does not route to Cancelled list — Fixed a JobStatus enum ordering regression introduced in 1.7.2 where adding Queued without explicit integer values shifted all existing database status codes by one, causing Cancelled jobs to be read as Failed, Paused jobs to restart as Running, and so on. All enum values now have explicit fixed integers.
- Orphaned Queued/Pending jobs restart on launch — Startup cleanup now cancels all Queued and Pending jobs from prior sessions, not just Running ones.
Improvements
- Descriptive download job names — Artist download jobs now show the artist name instead of "Download N Artists". Single artist shows name and ID; 2–3 artists listed by name; 4 or more shows the first three names and a count of the rest.
- Gallery job names include artist — Downloading selected or all artworks from an artist's gallery now prefixes the job name with the artist's name (e.g. "ArtistName: 42 artworks").
- Scheduled job names include artist — Scheduled artist downloads show the same descriptive artist label in the job name.
Pikura 1.7.2
Followed-artists pagination reliability, download queue status accuracy, and job lifecycle fixes.
Fixes
-
Followed artists — missing artists after partial load (#18)
Fixed: sequential pagination was stopping early whenever Pixiv returned a short page
(e.g. 46 instead of 48). Pixiv returns inconsistently-sized pages throughout the list,
not just at the end, so a short page is not a reliable end-of-list signal. Pagination
now only stops on a truly empty page or whenoffset >= Total. Also switched from
parallel to sequential per-branch fetching so that page drift caused by follows/unfollows
mid-fetch no longer causes missed or duplicated artists. -
Download queue — incorrect initial job status
Fixed:CreateJobAsynchad a dead-code branch (startImmediately ? Pending : Pending)
that always saved jobs asPendingregardless of slot availability. A newQueued
status has been added toJobStatusto distinguish jobs waiting for a slot from jobs
about to start. The UI now shows ⏳ Queued for waiting jobs and ⏳ Starting…
for jobs about to execute, with correct cancellable/resumable button visibility. -
Pause triggers "Completed" notification
Fixed:PauseJobAsyncwas firingJobCompletedimmediately after cancelling the task
token, whileContinueWithwas also about to fire it once the task actually ended.
The double-fire caused paused jobs to appear in the Completed list.PauseJobAsync
no longer fires the event directly —ContinueWithnow owns it exclusively. -
Job restart loop after pause
Fixed: theContinueWithPaused guard was callingTryStartNextPendingJobAsync()
before returning, which could pick up the paused job (or another queued job) and
restart it immediately. Pausing a job no longer triggers the next-job dequeue.
Pikura 1.7.1
Polish and bug-fix release covering job queue UX, download history, folder resolution, and selection controls across all views. Closes issues #18, #19, and #20.
New Features
- Select All / Deselect All — Added to the main toolbar in Gallery, Bookmarks, Discover, and Rankings. "☑ Select All" is always visible; "☒ Deselect All (n)" appears whenever items are selected. Consistent across all four views.
- Queue number badge — Active job cards in History now show a numbered badge (1, 2, 3…) indicating their position in the running queue, updating dynamically as jobs start, pause, and complete.
- Open Folder — multi-artist jobs — "Open Folder" for Discover / Rankings / Bookmarks "Download Selected" jobs (which span multiple artists) now opens the DownloadRoot directly instead of one artist's subfolder.
Improvements
- Job queue ordering — Running jobs are always sorted to the top of the Active list; Paused jobs appear next; Pending jobs at the bottom.
- Pause / Resume responsiveness — Pause and Resume commands update the UI optimistically before the async call completes, eliminating the visible lag.
- Progress preserved across pause/resume — Resuming a paused job reuses the existing VM so the completed/total counter and progress bar are never reset to zero. A fresh progress subscription is registered on each resume so events continue flowing.
- Initial progress on resume — An immediate progress event is emitted at the start of job execution so the counter is correct from the very first frame after resume.
- Open Folder — artist-level resolution — For single-artist jobs with multi-page subfolders or R-18 subfolders (
ArtistName/R-18/12345_Title/), Open Folder now correctly walks up to the artist-level folder (the direct child of DownloadRoot), not the artwork subfolder. - Open Folder — legacy jobs — Jobs downloaded before
output_folderwas tracked now fall back to searching DownloadRoot for a folder whose name contains the artist's user ID. - Gallery toolbar — "☒ Deselect All" button added to the top toolbar (next to "Download Selected"), matching the existing bottom-area button.
Fixes
- Folder named by member ID only (closes #19) — "Download Selected" (image ID) jobs were creating folders named
(141556065)with no artist name. Root cause:ArtworkDetailBodyhad wrong JSON property names ("id"/"name"instead of"userId"/"userName"), so the artist name always deserialized as null and%artist%resolved to empty in the folder template. Fixed. - Output folder not saved for image ID jobs (closes #20) —
DownloadArtworkAsyncnever captured the saved file's directory and never setjob.OutputFolder, so "Open Folder" never appeared for image-ID download jobs. Fixed by adding anonOutputFoldercallback matching the pattern used by artist downloads. - R-18 badge overlapping checkbox in Bookmarks — The R-18 badge was positioned top-left, colliding with the selection checkbox. Moved to top-right in both Fixed card templates, matching Gallery layout.
- Blue selection highlight clipped in Bookmarks — Selection border overlay was inside a
ClipToBoundscontainer and not visible. Restructured so the overlay sits outside the clipped border.
Pikura 1.7.0
Safer downloads with a new Safe Mode toggle, reliable Linux sign-in via Playwright Chromium, Hoshi sidebar fixes, and a fix for incomplete followed-artists lists.
New Features
- Safe Mode (anti-suspension) — New toggle in Settings → Downloads → Download Behavior, default OFF. When enabled, downloads run sequentially with 2–4 s jittered gaps between artworks, 300–800 ms between pages of multi-page works, 2–4 s between targets in multi-target batch jobs, and honor
Retry-Afterheaders with exponential backoff on HTTP 429/503 — so Pikura no longer trips Pixiv's "unauthorized access attempts" suspensions on long batch jobs. - Copy artist ID anywhere — Added "Copy artist ID" to the inline viewer image context menu and to every gallery card context menu (grid + list, natural + fixed). The artist name in the inline viewer is now also a single-click copy target. Mirrors to both the OS clipboard and the in-app artist-ID queue.
- Linux sign-in via Playwright Chromium — Linux login no longer relies on WPE WebKit / libwebkit2gtk and no longer asks users to paste their PHPSESSID. A real Chromium window opens, the user signs in normally, and the session cookie is captured automatically. First-run downloads ~150 MB of bundled Chromium with a clear progress dialog; subsequent sign-ins are instant. Works on Ubuntu, Debian, Fedora, Arch, openSUSE, and other distros.
- Pinned Chromium cache — Playwright's Chromium is installed into a Pikura-owned cache directory so future upgrades don't silently re-download the browser when the existing install is still usable.
Improvements
- Inline viewer status feedback — Copy actions now show confirmation in the status bar (e.g. "Copied artist ID 12345 (Username)").
- Manual PHPSESSID dialog — Reworded as an emergency fallback with an explanation of why it's appearing; shown only if the Playwright Chromium install fails. Most users will never see it again.
- Windows — Control Panel — Pikura now shows its icon in Programs and Features (previously a generic placeholder). The version is also displayed without the leading "v". Upgrading from an old "Pixora" install? The new installer detects and offers to remove the old entry automatically.
- Windows installer — old Pixora cleanup — The installer scans the registry for any existing "Pixora" uninstall entry and offers to silently remove it before installing Pikura, so users don't end up with two entries in Programs and Features.
Fixes
- Linux — Chromium permission denied on launch — Fixed: .NET's single-file extractor unpacks embedded binaries without the executable bit set on Linux. Pikura now runs
chmod +xon its embedded Playwrightnodebinary before every login attempt, preventing theEACCES (13)error that caused the Chromium window to never open and fall back to the manual cookie dialog. - Linux — Chromium login dialog threading — Fixed: the Chromium install progress dialog and fallback manual-cookie dialog were being constructed on a background thread, causing a cross-thread
InvalidOperationException. All Avalonia window creation is now correctly marshalled to the UI thread. - Followed artists — incomplete list (#18) — Fixed: only 48 of N followed artists loaded. Root causes: (a) required Pixiv URL params (
tag=,acceptingRequests=0,lang=) were missing, causing Pixiv to ignoreoffsetand return the first page repeatedly; (b) the loader stopped paginating whentotalcame back as 0 — sequential discovery is now used as a fallback; (c) the deduplicationseenset was seeded without holdingseenLock, creating a race condition where parallel page tasks could insert duplicate artists; (d)GalleryViewModelwas never receiving a realILogger— it inheritedNullLogger.InstancefromViewModelBase, silently swallowing all[FollowedArtists]log lines; fixed by injectingILogger<GalleryViewModel>via DI. Verbose[FollowedArtists]diagnostic lines are now confirmed working. - Hoshi sidebar — prompt bubble disappearing mid-response — Fixed: clicking Describe/Tags/R-18 showed the prompt briefly, then it vanished as the AI streamed its answer. The
SessionsChangedevent used by the account-switch handler was being raised by routine session create/delete/duplicate operations and wiping the active chat. It now fires only on actual account swaps. - Hoshi sidebar — "I don't have the ability to see the image" — Fixed: Pikura wiped the AI's image bytes on every card switch and only repopulated them after the full-resolution image finished downloading. The quick-action buttons now have an instant thumbnail-byte seed plus a belt-and-suspenders fallback that re-fetches from the cache before sending a vision query.
- Inline viewer — chat bubble race — Assistant streaming chunks now marshal cleanly to the UI thread via
Dispatcher.InvokeAsyncinstead of racing with the user prompt add from a background thread.
Weekly OSS security release digest.
The CVE patches and breaking changes that affected production tools this week. One email, every Sunday.
No spam, unsubscribe anytime.
Share this release
About pikura-app/pikura
All releases →Related context
Related tools
Beta — feedback welcome: [email protected]