Skip to content

pikura-app/pikura

v1.7.4 Feature

This release adds 3 notable features for engineering teams evaluating rollout.

Published 8d Media Servers
✓ No known CVEs patched
Read the diff → Tool health → What is this tool? →

✓ No known CVEs patched in this version

Topics

anime artwork-downloader avalonia c# desktop-app .net
+2 more
pixiv pixiv-downloader

Summary

AI summary

Updates New Features, anti-suspension, and Username across a mixed release.

Changes in this release

Feature Low

Adds Safe Mode toggle for sequential downloads with jitter and retry handling.

Adds Safe Mode toggle for sequential downloads with jitter and retry handling.

Source: llm_adapter@2026-05-29

Confidence: high

Feature Low

Adds Linux sign‑in via bundled Playwright Chromium, replacing WPE WebKit.

Adds Linux sign‑in via bundled Playwright Chromium, replacing WPE WebKit.

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 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, updating dynamically.

Adds queue number badge to active job cards in History, updating dynamically.

Source: llm_adapter@2026-05-29

Confidence: high

Feature Low

Improves Open Folder for multi‑artist jobs to open DownloadRoot directly.

Improves Open Folder for multi‑artist jobs to open DownloadRoot directly.

Source: llm_adapter@2026-05-29

Confidence: high

Feature Low

Adds bookmark sorting dropdown with multiple ordering options, client‑side and instant across tabs.

Adds bookmark sorting dropdown with multiple ordering options, client‑side and instant across tabs.

Source: granite4.1:30b@2026-05-29-audit

Confidence: low

Feature Low

Improves download job naming to include artist name for single, multiple, and scheduled jobs.

Improves download job naming to include artist name for single, multiple, and scheduled jobs.

Source: granite4.1:30b@2026-05-29-audit

Confidence: low

Bugfix Medium

Fixes Linux Chromium permission denied by chmod +x after extraction.

Fixes Linux Chromium permission denied by chmod +x after extraction.

Source: llm_adapter@2026-05-29

Confidence: high

Bugfix Medium

Fixes followed‑artists incomplete list by adding missing URL params, using sequential fallback, and correcting race conditions.

Fixes followed‑artists incomplete list by adding missing URL params, using sequential fallback, and correcting race conditions.

Source: llm_adapter@2026-05-29

Confidence: high

Bugfix Medium

Fixes crash‑report dialog showing stale or XamlLoadException crashes.

Fixes crash‑report dialog showing stale or XamlLoadException crashes.

Source: llm_adapter@2026-05-29

Confidence: high

Bugfix Medium

Fixes viewer image blank when switching sections by reloading on attach.

Fixes viewer image blank when switching sections by reloading on attach.

Source: llm_adapter@2026-05-29

Confidence: high

Bugfix Medium

Fixes followed artists missing after partial load by using sequential pagination and overlapping page fetch.

Fixes followed artists missing after partial load by using sequential pagination and overlapping page fetch.

Source: granite4.1:30b@2026-05-29-audit

Confidence: low

Bugfix Medium

Fixes download queue initial status by adding Queued state and correcting enum ordering regression.

Fixes download queue initial status by adding Queued state and correcting enum ordering regression.

Source: granite4.1:30b@2026-05-29-audit

Confidence: low

Bugfix Medium

Stops job restart loop after pause by removing premature TryStartNextPendingJobAsync call.

Stops job restart loop after pause by removing premature TryStartNextPendingJobAsync call.

Source: granite4.1:30b@2026-05-29-audit

Confidence: low

Bugfix Medium

Cancels orphaned Queued/Pending jobs on application launch to prevent unintended restarts.

Cancels orphaned Queued/Pending jobs on application launch to prevent unintended restarts.

Source: granite4.1:30b@2026-05-29-audit

Confidence: low

Bugfix Low

Prevents paused jobs from appearing in Completed list by centralizing JobCompleted event handling.

Prevents paused jobs from appearing in Completed list by centralizing JobCompleted event handling.

Source: granite4.1:30b@2026-05-29-audit

Confidence: low

Bugfix Low

Ensures Cancelled jobs route to the Cancelled list and fixes enum ordering regression affecting all statuses.

Ensures Cancelled jobs route to the Cancelled list and fixes enum ordering regression affecting all statuses.

Source: granite4.1:30b@2026-05-29-audit

Confidence: low

Full changelog

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 when offset >= 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: CreateJobAsync had a dead-code branch (startImmediately ? Pending : Pending)
    that always saved jobs as Pending regardless of slot availability. A new Queued
    status has been added to JobStatus to 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: PauseJobAsync was firing JobCompleted immediately after cancelling the task
    token, while ContinueWith was 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 — ContinueWith now owns it exclusively.

  • Job restart loop after pause
    Fixed: the ContinueWith Paused guard was calling TryStartNextPendingJobAsync()
    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_folder was 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: ArtworkDetailBody had 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)DownloadArtworkAsync never captured the saved file's directory and never set job.OutputFolder, so "Open Folder" never appeared for image-ID download jobs. Fixed by adding an onOutputFolder callback 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 ClipToBounds container 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-After headers 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 +x on its embedded Playwright node binary before every login attempt, preventing the EACCES (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 ignore offset and return the first page repeatedly; (b) the loader stopped paginating when total came back as 0 — sequential discovery is now used as a fallback; (c) the deduplication seen set was seeded without holding seenLock, creating a race condition where parallel page tasks could insert duplicate artists; (d) GalleryViewModel was never receiving a real ILogger — it inherited NullLogger.Instance from ViewModelBase, silently swallowing all [FollowedArtists] log lines; fixed by injecting ILogger<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 SessionsChanged event 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.InvokeAsync instead 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

Track pikura-app/pikura

Get notified when new releases ship.

Sign up free

About pikura-app/pikura

All releases →

Beta — feedback welcome: [email protected]