CeuiLiSA/Pixiv-Shaft
39.8
Weak · 25 September 2026
185.8k
lines of production code
Kotlin
with Java
4
measurements over time
What this system is
This system is a third-party Android client for the Pixiv ecosystem, providing a comprehensive interface for browsing, downloading, and managing illustrations, manga, and novels. It features a modernized V3 UI with Material Design 3 styling, a unified feed framework, and robust offline capabilities including local bookmark mirroring and content caching. The application extends core functionality with AI-powered manga translation, local OCR, and automated snapshot generation, while ensuring reliability through resilient download queues and network bypass mechanisms.
How it got here
2019–2024 — V3 UI modernization and architectural overhaul
23 changes.
The project underwent a comprehensive modernization, migrating the build system to Gradle 8 and AndroidX while redesigning the user interface with V3-style components and animations. Significant backend refactoring included replacing RxJava with custom concurrency models for downloads and establishing a centralized session management system. These changes were supported by expanded database schemas, new data models, and robust instrumentation tests to ensure stability across the updated architecture.
2025–2026 — V3 UI migration and AI integration
69 changes.
This period focused on migrating the application's interface to the V3 design language and the new feeds framework, replacing legacy adapters across novel, artwork, and chat modules. It also introduced significant new capabilities, including a local manga translation pipeline with AI models, a persistent action queue for offline reliability, and a comprehensive download subsystem with resume support.
Features
Added AI model parameter files for Real-CUGAN, Real-ESRGAN, and U2-Net P
The app now includes the necessary parameter files for three new AI models: Real-CUGAN-pro (up2x-conservative), Real-ESRGANv3-anime (x2), and u2netp. These files define the neural network architectures required for image upscaling and background removal features, enabling the application to process images using these specific models locally.
app/src/main/assets/models · high confidence
Added V3 referral program and illust detail mockups
Added a standalone HTML/CSS/JS prototype for the App Referral Plan (V3), featuring task tracking, reward claiming, and a wallet system with local state persistence, alongside a new V3 Illust Detail page mockup with a cinematic hero and floating action capsule.
mockup · high confidence
Added comment filtering rules and Pixivision dark mode support
The app now includes a new comment filtering rule set (comment.filter.rule.txt) designed to block spam, scams, and inappropriate content by matching patterns such as suspicious URLs, contact information for WeChat/QQ, and keywords related to illicit activities. Additionally, a new dark mode stylesheet (pixivision-dark.css) has been added to improve the visual appearance of the Pixivision section during nighttime use.
app/src/main/assets · high confidence
Added database entity for the 'Featured' list feature
A new Room entity, FeatureEntity, has been introduced to persist data for the 'Featured' (starred) list. This entity stores metadata for both individual illustrations (illustID, illustTitle, illustJson) and manga series (seriesId, allMangaSeries), enabling the application to save and retrieve items added to the featured collection.
app/src/main/java/ceui/lisa/feature · high confidence
Added i18n helper scripts for managing Android string resources
Two new Python scripts have been added to the \scripts/\ directory to support the translation workflow. \find\_missing\_used\_strings.py\ scans the Android source code (Java/Kotlin/XML) for string references and compares them against target locale \strings.xml\ files to identify missing translations. \sort\_locale\_strings.py\ sorts the entries in target locale files to match the order of the master \strings.xml\ file and can optionally remove obsolete strings, helping maintain consistency across locales.
python · high confidence
Anonymous event reporting for community trending
The app now sends anonymous bookmark, follow, and download events to the shaft-api-v2 server to support community trending aggregation. This new EventReporter component operates in the background without blocking the user interface, using a persistent anonymous client ID (derived from a random UUID) rather than the user's Pixiv UID to ensure privacy. Events are batched and sent periodically or when a threshold is reached, with robust error handling to ensure that reporting failures do not impact app stability.
app/src/main/java/ceui/pixiv/events · high confidence
Experimental crash-safe file logging with rotation and sharing
Added an experimental feature that writes Timber logs to the app's private directory to ensure crash logs are preserved (avoiding deletion by MediaStore orphan cleaners) and are not visible to users who do not enable the feature. The implementation includes a generation-based rotation strategy to limit disk usage, a background IO thread for non-blocking writes, and a user-facing option to merge and share the current log history via the system share sheet.
app/src/main/java/ceui/pixiv/debug · high confidence
Introduce Nana7mi borrowed-account search caching and session management
Added Nana7miAccountSession and Nana7miSearchCache to the search repository layer. The new cache intercepts search requests before borrowing an account, serving results from a shared server-side cache when available to avoid redundant quota consumption and network calls. The session class manages the lifecycle of borrowed accounts, handling token renewal, detecting when a borrowed account becomes invalid (preventing fallback to the logged-in account's premium cursor), and ensuring that cached first-page results are correctly tracked so subsequent pagination uses the borrowed account. It also includes logic to handle server-side request ID conflicts by retrying with a fresh ID if a cached request ID is rejected, preventing silent pagination failures.
app/src/main/java/ceui/lisa/repo · high confidence
Introduce ShaftApiV2 client interface for new discovery and trending endpoints
The app now includes a new \ShaftApiV2\ Retrofit interface that defines the network contracts for several new and refactored features. This interface adds endpoints for daily recommendations (\/api/v1/recommendations/daily\), a unified discover page (\/api/v1/discover\) that aggregates monthly bookmarks and current trending works in a single request, and various ranking lists including artist total bookmarks, most-viewed works, and current trending works with support for day/week/month time windows. It also introduces pagination support via \next\_url\ for trending and recent works, and includes demo endpoints for health checks and error handling.
app/src/main/java/ceui/lisa/network · high confidence
Introduce automatic snapshot generation based on user behavior
The app now supports automatically generating offline snapshots for illustrations and manga based on user interaction patterns, specifically when a user repeatedly opens the same work or stays on the detail page for an extended period. This feature introduces a new behavior tracking system (AutoSnapshotBehaviorStore) that records local visit and dwell signals without impacting global settings or databases, and a pending request manager to deduplicate and merge trigger sources. Generated automatic snapshots are stored with a distinct manifest (auto\_manifest.json) and can be converted into formal snapshots later. The snapshot generation engine (SnapshotGenerator) has been updated to handle these auto-generated assets, prioritizing cached images and ensuring data integrity through schema versioning and safe path resolution.
app/src/main/java/ceui/pixiv/snapshot · high confidence
Introduce local Bookmark Library with streaming pagination and real-time sync
The app now features a dedicated Bookmark Library that reads from a local mirror of your Pixiv bookmarks, enabling immediate access without waiting for full synchronization. This implementation supports streaming pagination (loading pages as you scroll) and real-time updates when new bookmarks are added on other devices or via the web. The library includes robust filtering (by tags, authors, age, AI content) and sorting options, while handling edge cases like offline progress indicators and list state consistency during sync.
app/src/main/java/ceui/pixiv/ui/library · high confidence
Introduces a persistent, rate-limited action queue for bookmarks and follows
Adds a new \actionqueue\ module that persists user actions (such as bookmarks and follows) to a local Room database, ensuring they are not lost if the app crashes or loses network connectivity. The queue enforces rate limits by implementing exponential backoff with jitter when hitting server limits (429), applying cooldowns to the entire queue for account-level throttling while only delaying individual actions for session-level errors. It also coalesces rapid user inputs (e.g., toggling a bookmark) to send only the final intent, and ensures actions are executed with the correct account context to prevent cross-account data corruption.
actionqueue/src · high confidence
Introduces a type-safe, lifecycle-aware communication kernel
The communication module now provides a new, type-safe internal communication system built on Kotlin Coroutines. It introduces \CommunicationScope\ to manage typed topics with explicit lifecycle control, including \EventTopic\ for transient, multicast event broadcasting and \StateTopic\ for key-value state observation with configurable retention (persistent or cache with TTL). The implementation enforces bounded capacities for topics, subscribers, and buffers, and ensures thread safety by keeping application handlers outside internal locks. Diagnostics are exposed via a \CommunicationObserver\ interface to track publication results and subscriber changes without blocking the core logic.
communication · high confidence
Introduction of local, profile-based content discovery
The app now features a local discovery system that recommends content based on a user-specific profile built from their viewing history, bookmarks, and followed authors. This new capability, implemented in the discovery package (DiscoveryPool, ProfileManager, UserProfile), replaces generic feeds with personalized recommendations that adapt to user preferences, including support for cold-start scenarios and real-time profile updates via bookmarking or following actions.
app/src/main/java/ceui/pixiv/db/discovery · high confidence
Local bookmark mirroring enables offline sorting and filtering
The app now mirrors your Pixiv bookmark lists (illustrations, novels, public and private) to a local SQLite database. This allows you to browse your collection in reverse chronological order, sort by creation date, popularity, page count, aspect ratio, or word count, and filter by tags, authors, age restrictions, and AI content without relying on the server's limited API. The system runs silently in the background with rate-limiting and supports resuming from where it left off if the app is closed.
app/src/main/java/ceui/pixiv/db/mirror · high confidence
Login screen now features an animated ray-traced tunnel background on Android 13+
The login page now displays an animated, ray-traced tunnel background using image tiles on devices running Android 13 (API 33) or higher, while older devices fall back to a static dark gradient. This change introduces a new \TracedTunnelView\ component that leverages the AGSL RuntimeShader API for rendering, replacing the previous static background with a dynamic visual effect.
app/src/main/java/ceui/lisa/view · high confidence
Native FANBOX home feed and post detail views
The app now includes native UI components for Pixiv FANBOX, replacing the previous reliance on embedded web views for browsing. The new home feed displays a dual-tab interface for browsing posts and recommended creators, while the post detail view renders post metadata, sponsor plans, comments, and body content (text, images, and links) directly within the app. To handle content protected by Cloudflare, the body content is fetched via an internal WebView bridge, with a fallback to open the full post in the browser if the bridge fails or the user is not logged in.
app/src/main/java/ceui/pixiv/ui/fanbox · high confidence
Native SHA-256 HMAC implementation with 16 KB page alignment support
The app now includes a native C++ library (libshaft\_secrets.so) that implements SHA-256 and HMAC-SHA256 directly in native code, replacing any previous Java/Kotlin-based implementation. This change ensures compatibility with Android devices using 16 KB memory pages by aligning the shared library's load segments to 16 KB boundaries, preventing Google Play upload rejections for incompatible devices.
app/src/main/cpp · high confidence
New /divebug and /genupdate skills with project status bar
Added two new Claude Code skills: /divebug, which guides the agent through a structured bug-fixing workflow (from issue analysis to root-cause identification and minimal fix), and /genupdate, which automates the release pipeline (version bumping, tagging, and CI-triggered APK builds). A project-level status bar has been introduced via .claude/settings.json, displaying a green bug summary and a clickable issue link during /divebug sessions, and optionally showing global status (like the logged-in email) when a global statusline script is present.
.claude · high confidence
New API interfaces and data models for Pixiv Comic, Fanbox, Moon, and web discovery
This change introduces a comprehensive set of new API service interfaces and corresponding data models in the \ceui.pixiv.api\ package to support new content sources and features. Specifically, it adds \ComicApi\ to fetch Pixiv COMIC content (top banner and recent works) using the main app's OAuth token, and \FanboxApi\ to handle Pixiv FANBOX creator content via cookie-based authentication, including a bridge for fetching post bodies that are blocked by Cloudflare. It also introduces \MoonAPI\ for user settings synchronization, \IdpUrlsResponse\ for identity provider URLs, and various model classes (\WebDiscoveryBody\, \StreetResponse\, \SquareResponse\, etc.) to parse data from the official Pixiv website's discovery and tag pages. These additions enable the app to display official comic feeds, fanbox creator posts, and web-based discovery content directly within the application.
app/src/main/java/ceui/pixiv/api · high confidence
New PixShaft API integration with secure media uploads and cloud features
The app now integrates with the PixShaft API (v2), introducing several new capabilities and behavioral changes. Media uploads now use a dedicated, secure flow via MediaApi and MediaHttpTransport, supporting resumable uploads to COS with connection pre-warming for better performance. User history is now synced to the cloud via PixshaftApi, allowing remote browsing history management. The app also integrates cloud translation services, enabling translation of comments, titles, tags, and manga via a server-side proxy, with usage tracking and model information exposed in settings. Additionally, the app supports in-app push acknowledgments, hot tag discovery, and a corpus of popular works, all fetched from the PixShaft backend. Security is enhanced by moving HMAC signing to a native library (ShaftHmac) to protect secrets, and account backup features (email binding, Nana7mi quota) are now available through the new API.
app/src/main/java/ceui/pixiv/shaftapi · high confidence
New UI infrastructure module to replace QMUI and enable Material 3 migration
A new \witstudio\ module has been introduced to provide V3/MD3-E UI components, serving as a direct replacement for the QMUI library. This module decouples the application from QMUI's theme dependencies, allowing the app to migrate to Material 3 while maintaining compatibility with the existing AppCompat theme during the transition. It includes a complete set of rebuilt components such as dialogs (\WitDialog\), bottom sheets (\WitBottomSheet\), and popups (\WitPopup\), all of which derive their colors from a central \V3Palette\ based on the host's \colorPrimary\. This ensures that all ten preset themes and custom user-defined colors are automatically applied across these UI elements without hardcoding.
witstudio/src/main · high confidence
New V3 novel reader UI components and bottom sheets
The novel reader now includes a new V3 UI layer, introducing dedicated bottom sheets for chapter lists, search results, and series navigation, along with a new note editor dialog. These components use ViewBinding and ViewModel for state management, ensuring data survives configuration changes like rotation. The search results sheet displays hit percentages and highlights query matches, while the series sheet leverages an in-process cache for faster loading. All sheets support edge-to-edge rendering to eliminate bottom safe-area gaps and adhere to the V3 color theme.
app/src/main/java/ceui/pixiv/ui/novel/reader/ui · high confidence
New V3 novel series and text detail pages with multi-select and download options
The novel series and text detail views have been rebuilt using the new feeds framework (NovelSeriesFragment, NovelTextFeed, etc.), introducing a V3 visual style with V3 palette colors and safe-area support. Users can now enter multi-select mode in series lists to batch download selected works, choose between separate or merged downloads via new bottom sheets (SeriesDownloadOptionsSheet, CrossSeriesDownloadOptionsSheet), and benefit from improved link handling (CustomLinkMovementMethod) that prevents accidental text copying on link taps. The series page also displays bookmark counts and supports lazy-loaded author/related work sections.
app/src/main/java/ceui/pixiv/ui/novel · high confidence
New V3 vertical-scroll novel reader with virtualized rendering
The novel reader now supports a new vertical infinite-scroll mode that uses a RecyclerView to virtualize text and image rendering, fixing frame drops on long novels. This new V3 reader replaces the previous page-based layout for vertical reading, providing smoother scrolling, proper text selection via native AppCompatTextView, and integrated search highlighting and progress tracking.
app/src/main/java/ceui/pixiv/ui/novel/reader/render · high confidence
New adapters for horizontal content rails and skeleton loading states
The app introduces LAdapter and SkeletonRailAdapter to support horizontal content shelves. LAdapter renders a row of three fixed-size image cards, calculating dimensions to fit within container padding and spacing constraints. SkeletonRailAdapter provides a shimmer-based placeholder view for these horizontal rails, ensuring layout stability by maintaining fixed height during loading before being replaced by the actual content adapter.
app/src/main/java/ceui/lisa/adapters · high confidence
New batch and cross-series novel download tasks with failure resilience
The app introduces dedicated task classes for novel downloads: BatchDownloadNovelsTask handles sequential downloads of selected novels within a single series, preserving correct 1-based series positions for headers and file paths while swallowing individual failures so one bad chapter doesn't abort the whole batch. CrossSeriesDownloadTask enables downloading multiple series (or all series by an author) either as separate merged files per series or as a single merged file across all series, supporting TXT, MD, PDF, and EPUB formats. Both tasks include rate-limiting delays and report progress/failures to the UI. Supporting infrastructure includes FetchAllTask for paginated API fetching with JSON caching, and a new QueuedRunnable/TaskStatus system for managing task lifecycle and status.
app/src/main/java/ceui/pixiv/ui/task · high confidence
New bottom panel coordinator for smooth keyboard and custom panel transitions
The panel module has been refactored into an independent library (ceui.pixiv.panel) that provides a BottomPanelCoordinator. This component manages the three-state interaction model (none, keyboard, panel) for chat screens, ensuring smooth, animated transitions between the soft keyboard and custom bottom panels (such as emoji or sticker pickers). It handles window insets, navigation bar spacing, and back-press logic to prevent UI jumps or overlapping content, while also including unit tests to verify the state transitions and inset handling.
panel · high confidence
New build and CI scripts for assets, localization, and on-device AI models
Added a suite of Python scripts to the \scripts/\ directory to support new product capabilities and maintenance. \prepare\_manga\_ocr\_model.py\ and \prepare\_translation\_model.py\ export and quantize ONNX models (manga-ocr and opus-mt-ja-zh) for on-device inference, enabling manga translation and auto-translation pipelines. \shrink\_prime\_square.py\ optimizes login-page gallery assets by resizing and converting images to WebP, reducing APK size. \build\_readme\_assets.py\ generates self-contained SVG README visuals using real-device frames. \check\_plaza\_i18n.py\ enforces locale coverage and format consistency for the Plaza feature. \generate\_prime\_index.py\ and \count\_prime\_illusts.py\ manage and verify Prime illust asset indexes. \publish\_sticker\_assets.py\ verifies and publishes sticker assets to GitHub Releases with integrity checks.
scripts · high confidence
New chat list and room list ViewModels for shaft-api-v2
Introduced ChatListViewModel and ChatRoomListViewModel to manage the chat interface state for the new shaft-api-v2 backend. ChatListViewModel handles local-first message persistence, optimistic sending, and real-time updates via WebSocket streams for both global and 1v1 rooms. ChatRoomListViewModel manages the conversation list UI state, including pagination, unread badge handling, and avatar caching, while processing incoming WebSocket frames to update the list order and preview text.
app/src/main/java/ceui/pixiv/chat/vm · high confidence
New common UI framework and feed components
This change introduces a new set of shared UI components and utilities in the \app/src/main/java/ceui/pixiv/ui/common\ package to support the new feeds framework. It includes \IllustFeedItem\, \NovelFeedItem\, and \UserFeedItem\ for managing feed data, along with their corresponding fragments (\IllustFeedFragment\, \NovelFeedFragment\, \UserFeedFragment\) and renderers (\IllustStaggerRenderer\). The update also adds \MutedWorkStore\ for handling content muting with Room persistence and MMKV migration, \FragmentViewBindingDelegate\ for safer view binding in fragments, \KeyedViewModel\ for scoped view models, and \RefreshState\/\RefreshHint\ for standardized loading and error states. Additionally, it provides utility classes like \Either\, \ResultOrNoOp\, \ImageUrlViewer\, and \NavFragmentViewModel\ to support these new components.
app/src/main/java/ceui/pixiv/ui/common · high confidence
New data models for user profiles, novels, and manga series
The models module now includes dedicated data classes for user profile details (ProfileBean, BadgeBean), novel content and series (NovelDetail, NovelSeriesItem, MarkedNovelItem), and manga series (MangaSeriesItem). It also introduces support for comment stamps (CommentStamp), AI generation indicators (IllustAIType), and object pooling types (ObjectSpec) to prevent ID collisions between novels and illustrations.
models · high confidence
New database schema for local discovery, feed caching, and unified history storage
The app introduces new database tables to support local-first content discovery, optimized feed loading, and a unified history system. A new \discovery\_table\ stores recommended items with relevance scores, enabling the local discovery feature. A \feed\_cache\_table\ caches the initial feed response per account to allow instant display on cold starts before refreshing from the network. Additionally, a \general\_table\ with a composite primary key (id, recordType) consolidates history and other record types, supporting features like one-click history clearing and cloud-sync conflict resolution via Last-Write-Wins (LWW) logic.
app/src/main/java/ceui/pixiv/db · high confidence
New documentation, design guidelines, and licensing added
The repository now includes comprehensive documentation and design resources: a V3 design system guide (AGENTS.md) with deployment topology details, a user-facing download path and filename template guide (DOWNLOAD.md), installation troubleshooting (FAQ-install.md), and general usage tips (FAQ.md). A full interactive UI mockup (mockup.html) and third-party notices (THIRD\_PARTY\_NOTICES.md) are also added. The project license is explicitly set to GNU General Public License v2 (LICENSE), and the .gitignore has been updated to exclude build artifacts, keystore files, and IDE caches.
(repo-wide) · high confidence
New download backend subsystem with SAF and MediaStore storage strategies
A new download subsystem has been introduced, abstracting file storage through a \StorageBackend\ interface with three implementations: \SafBackend\ for user-selected directories via the Storage Access Framework, \MediaStoreBackend\ for system galleries/downloads, and \AppCacheBackend\ for temporary cache files. This change replaces the previous direct file I/O approach, adding robust handling for name collisions (auto-renaming in SAF), race conditions in concurrent downloads, and cleanup of orphaned 0-byte files on abort. It also ensures downloaded images are correctly visible in the system gallery and avoids media-deletion alerts on certain Android skins by updating existing MediaStore rows in place rather than deleting and recreating them.
app/src/main/java/ceui/pixiv/download/backend · high confidence
New image detail viewer with translation, AI, and snapshot support
The app introduces a new ImageDetailActivity and ImageTranslationViewModel to handle image viewing and manga translation. This change adds a bidirectional drag-to-dismiss transition for the viewer, supports saving artwork posters, and enables AI-powered manga translation (OCR, translation, and text rendering) with a background task for full-volume translation. It also integrates automatic snapshot generation upon favoriting and allows setting the image as a system wallpaper directly from the detail view.
app/src/main/java/ceui/lisa/activities · high confidence
New in-app update checker and version history page
The app now includes an in-app update mechanism that checks for new versions on GitHub, displaying a dedicated update dialog with changelog, download progress, and options to skip or defer. A new version history page lists all past releases with a timeline UI, allowing users to review previous updates. The update checker respects the IS\_LITE build flavor to disable automatic checks for store distributions and uses a dedicated OkHttp client with the correct GitHub API Accept header.
app/src/main/java/ceui/lisa/update · high confidence
New manga translation pipeline with AI and local OCR models
The app introduces a new manga translation feature that uses local ONNX models (Comic Text Detector and manga-OCR) for text detection and recognition, combined with AI translation via a customizable OpenAI-compatible interface or cloud services. This includes a batch translation center for translating entire works in the background, a page-by-page translation pipeline with text erasure and rendering, and a preparation sheet for downloading required models. The translation engine supports streaming responses, batch processing, and configurable parameters, with progress tracking and error handling throughout the process.
app/src/main/java/ceui/pixiv/ui/translate · high confidence
New modular feed list framework with skeleton loading and pagination controls
The feeds module has been refactored into an independent library module that provides a unified list framework for the application. This introduces a new rendering architecture using a generic FeedAdapter and FeedRenderer system, allowing host applications to inject specific item renderers. The framework includes built-in support for skeleton screens (shimmer effects) for various list types (staggered grids, novels, timelines, rails) to improve perceived performance. It also implements pagination throttling (1-second interval, 30-page budget) with a footer that switches to a manual 'load more' button when the budget is exhausted. Additionally, the framework handles empty and error states, including a new 'network test' button for network-related errors, and manages scroll position restoration during refreshes.
feeds · high confidence
New network diagnostic tool in debug settings
A new NetworkTestViewModel has been added to the debug UI, providing a comprehensive network diagnostic tool for users. This feature allows users to test connectivity by probing various endpoints (including app API, image servers, and web endpoints) and analyzing DNS resolution, latency, and potential IPv6 pollution. The tool includes logic to mask sensitive proxy addresses and IP logs for privacy, detects Cloudflare blocks, and presents results through a detailed status system (e.g., Clean, Degraded, Polluted, Network Down) with specific visual indicators for different failure modes like image loading errors or high latency.
app/src/main/java/ceui/pixiv/ui/debug · high confidence
New recommendation and ranking features: Daily Recommendations, Series Ranks, Trending Artists, and Event History
This update introduces several new content feeds and ranking lists to the app. Users can now access a Daily Recommendations feed on the Discover tab, which provides personalized or popular artwork suggestions based on the current day. New ranking sections have been added, including Series Ranks for manga and novels (sorted by total bookmarks), and a Trending Artists list showing the most followed users for today, this week, and this month. Additionally, the Operation History page has been rebuilt using the new feeds framework to display user activity events like bookmarks and follows with improved performance and parsing.
app/src/main/java/ceui/pixiv/ui/recommend · high confidence
New settings for AI translation, custom theme colors, and download paths
The app introduces dedicated settings screens for three areas. AI translation now supports custom OpenAI-compatible endpoints (base URL, API key, model, prompt), with streaming, thinking-mode, and timeout configuration, replacing the built-in Google translator when enabled. Theme colors can now be customized via a HEX picker, and tag translation colors can be set independently of the main theme. Download paths and filenames are managed in a new V3-styled screen with presets, per-bucket configuration, and batch renaming of existing files.
app/src/main/java/ceui/pixiv/ui/settings · high confidence
New text-to-speech controller and text processing for novel reader
This change introduces the core infrastructure for the novel reader's text-to-speech (TTS) feature. The new NovelTtsController manages the lifecycle of TTS playback (start, pause, resume, stop, speed adjustment) by communicating with a background service, ensuring state synchronization and handling payload storage for reliable playback. Additionally, NovelTtsText provides the logic to convert reader tokens into speech-safe segments, automatically splitting long texts to respect TTS engine limits, detecting Japanese locale for appropriate voice selection, and filtering out non-speakable elements like images.
app/src/main/java/ceui/pixiv/ui/novel/reader/tts · high confidence
Novel export now supports EPUB, Markdown, and PDF formats with embedded images
The novel reader's export feature has been expanded to include EPUB, Markdown, and PDF formats in addition to the existing TXT support. The new EPUB exporter embeds Pixiv illustrations directly into the archive, while the Markdown exporter preserves image links and structure. PDF exports render the novel as a multi-page document. These changes also introduce a unified export interface and a merged-download writer system that supports all four formats for series collections.
app/src/main/java/ceui/pixiv/ui/novel/reader/export · high confidence
Novel reader V3 introduces new model classes for content, pagination, and search
The novel reader now uses a new set of model classes to support the V3 rendering engine. ContentToken defines structured tokens for paragraphs, chapters, images (including auto-wrapped illustrations), and interactive jump buttons. Page and PageElement model the paginated layout, storing text slices and geometry without relying on shared Layout objects to avoid measurement issues. SearchHit and TextSelection provide the data structures for search results and text selection highlights.
app/src/main/java/ceui/pixiv/ui/novel/reader/model · high confidence
Novel reader introduces V3 engine with vertical scrolling, local offline support, and mixed illustrations
The novel reader has been updated with a new V3 rendering engine that supports vertical scrolling without pagination, significantly improving performance by moving pagination to a background thread. Users can now read local TXT files offline, and the reader features an 'auto-mixed illustration' mode that inserts relevant artwork from followed artists, discovery feeds, or related tags into the text. Additional improvements include a shared in-memory cache for faster loading, full-text search with highlighting, and TTS reading progress synchronization.
app/src/main/java/ceui/pixiv/ui/novel/reader · high confidence
Redesigned browsing history with multi-tab support and bulk management
The browsing history view has been restructured into a three-tab interface (Illustrations/Manga, Novels, and Users) to organize content by type. This update introduces bulk selection and deletion capabilities, allowing users to long-press items to select multiple entries and remove them in one action. The history list now utilizes a unified feeds framework for consistent rendering and performance, supports searching within the illustration and novel tabs, and integrates cloud history synchronization with local fallback.
app/src/main/java/ceui/lisa/fragments · high confidence
Remote feature flags and configuration management
The app now supports remote configuration via a new \RemoteAppConfig\ service that fetches settings from the server on cold start. This enables server-side control over several features without requiring app updates: the 'borrowed account search' toggle is now disabled by default and can be enabled remotely; a new 'cloud translation' feature (using PixShaft AI) is gated by a server switch; the 'referral program' visibility is controlled remotely; and the user's subscription tier is cached to ensure immediate availability in the sidebar and usage pages. Additionally, in-app push notifications are delivered via this channel, and all configuration data is scoped per user ID to prevent cross-account leakage.
app/src/main/java/ceui/pixiv/config · high confidence
V3 artwork detail page restructured with feeds framework and tablet stage
The artwork detail page has been rebuilt using the new feeds framework, replacing the legacy adapter-based layout with a modular system of FeedRenderers and FeedItems. This introduces a new tablet-specific 'stage' layout (ArtworkTabletStage) that displays the artwork prominently with a separate scrolling info panel, while mobile views use a unified vertical feed. Key changes include lazy-loaded sections for comments and author works, a collapsible multi-page image viewer with a persistent first-page slot, and a new frame-sequence player for Ugoira animations that decouples playback speed from device performance. The UI also features a new V3 design language with glass-morphism elements, inline commenting, and improved download progress tracking.
app/src/main/java/ceui/pixiv/ui/detail · high confidence
Behavioural changes
Added ProGuard and build configuration files for witstudio
The witstudio module now includes .gitignore, proguard-rules.pro, and consumer-rules.pro files to support release builds with code shrinking and obfuscation. The consumer-rules.pro file contains specific rules for custom Views referenced from XML layouts, while proguard-rules.pro clarifies that library-specific release builds currently have minification disabled, deferring to the consumer rules.
witstudio · medium confidence
App release build now uses R8 full mode with comprehensive ProGuard rules
The app's release build pipeline has been upgraded to use R8 full mode, which aggressively shrinks and optimizes the codebase. To prevent crashes caused by reflection-based JSON parsing (Gson) and AndroidX internal access, the \proguard-rules.pro\ file has been significantly expanded to preserve field names and class identities for all network models, plaza/sticker data, snapshot manifests, and backup entities. Additionally, a new \proguard-test-rules.pro\ file ensures the test runner and tracing libraries remain intact during instrumentation tests.
app · high confidence
Chat API layer migrated to shaft-api-v2 with new conversation list and WebSocket frame handling
The chat API implementation has been replaced with a new set of classes (\ShaftChatGateway\, \ShaftChatApi\, \ChatConversationsRepository\, \ChatFrame\, \ChatThreadId\, \WsChatMessageStream\) that integrate the shaft-api-v2 chat server. This includes support for the new \/chat/conversations\ endpoint for listing and marking read conversations, a complete rewrite of the WebSocket frame decoding (\ChatFrameDecoder\) to handle \hello\, \msg\, \err\, \pong\, \typing\, and \global\_send\_state\ frames, and a port of the \ReverseXOR\ algorithm for deterministic 1v1 thread ID generation. The gateway now manages the WebSocket lifecycle via \WebSocketManager\, handles HMAC signing for authentication, and provides side-channel flows for non-room-specific events like typing indicators and global send state changes.
app/src/main/java/ceui/pixiv/chat/api · high confidence
Chat interface redesigned with V3 theming and new messaging features
The chat experience has been overhauled with a V3 visual redesign, applying the application's theme color to message bubbles, avatars, and UI elements for consistent day/night appearance. The conversation list now features a distinct 'hero' card for the public room and clear unread indicators for direct messages. Within chats, messages display inline timestamps, and users can reply to specific messages via a long-press menu, which highlights the quoted content and allows jumping back to the original message. The interface also supports inline sticker selection, haptic feedback on interactions, and improved handling of the on-screen keyboard to prevent layout issues.
app/src/main/java/ceui/pixiv/chat/ui · high confidence
Comments UI re-architected with V3 design, in-cell translations, and unified composer
The comments section has been redesigned using the V3 visual style and migrated to the feeds framework for list management. Translations are now expanded inline within comment cells with an animation, replacing the previous popup dialog. The comment input experience is unified into a single composer with a ViewPager2-based panel for switching between text and emoji stamps, supporting a two-tap send interaction for stamps. The underlying adapter system has been replaced with standard RecyclerView.ListAdapter implementations, and the bottom panel logic has been extracted into a dedicated module.
app/src/main/java/ceui/pixiv/ui/comments · high confidence
Database schema expanded with new entities for V3 readers and download optimizations
The local database schema has been significantly expanded to support new reading features and performance improvements. New tables have been added for the V3 manga reader (ComicBookmarkEntity, ComicReadingStatsEntity) and the V3 novel reader (NovelAnnotationEntity, NovelBookmarkEntity, NovelReadingStatsEntity, NovelCustomFontEntity, NovelCustomThemeEntity), enabling features like page-level bookmarks, reading statistics, and custom fonts/themes. The download system has been optimized by adding illustId and page columns to the download table to replace slow full-table scans with indexed lookups. Additionally, the history table now supports mixed content types (illustrations and novels), and the search history table now supports pinned tags with preview images.
app/src/main/java/ceui/lisa/database · high confidence
Direct-connect network bypass for Pixiv and image servers
The app now includes a direct-connect mechanism to bypass network restrictions (such as GFW TCP RST) on Pixiv endpoints and image servers. This is implemented via a new Cronet-based QUIC interceptor that routes Pixiv API and OAuth requests through Cloudflare anycast IPs using HTTP/3, and a custom SSL socket factory that disables SNI for image server connections to avoid domain-based blocking. Additionally, a new Cloudflare DNS-over-HTTPS (DoH) service is added to support reliable DNS resolution for these direct connections.
app/src/main/java/ceui/lisa/http · high confidence
Discovery page restructured with new social entry and unified data loading
The discovery experience has been redesigned to include a new 'Social' section at the bottom of the main discovery tab, providing direct entry points to Chat Rooms and Community features with custom theming and layout logic. The underlying data architecture has been consolidated: the 'Site Recommendations' (monthly bookmarks) and 'Currently Hot' shelves now fetch data via a single aggregated API request instead of separate calls, improving efficiency. Additionally, the 'Latest' works shelf now pre-populates an object pool with fetched items, allowing users to tap into artwork details instantly without an initial loading spinner. The algorithmic feed tab has also been migrated to a new feeds-based framework that reads from a local candidate pool, displaying a counter of available items in the toolbar.
app/src/main/java/ceui/pixiv/ui/discovery · high confidence
Download manager rewritten with RxJava removal and concurrency fixes
The download subsystem has been refactored to remove the RxJava dependency, replacing it with a custom ExecutorService-based thread pool and Handler for main-thread updates. This change introduces support for concurrent downloads (up to 5 parallel tasks), fixes race conditions in batch downloading, and resolves issues with download progress updates and queue management. The new implementation also improves stability by handling thread-safe operations for the download list and fixing bugs related to download restoration and cancellation.
app/src/main/java/ceui/lisa/core · high confidence
Download manager rewritten with reactive UI and V3 architecture
The download management interface has been completely rewritten to a V3 architecture, replacing the previous timer-based polling and broadcast-receiver system with a fully reactive, event-driven model using Kotlin Flows. This change introduces a new 3-tab container (Active, Queue, Done) with distinct UI behaviors: the Active tab now accurately distinguishes between downloading and waiting items, the Done tab aggregates multi-page works into single cards with page-count badges, and the Queue tab provides better visibility into batch operations. The update also adds new features such as search functionality in the Done tab, direct link export for downloaded images, and improved performance by eliminating unnecessary UI animations and database invalidation tracker issues.
app/src/main/java/ceui/pixiv/ui/download · high confidence
In-app banner system refactored into a standalone module with improved display logic and queue management
The in-app banner framework has been extracted into a dedicated \:banner\ module, introducing a robust priority-based queue and display policy system. This change ensures banners are only rendered when a valid host Activity is in the STARTED state, preventing unwanted overlays when returning to the foreground. The system now supports advanced queue behaviors like preemption, replacement, and dropping duplicates, while the default chat banner UI has been redesigned to include an avatar, source caption, bold nickname, and two-line message body. Additionally, the banner host now correctly handles status bar insets by reading root window insets directly, ensuring proper positioning across different Android versions and screen configurations.
banner · high confidence
Introduce server-driven referral program with V3 UI
The referral page now relies entirely on the server for all reward logic, task definitions, and card tiers, removing hardcoded client-side rules. The interface has been redesigned using the V3 design language, featuring adaptive layouts, dynamic theming, and a unified seven-day experience card structure. Users can now view their specific invite codes, track task progress, and manage cards in a single consolidated view, with all state changes and validations handled by the backend to ensure accuracy.
app/src/main/java/ceui/pixiv/ui/referral · high confidence
Introduces rotating first-party token sessions with secure storage and automatic refresh
The app now uses a rotating first-party authentication model for account, media, plaza, and referral API calls. Access tokens are stored in an encrypted envelope protected by the Android Keystore and persisted via MMKV, and an OkHttp interceptor automatically attaches the Bearer token along with the X-Pixshaft-Auth-Version header to protected routes. When a 401 is received, a single-flight refresh coordinator ensures that concurrent requests share one refresh attempt and replay with the new token, while terminal states like session revocation or expiration clear local credentials. A bootstrap path allows recovery when no session is present, and public routes remain unauthenticated.
safe · high confidence
Introduces structured error handling and UI state models for the chat subsystem
The chat subsystem now uses a dedicated \AppError\ hierarchy to represent domain-level failures (such as network issues, HTTP errors, and rate limits) with clear retry semantics, replacing ad-hoc error handling. This is paired with \PageState\ and \PagingState\ sealed classes in the base module to standardize how screens display loading, content, empty, and error states, as well as pagination progress. Additionally, \AppResult\ provides a consistent way to handle success and error outcomes from operations, and \MessagePage\ defines the contract for paginated message history.
app/src/main/java/ceui/pixiv/chat/base, app/src/main/java/ceui/pixiv/chat/core · high confidence
New V3 UI animation and style resources
The app adds a suite of new XML resources to support the V3 design language. This includes animation definitions for dialog transitions (enter/exit), zoom effects, and loading indicators (alpha/rotate cycles), as well as animator selectors for button press feedback (scale and alpha). Additionally, new color selectors and drawable backgrounds are introduced to implement MD3-E styling for UI elements such as bookmark chips, bulk action buttons, and chat bubbles.
app/src/main/res · high confidence
New download configuration system with per-bucket storage and overwrite policies
The download subsystem now uses a layered configuration model where default settings (template, storage location, and overwrite policy) can be overridden on a per-bucket basis (e.g., Illust, Novel, Backup). A key behavioral change ensures that non-image buckets (like novels, captions, and backups) automatically fall back to the 'Downloads' storage folder instead of the 'Images' album, preventing silent write failures caused by incompatible MIME types. Additionally, backup exports are now forced to use a 'Rename' overwrite policy to prevent accidental overwriting of existing backup files, and the system supports new bucket types for novel series and captions with their own specific default templates.
app/src/main/java/ceui/pixiv/download/config · high confidence
New download subsystem with resume support and safer file handling
The app introduces a new download subsystem (ceui.pixiv.download) that replaces the legacy implementation. This change adds resume capability by persisting download progress via URL-based stage files and manifest validation, ensuring continuity across app restarts. It also improves reliability by sanitizing filename templates to prevent crashes from invalid characters, enforcing a single sanitization pass, and handling overwrite policies more safely to avoid platform-specific deletion alerts. Additionally, it provides a robust state source for tracking download records and resolves path conflicts without side effects.
app/src/main/java/ceui/pixiv/download · high confidence
Plaza feed and moderation features migrated to the unified feeds framework
The Plaza section now uses the shared feeds infrastructure for displaying posts, managing pagination, and handling caching, replacing the previous standalone implementation. This migration introduces a new blocked-users list view, a comprehensive moderation system for reporting and blocking users (including optional photo evidence uploads), and a reworked post composer with attachment support. The change also improves reliability by ensuring account-switch safety, persisting first-page cache snapshots, and automatically refreshing expired media signatures to prevent image loading failures.
app/src/main/java/ceui/pixiv/plaza/ui · high confidence
Prime tags directory now uses the feeds framework with dynamic hot-search support
The Prime tags directory and detail views have been migrated to the new feeds framework, replacing the previous implementation. This change introduces a new "Hot Search" tag shelf (CorpusTagsFragment) that pulls data dynamically from the server, ensuring the list updates daily based on search activity, while the existing curated Prime tags directory (PrimeTagsFragment) remains offline via a local JSON index. Both directories now share a consistent UI structure and skeleton loading states, and clicking a tag navigates to its detail view to fetch associated illustrations.
app/src/main/java/ceui/pixiv/ui/prime · high confidence
Redesigned author pages with new tabs, advanced tag search, and feeds framework migration
The author profile experience has been significantly updated. A new "Commissions" tab displays available request plans using a modern card layout, while the existing artwork lists (illustrations and manga) have been migrated to the unified feeds framework for better performance and consistency. An "Advanced Search" feature allows users to filter an author's works by their full tag history via a searchable bottom sheet. Additionally, the "Users who liked this" list has been rebuilt to support both illustrations and novels, and the UI now correctly handles empty states when all works are hidden by user filters.
app/src/main/java/ceui/pixiv/ui/user · high confidence
Redesigned bulk selection and download system with persistent queue and CLI-style progress
The bulk selection interface has been overhauled to a V3 design: the illustration selection screen now defaults to no selection (resolving visibility issues with large lists), uses a single master-checkbox button in the toolbar, and supports 9:16 portrait thumbnails. A new bottom action bar allows users to bulk download, bookmark, or unbookmark items via a dedicated action queue. The underlying download infrastructure has been replaced with a persistent, page-level concurrent queue managed by \QueueDownloadManager\, which uses Room \SharedFlow\ for reliable UI updates and supports resume, pause, and progress tracking. A new \BulkObjectFetcher\ and \PaginatedObjectSource\ abstraction enables streaming pagination for illustrations, bookmarks, and novels, feeding into a \FetchProgressDialog\ that provides a real-time, CLI-style verbose status display with rate-limit countdowns and step-by-step logging. Ugoira (animated GIF) support is now integrated into this bulk pipeline, with separate concurrent download and serial encoding logic, and the engine now supports exporting to H.264 MP4 for smaller file sizes and smoother playback.
app/src/main/java/ceui/pixiv/ui/bulk · high confidence
Replaced legacy ProgressManager with new ProgressTracker module
The progressmanager module has been rewritten in Kotlin as \ceui.pixiv.progress.ProgressTracker\, replacing the previous \me.jessyan.progressmanager.ProgressManager\. This new implementation uses an OkHttp network interceptor to track download progress by URL, offering a subscription-based API via \ProgressSubscription\ that supports \AutoCloseable\ for safe resource management. It introduces a configurable refresh interval (default 150ms) and a pluggable \Clock\ interface to allow precise testing and avoid issues with wall-clock adjustments. The module also includes comprehensive unit and integration tests for \DownloadProgress\, \ProgressResponseBody\, and \ProgressTracker\ to ensure correct behavior regarding throttling, completion detection, and thread safety.
progressmanager · high confidence
Report flow now uses server-driven violation topics and corrects ID handling
The reporting workflow has been updated to fetch violation reasons dynamically from the server (/v1/illust/report/topic-list) instead of using hardcoded local strings, ensuring the feature works with current API requirements. Additionally, the implementation fixes a bug where the reported object ID was incorrectly passed as an integer, which previously caused submissions to fail or target the wrong item; it now correctly uses a Long type. The UI for selecting reasons and entering descriptions has been refactored to use the app's standard Feed framework and explicit Activity result callbacks for better state management.
app/src/main/java/ceui/pixiv/network, app/src/main/java/ceui/pixiv/ui/flag · high confidence
Resilient action queue with offline persistence and Cloudflare guidance
The app now routes bookmarks and follows through a persistent, process-wide ActionQueue that survives network outages and app restarts, ensuring user actions are not lost when offline. It introduces specific handling for Cloudflare 403 blocks by detecting the interception and guiding the user to change their network, rather than showing a generic failure. Additionally, follow visibility is now tracked independently to prevent stale server snapshots from overwriting local private/public settings, and account status reports are managed via a separate durable outbox to avoid blocking user actions.
app/src/main/java/ceui/pixiv/actions · high confidence
Scroll-to-top on tab reselect and improved illustration sharing
Users can now scroll the current feed view to the top by tapping the active tab title again, providing a quick way to return to the beginning of the list. Additionally, the illustration sharing functionality has been refactored to use the new unified Illust model, ensuring consistent sharing behavior for artwork details.
app/src/main/java/ceui/lisa/utils · high confidence
Search V3 filter overhaul and novel series grouping
The search module has been updated to align with Pixiv iOS 8.6.6, introducing a comprehensive V3 filter system that replaces previous keyword hacks with native API parameters. Users now benefit from precise sorting (defaulting to popularity), refined R-18 filtering based on client-side \x\_restrict\ checks, and new novel-specific filters for body length (characters, words, reading time), originality, and replaceability. Illustration and manga searches now support aspect ratio, resolution, and content type filters. Additionally, novel searches can now group results by series via a dedicated web source, and search hint responsiveness has been improved with a reduced debounce timer.
app/src/main/java/ceui/pixiv/ui/search · high confidence
SessionManager replaces Shaft.sUserModel as the single source of truth for user state
The app now uses the new SessionManager object in the session package to manage user authentication and profile data, replacing the previous reliance on Shaft.sUserModel. This change introduces a centralized, LiveData-based account state that persists user information via MMKV, includes a migration path from legacy SharedPreferences, and provides specific utilities for handling web cookies and session validity.
app/src/main/java/ceui/pixiv/session · high confidence
Sticker system restructured with content-addressed downloads and local caching
The sticker subsystem has been rebuilt to support content-addressed downloads from GitHub Releases, where sticker packages are fetched by SHA-256 checksum rather than static URLs. This change introduces a local caching layer that downloads, verifies, and extracts sticker ZIPs to disk, allowing the app to load stickers locally via Glide after the initial download. The new architecture includes a dedicated StickerRepository for managing state, a StickerCatalog for validating pack integrity, and a StickerPicker UI component that displays stickers in a bottom sheet with category tabs. This ensures stickers load instantly from cache on subsequent uses and remain available offline once downloaded.
app/src/main/java/ceui/pixiv/sticker · high confidence
Unified series cards adopt Material Design 3 styling
The series list and ranking views now use a new V3-style card component that applies Material Design 3 theming. This change introduces correct usage of the V3 palette for UI elements like rank badges and action buttons, ensuring text and background colors align with the current theme. The card model supports distinct display modes for watchlist updates and ranking positions, including handling for masked or removed content.
app/src/main/java/ceui/pixiv/ui/series · high confidence
Updated Snap store assets with new visual design and Chinese localization
The Snap store page assets for Pixshaft have been refreshed with a new visual identity and expanded language support. New SVG graphics for the hero banner, call-to-action, and feature capabilities now use a consistent gradient and grain aesthetic, replacing previous static images. The layout for the device mockup has been updated to a Pixel 8 model with corrected dimensions (1187x2513). Additionally, a full Chinese localization (zh) has been added for all store assets, translating feature names and marketing copy to support Chinese-speaking users.
snap · high confidence
V3 novel reader pagination engine with inline markup and illustration mixing
The novel reader's pagination and content parsing layer has been replaced with a new V3 implementation. This update introduces a token-based parser that correctly handles Pixiv's line-oriented markup, including block-level and inline \\[jump:N\]\ navigation tags, chapter title cleanup, and image placeholders. It adds support for inline markup such as clickable links (\\[\[jumpuri:...\]\]\) and ruby text annotations (\\[\[rb:...\]\]\). The rendering engine now uses a centralized \TypeStyle\ configuration to manage typography, line spacing, and paragraph gaps, fixing issues with double indentation and excessive whitespace. Additionally, an automatic illustration mixing feature can now insert relevant artwork into the text flow at configurable intervals.
app/src/main/java/ceui/pixiv/ui/novel/reader/paginate · high confidence
V3 search filters introduce precise date range controls and novel-specific length filters
The V3 search filter UI now includes a dedicated date range picker that allows users to set custom start and end dates, featuring an automatic continuation flow (selecting a start date immediately prompts for the end date) and a 'shift' tool to move the entire range by days, weeks, months, or years. For novel searches, new filters have been added to specify body length (by character count, word count, or estimated reading time) and to group results by series. The 'Other conditions' sheet has been updated to support these novel-specific options and now includes a three-tier AI content filter (All, Exclude AI, Only AI) that operates as a temporary search dimension without altering global settings.
app/src/main/java/ceui/pixiv/ui/search/v3 · high confidence
V3-style image detail page redesign
The image detail page has been redesigned with a V3-style interface, featuring a new layout and improved user experience. This includes changes to the image display, navigation, and interaction elements.
app/src/main/java · high confidence
Watchlist manga and novel tabs migrated to the unified feeds framework
The manga and novel watchlist tabs now use the new \WatchlistFeedFragment\ base class and the shared \feeds\ framework, replacing the previous legacy \FragmentCollection\ and adapter-based implementation. This change unifies the UI rendering by using the \cell\_series\_v3\ card layout for both manga and novel entries, ensuring consistent styling with the series ranking list. It also improves stability by handling null values in novel series data more safely (preventing potential crashes when opening the latest episode) and standardizes the empty state message for watchlists.
app/src/main/java/ceui/pixiv/ui/watchlist · high confidence
WebSocket client library extracted to independent module
The WebSocket client framework has been refactored into a standalone \:websocket\ module. This change isolates the client implementation, including the robust connection handling, authentication, and network monitoring logic, into its own package. The module name and package structure remain unchanged, ensuring that existing consumers can continue to use the library without any code modifications or dependency updates.
websocket · high confidence
Fixes
Novel reader settings now use a dedicated storage backend with improved typography defaults
The novel reader's settings have been migrated to a dedicated MMKV instance (novel\_reader\_v3), isolating them from the rest of the app. This change introduces a migration for paragraph spacing, converting the old font-bounding-box-based values to a new line-height-based unit to ensure consistent layout across font changes. Additionally, the system now includes a set of predefined reader themes (such as Kraft, White, Night, and Charcoal) and preset fonts (including Sans, Serif, and Monospace variants) to provide immediate styling options upon first use.
app/src/main/java/ceui/pixiv/ui/novel/reader/settings · high confidence
ProgressTextButton prevents layout collapse during loading states
The ProgressTextButton widget now locks its minimum width and height while the progress spinner is animating, preventing the button from shrinking in height when the text is temporarily hidden. This fix resolves a visual issue in comment sections where the 'View Replies' button would unexpectedly collapse and then expand, ensuring a stable layout during asynchronous operations.
app/src/main/java/ceui/pixiv/widgets · high confidence
Test coverage
Added Android instrumentation tests for database migrations, R8 model integrity, and UI rendering; Added unit tests for UI insets, search interactions, and download subsystems; Added unit tests for WitRowStyle background selection.
Dependencies
Gradle build tool upgraded to version 8.14.5
The project's Gradle wrapper has been updated from version 4.10.1 to 8.14.5, introducing a new distribution SHA-256 checksum and network timeout configuration. This upgrade modernizes the build environment, requiring developers to use a compatible Java toolchain (specifically JDK 17 as indicated by the new gradle-daemon-jvm.properties file) to ensure smooth builds.
gradle · high confidence
Project modernization: AndroidX migration, Gradle 8.13.2/AGP 8.13.2 upgrade, and Kotlin 2.1.20
The build system has been upgraded to Gradle 8.14.5 and Android Gradle Plugin 8.13.2, with the Kotlin compiler raised to version 2.1.20. The project has fully migrated to AndroidX (enforced via \android.useAndroidX=true\ and \android.enableJetifier=true\) and bumped the minimum SDK to 24 and compile SDK to 36. Repository sources have been cleaned up by removing deprecated JCenter and JFrog repositories, replacing them with Google, Maven Central, and a filtered Jitpack entry. The build now uses the \libs.versions.toml\ catalog for dependency management, introduces the KSP plugin for new modules, and configures the Gradle daemon to run on JDK 17.
(dependencies) · high confidence
Housekeeping
Added build configuration files for the actionqueue module
The actionqueue module now includes .gitignore, consumer-rules.pro, and proguard-rules.pro files to support build and release configurations. These files define build artifacts to ignore and specify ProGuard/R8 rules, noting that the library's own release build does not enable minification and relies on consumer rules for obfuscation.
actionqueue · high confidence
Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.
How this codebase got here
Score
- CAI 24 → 40 (+15.7)
- Rubric changed (rubric-2026.08.15 → rubric-2026.09.15) — scores are not directly comparable.
Lenses
- Code Health 86 → 85 (-1.6)
- Architecture 94 → 96 (+1.7)
- Maturity 50 → 66 (+15.8)
- Readiness 13 → 44 (+31.3)
- Security 8 → 27 (+19.7)
- Domain Modelling 60 → 56 (-3.9)
- Accessibility 44 (new)
Resolved (66)
- Coverage not measured — test suite did not build
- Dimension evaluation failed
- Duplicated block (10 lines × 2) (app/src/main/java/ceui/lisa/fragments/HistoryFeed.kt)
- Duplicated block (10 lines × 2) (app/src/main/java/ceui/pixiv/ui/settings/DownloadPathSettingsFragment.kt)
- Duplicated block (10 lines × 2) (app/src/main/java/ceui/pixiv/ui/settings/DownloadPathSettingsFragment.kt)
- Duplicated block (11 lines × 2) (app/src/main/java/ceui/lisa/fragments/HistoryFeed.kt)
- Duplicated block (11 lines × 2) (app/src/main/java/ceui/pixiv/ui/settings/DownloadPathSettingsFragment.kt)
- Duplicated block (11 lines × 2) (app/src/main/java/ceui/pixiv/ui/task/FetchAllTask.kt)
- Duplicated block (11 lines × 2) (app/src/main/java/ceui/pixiv/ui/watchlist/WatchlistFeed.kt)
- Duplicated block (12 lines × 2) (app/src/main/java/ceui/lisa/activities/UserV3InfoFragment.kt)
- Duplicated block (12 lines × 2) (app/src/main/java/ceui/pixiv/ui/translate/TextEraser.kt)
- Duplicated block (15 lines × 2) (app/src/main/java/ceui/loxia/MoonSync.kt)
- Duplicated block (15 lines × 2) (app/src/main/java/ceui/pixiv/ui/synonym/SynonymOperate.kt)
- Duplicated block (15 lines × 2) (app/src/main/java/ceui/pixiv/utils/LikeHaptic.kt)
- Duplicated block (17 lines × 2) (app/src/main/java/ceui/lisa/activities/ImageDetailActivity.kt)
- Duplicated block (23 lines × 2) (app/src/main/java/ceui/pixiv/ui/debug/SafPerfTestFragment.kt)
- Duplicated block (25 lines × 8) (app/src/main/java/ceui/pixiv/download/config/ConfigPresets.kt)
- Duplicated block (5 lines × 2) (app/src/main/java/ceui/pixiv/db/discovery/ProfileManager.kt)
- Duplicated block (5 lines × 2) (app/src/main/java/ceui/pixiv/ui/novel/reader/export/MergedNovelWriter.kt)
- Duplicated block (5 lines × 2) (app/src/main/java/ceui/pixiv/ui/synonym/SynonymOperate.kt)
- …and 46 more
New (645)
- 4.shouldOverrideUrlLoading (cognitive 19) (app/src/main/java/ceui/lisa/fragments/FragmentWebView.java)
- 6.onEditorAction (cognitive 19) (app/src/main/java/ceui/lisa/activities/SearchActivity.java)
- AccountOnlineReportOutbox.workerLoop (cognitive 23) (app/src/main/java/ceui/pixiv/actions/AccountOnlineReportOutbox.kt)
- ActionQueue.execute (cognitive 18) (actionqueue/src/main/java/ceui/pixiv/actionqueue/ActionQueue.kt)
- ActiveAdapterV3.bindIllustStateAndProgress (cyclomatic 19) (app/src/main/java/ceui/pixiv/ui/download/ActiveListV3Fragment.kt)
- ActiveListV3Fragment.onViewCreated (cyclomatic 17) (app/src/main/java/ceui/pixiv/ui/download/ActiveListV3Fragment.kt)
- AiTranslator.doCallChatCompletion (cognitive 17) (app/src/main/java/ceui/pixiv/ui/translate/AiTranslator.kt)
- AiTranslator.streamChatCompletion (cognitive 19) (app/src/main/java/ceui/pixiv/ui/translate/AiTranslator.kt)
- AiTranslator.streamChatCompletion (cyclomatic 16) (app/src/main/java/ceui/pixiv/ui/translate/AiTranslator.kt)
- AiTranslator.translateBatch (cognitive 33) (app/src/main/java/ceui/pixiv/ui/translate/AiTranslator.kt)
- AppLevelState.updateFollowUserStatus (cognitive 18) (app/src/main/java/ceui/lisa/viewmodel/AppLevelState.java)
- AppLevelStateHelper.fill (cognitive 47) (app/src/main/java/ceui/lisa/helper/AppLevelStateHelper.java)
- BackupUtils.applyRestored (cognitive 22) (app/src/main/java/ceui/lisa/utils/BackupUtils.java)
- BackupUtils.applyRestored (cyclomatic 16) (app/src/main/java/ceui/lisa/utils/BackupUtils.java)
- BackupUtils.restoreBackupEntity (cognitive 16) (app/src/main/java/ceui/lisa/utils/BackupUtils.java)
- BaseAdapter.setLiked (cognitive 19) (app/src/main/java/ceui/lisa/adapters/BaseAdapter.java)
- BookmarkLibraryUi.countConditions (cognitive 17) (app/src/main/java/ceui/pixiv/ui/library/BookmarkLibraryUi.kt)
- BookmarkLibraryUi.countConditions (cyclomatic 18) (app/src/main/java/ceui/pixiv/ui/library/BookmarkLibraryUi.kt)
- BookmarkMirrorService.runOnePage (cyclomatic 17) (app/src/main/java/ceui/pixiv/db/mirror/BookmarkMirrorService.kt)
- BottomPanelCoordinator.setupImeInsets (cognitive 32) (panel/src/main/java/ceui/pixiv/panel/BottomPanelCoordinator.kt)
- …and 625 more
Changes since last survey
- 300 commits — 130 feature/other, 170 fixes
By area
- app/src — 220 commits
- (repo) — 61 commits
- .github/workflows — 4 commits
- app/build.gradle — 3 commits
- .agents/skills — 2 commits
- banner/src — 2 commits
- app/proguard-rules.pro — 1 commit
- docs/image-host.md — 1 commit
- docs/plaza-design-review.md — 1 commit
- docs/plaza-moderation.md — 1 commit
- docs/tablet-design — 1 commit
- docs/v3-design-philosophy.md — 1 commit
- mockup/referral-plan — 1 commit
- panel/src — 1 commit
Notable commits
- fix: Merge pull request #1111 from CeuiLiSA/fix/log-file-private-storage
- fix: Revert "fix(crash): 主线程放行系统 tooltip 布局缺失的 Resources$NotFoundException"
- fix: fix(banner): Lite 渠道禁用全部聊天横幅
- fix: fix(banner): 无 STARTED 宿主时保留请求,不再消费未展示的 banner
- fix: fix(banner): 无宿主时不排队聊天 banner,避免回前台补显盖住会话
- fix: fix(banner): 补上按钮点击的 BannerEvent.Action 消费者
- fix: fix(bookmark): 恢复收藏库工具栏滚动并协调下拉刷新
- fix: fix(bookmark): 收藏库 AppBarLayout 去掉默认 4dp 阴影
- fix: fix(bookmark-library): 修正 refreshIfStale 闸门,防止切书架后永久空白
- fix: fix(bookmark-library): 修正流式续页边界与补齐后的筛选选项 (#1109)
- fix: fix(bookmark-library): 对齐 classic 的流式修复并清理模拟工具 (#1109)
- fix: fix(bookmark-library): 按收藏序号续页并识别表头更新 (#1109)
- fix: fix(bookmark-library): 支持收藏库边同步边浏览 (#1109)
- fix: fix(bookmark-mirror): 收藏页入口就注册书架,不再依赖旧页面被渲染
- fix: fix(build): AAB 关掉 ABI 拆分,.so 打进 base.apk,修 Play 包只侧载 base.apk 时找不到 libmmkv.so 启动即崩
- fix: fix(build): 补齐 16 KB 页面链接参数 (#1084)
- fix: fix(cache): 校准缓存额度恢复与首次初始化状态
- fix: fix(chat): display compact stickers without bubble backgrounds
- fix: fix(chat): 修复延迟初始化前订阅聊天消息导致崩溃
- fix: fix(chat): 输入栏光标着色只在 Android 10+ 调用,修 minSdk 24 的 NewApi lint 错误
- …and 280 more
Architecture
- Containers 0 added · 0 removed · contexts 12 added · 0 removed · edges 9 added · 0 removed
Added bounded contexts (12)
- actionqueue
- app
- banner
- communication
- feeds
- models
- panel
- progressmanager
- python
- safe
- websocket
- witstudio
Added dependency edges (9)
- app → actionqueue
- app → banner
- app → communication
- app → feeds (coupling)
- app → models (coupling)
- app → panel
- app → safe
- app → websocket
- app → witstudio (coupling)
Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.
Survey your own repository
CeuiLiSA/Pixiv-Shaft was measured the same way every project in this corpus was: the same rubric, at a pinned commit, with the result published in full. Point a surveyor at a repository you know and see whether you agree with it.
About this page
- The score is its most recent published measurement, taken on 25 September 2026 at a pinned commit. It is not a live figure and does not change until the project is measured again.
- Measured at commit 05a44620973e6913e209b7f6a34ca3c431ce6482 — the exact code this score is about.
- Scored under rubric-2026.09.15 — the same rubric and the same method as every other entry in this index.
- Measured by watchdog.canine.dev using codehealth-analyzer preprod-dd72cc24c749.