Skip to content

Releases: EstrellaXD/Auto_Bangumi

🌙3.2.3-beta.3

30 Jan 12:17

Choose a tag to compare

🌙3.2.3-beta.3 Pre-release
Pre-release

[3.2] - 2025-01

Backend

Features

  • Added WebAuthn Passkey passwordless login support
    • Register, authenticate, and manage Passkey credentials
    • Multi-device credential backup detection (iCloud Keychain, etc.)
    • Clone attack protection (sign_count verification)
    • Authentication strategy pattern unifying password and Passkey login interfaces
    • Usernameless login support via discoverable credentials (resident keys)
  • Added season/episode offset auto-detection
    • Analyzes TMDB episode air dates to detect "virtual seasons" (e.g., Frieren S1 split into two parts)
    • Auto-identifies different parts when broadcast gap exceeds 6 months
    • Calculates episode offset (e.g., RSS shows S2E1 → TMDB S1E29)
    • Background scan thread automatically detects offset issues in existing subscriptions
    • New API endpoints: POST /bangumi/detect-offset, PATCH /bangumi/dismiss-review/{id}
  • Added bangumi archive functionality
    • Manual archive/unarchive support
    • Auto-archive completed series
    • New API endpoints: PATCH /bangumi/archive/{id}, PATCH /bangumi/unarchive/{id}, GET /bangumi/refresh/metadata
  • Added search provider configuration API
    • GET /search/provider/config - Get search provider config
    • PUT /search/provider/config - Update search provider config
  • Offset detection panel now shows suggested values (parsed season/episode and recommended offset)
  • Fixed season offset not being applied to download folder path
    • Setting season offset now auto-updates qBittorrent save path (e.g., Season 2Season 1)
    • RSS rule save paths also sync the update
  • Optimized episode offset suggestion logic
    • Simple season mismatch no longer suggests episode offset (only virtual seasons need it)
    • Improved prompt messages to clarify whether episode adjustment is needed
  • Added RSS connection status tracking
    • Records connection_status (healthy/error), last_checked_at, and last_error after each refresh
  • Added first-run setup wizard
    • 7-step guided configuration: account, downloader, RSS source, media path, notifications
    • Downloader connection test, RSS source validation
    • Optional steps can be skipped and configured later in settings
    • Sentinel file mechanism (config/.setup_complete) prevents re-triggering
    • Unauthenticated setup API (only available on first run, returns 403 after completion)
  • Added calendar view with Bangumi.tv broadcast schedule integration
  • Added downloader API and management interface
  • Full async migration
    • Database layer async support (aiosqlite) for non-blocking I/O in Passkey operations
    • UserDatabase supports both sync/async modes for backward compatibility
    • Database context manager supports both with (sync) and async with (async)
    • RSS engine, downloader, checker, and parser fully converted to async
    • Network requests migrated from requests to httpx (AsyncClient)
  • Backend migrated to uv package manager (pyproject.toml + uv.lock)
  • Server startup uses background tasks to avoid blocking (fixes #891, #929)
  • Database migration auto-fills NULL values with model defaults
  • Database adds needs_review and needs_review_reason fields for offset detection

Performance

  • Shared HTTP client connection pool, reuses TCP/SSL connections
  • RSS refresh now concurrent (asyncio.gather), ~10x faster with multiple sources
  • Torrent file download now concurrent, ~5x faster for multiple torrents
  • Rename module concurrent file list fetching, ~20x faster
  • Notification sending now concurrent, removed 2-second hardcoded delay
  • Added TMDB and Mikan parser result caching to avoid duplicate API calls
  • Database indexes added for Torrent.url, Torrent.rss_id, Bangumi.title_raw, Bangumi.deleted, RSSItem.url
  • RSS batch enable/disable uses single transaction instead of per-item commits
  • Pre-compiled regex patterns for torrent name parsing and filter matching
  • SeasonCollector created outside loops, reuses single authentication
  • RSS parsing deduplication changed from O(n²) list lookup to O(1) set lookup
  • Episode/SeasonInfo dataclasses use __slots__ for reduced memory footprint

Changes

  • Upgraded WebAuthn dependency to py_webauthn 2.7.0
  • _get_webauthn_from_request prioritizes browser Origin header, fixing verification issues in cross-port development environments
  • auth_user and update_user_info converted to async functions
  • TitleParser.tmdb_parser converted to async function
  • RSSEngine methods fully async (pull_rss, refresh_rss, download_bangumi, add_rss)
  • Checker.check_downloader converted to async function
  • ProgramStatus migrated from threading to asyncio (Event, Lock)

Bugfixes

  • Fixed downloader connection check with max retry limit
  • Fixed transient network errors when adding torrents with retry logic
  • Fixed multiple issues in search and subscription flow
  • Improved torrent fetch reliability and error handling
  • Fixed aaguid type error (now str in py_webauthn 2.7.0, no longer bytes)
  • Fixed missing credential_backup_eligible field (replaced with credential_device_type)
  • Fixed verify_authentication_response receiving invalid credential_id parameter causing TypeError
  • Fixed program startup blocking the server (fixes #891, #929, #886, #917, #946)
  • Fixed search interface export not matching component expectations
  • Fixed poster endpoint path check incorrectly intercepting all requests (fixes #933, #934)
  • Fixed OpenAI parser security issue
  • Fixed database tests using async sessions with sync code mismatch
  • Fixed config field conflicts when upgrading from 3.1.x to 3.2 causing settings loss (fixes #956)
    • program.sleep_time / program.times auto-migrated to rss_time / rename_time
    • Removed deprecated rss_parser fields (type, custom_url, token, enable_tmdb)
    • Fixed ENV_TO_ATTR environment variable mapping pointing to non-existent model fields
    • Fixed DEFAULT_SETTINGS inconsistency with current config model
  • Fixed version upgrade migration logic errors (all upgrades calling 3.0→3.1 migration)
    • Added version-aware migration dispatch based on source version
    • Added from_31_to_32() migration function for database schema changes

Frontend

Features

  • Complete UI design system redesign
    • Unified design tokens (colors, fonts, spacing, shadows, animations)
    • Light/dark theme toggle support
    • Comprehensive accessibility support (ARIA, keyboard navigation, focus management)
    • Responsive layout for mobile devices
  • Added first-run setup wizard page
    • Multi-step wizard component (progress bar + step navigation)
    • Route guard auto-detection and redirect to setup page
    • Downloader/RSS/notification connection test feedback
    • Chinese and English i18n support
  • Added Passkey management panel (settings page)
    • WebAuthn browser support detection
    • Automatic device name identification
    • Passkey list display and deletion
  • Added Passkey fingerprint login button on login page (supports usernameless login)
  • Added calendar view page
  • Added downloader management page
  • Added Bangumi card hover overlay (showing title and tags)
  • Added resolvePosterUrl utility function for unified external URL and local path handling (fixes #934)
  • Redesigned search panel with modal and filter system
    • Added filter section supporting fansub group, resolution, subtitle type, and season filtering
    • Multi-select filters with smart disable for incompatible options (grayed out)
    • Result item tags changed to non-clickable colored pill style
    • Unified tag styling (pill shape, 12px font)
    • Standardized tag values (resolution: FHD/HD/4K, subtitles: CHS/CHT/Dual)
    • Filter categories and result variants support expand/collapse
    • Poster height auto-matches 4 rows of variant items (168px)
    • Click outside modal to auto-close
  • Redesigned login panel with modern glassmorphism style
  • Added log level filter in log view
  • Redesigned LLM settings panel (fixes #938)
  • Redesigned settings, downloader, player, and log page styles
  • Added search provider settings panel
    • View, add, edit, delete search sources in UI
    • Default sources (mikan, nyaa, dmhy) cannot be deleted
    • URL template validation ensures %s placeholder
  • Added iOS-style notification badge system
    • Yellow badge + purple border for subscriptions needing review
    • Combined display support (e.g., ! | 2 for warning + multiple rules)
    • Yellow glow animation on cards needing attention
  • Edit modal warning banner with one-click auto-detect and dismiss
  • Rule selection modal highlights rules with warnings
  • Calendar page bangumi grouping: same anime with multiple rules merged, click to select specific rule
  • Bangumi list page collapsible "Archived" section
  • Bangumi list page skeleton loading animation
  • Rule editor episode offset field with "Auto Detect" button
  • Empty state on home page now includes "Add RSS Subscription" button to guide new users
  • Calendar page poster images now use lazy loading for better performance
  • Calendar page "Unknown Air Date" section separated into its own block for better visual rhythm
  • RSS management page connection status labels: green "Connected" when healthy, red "Error" with tooltip for details
  • New mobile-first responsive design
    • Three-tier breakpoint system: mobile (<640px), tablet (640-1023px), desktop (≥1024px)
    • Mobile bottom navigation bar (with icons and text labels)
    • Tablet mini sidebar (56px icon navigation)
    • Mobile popups automatically switch to bottom sheets
    • Pull-to-refresh support
    • Horizontal swipe container support
    • Mobile card list replacing data tables (RSS page)
    • CSS Grid responsive layout (Bangumi card grid)
    • Form labels stack vertically on mobile, full-width inputs
    • Touch targets minimum 44px, meeting accessibility standards
    • Safe area support (notched devices)
    • 100dvh dynamic viewport height (fixes mobile browser address bar issue)
    • viewport-fit=cover for full-sc...
Read more

🌙3.2.3-beta.2

28 Jan 19:32

Choose a tag to compare

🌙3.2.3-beta.2 Pre-release
Pre-release

[3.2] - 2025-01

Backend

Features

  • Added WebAuthn Passkey passwordless login support
    • Register, authenticate, and manage Passkey credentials
    • Multi-device credential backup detection (iCloud Keychain, etc.)
    • Clone attack protection (sign_count verification)
    • Authentication strategy pattern unifying password and Passkey login interfaces
    • Usernameless login support via discoverable credentials (resident keys)
  • Added season/episode offset auto-detection
    • Analyzes TMDB episode air dates to detect "virtual seasons" (e.g., Frieren S1 split into two parts)
    • Auto-identifies different parts when broadcast gap exceeds 6 months
    • Calculates episode offset (e.g., RSS shows S2E1 → TMDB S1E29)
    • Background scan thread automatically detects offset issues in existing subscriptions
    • New API endpoints: POST /bangumi/detect-offset, PATCH /bangumi/dismiss-review/{id}
  • Added bangumi archive functionality
    • Manual archive/unarchive support
    • Auto-archive completed series
    • New API endpoints: PATCH /bangumi/archive/{id}, PATCH /bangumi/unarchive/{id}, GET /bangumi/refresh/metadata
  • Added search provider configuration API
    • GET /search/provider/config - Get search provider config
    • PUT /search/provider/config - Update search provider config
  • Offset detection panel now shows suggested values (parsed season/episode and recommended offset)
  • Fixed season offset not being applied to download folder path
    • Setting season offset now auto-updates qBittorrent save path (e.g., Season 2Season 1)
    • RSS rule save paths also sync the update
  • Optimized episode offset suggestion logic
    • Simple season mismatch no longer suggests episode offset (only virtual seasons need it)
    • Improved prompt messages to clarify whether episode adjustment is needed
  • Added RSS connection status tracking
    • Records connection_status (healthy/error), last_checked_at, and last_error after each refresh
  • Added first-run setup wizard
    • 7-step guided configuration: account, downloader, RSS source, media path, notifications
    • Downloader connection test, RSS source validation
    • Optional steps can be skipped and configured later in settings
    • Sentinel file mechanism (config/.setup_complete) prevents re-triggering
    • Unauthenticated setup API (only available on first run, returns 403 after completion)
  • Added calendar view with Bangumi.tv broadcast schedule integration
  • Added downloader API and management interface
  • Full async migration
    • Database layer async support (aiosqlite) for non-blocking I/O in Passkey operations
    • UserDatabase supports both sync/async modes for backward compatibility
    • Database context manager supports both with (sync) and async with (async)
    • RSS engine, downloader, checker, and parser fully converted to async
    • Network requests migrated from requests to httpx (AsyncClient)
  • Backend migrated to uv package manager (pyproject.toml + uv.lock)
  • Server startup uses background tasks to avoid blocking (fixes #891, #929)
  • Database migration auto-fills NULL values with model defaults
  • Database adds needs_review and needs_review_reason fields for offset detection

Performance

  • Shared HTTP client connection pool, reuses TCP/SSL connections
  • RSS refresh now concurrent (asyncio.gather), ~10x faster with multiple sources
  • Torrent file download now concurrent, ~5x faster for multiple torrents
  • Rename module concurrent file list fetching, ~20x faster
  • Notification sending now concurrent, removed 2-second hardcoded delay
  • Added TMDB and Mikan parser result caching to avoid duplicate API calls
  • Database indexes added for Torrent.url, Torrent.rss_id, Bangumi.title_raw, Bangumi.deleted, RSSItem.url
  • RSS batch enable/disable uses single transaction instead of per-item commits
  • Pre-compiled regex patterns for torrent name parsing and filter matching
  • SeasonCollector created outside loops, reuses single authentication
  • RSS parsing deduplication changed from O(n²) list lookup to O(1) set lookup
  • Episode/SeasonInfo dataclasses use __slots__ for reduced memory footprint

Changes

  • Upgraded WebAuthn dependency to py_webauthn 2.7.0
  • _get_webauthn_from_request prioritizes browser Origin header, fixing verification issues in cross-port development environments
  • auth_user and update_user_info converted to async functions
  • TitleParser.tmdb_parser converted to async function
  • RSSEngine methods fully async (pull_rss, refresh_rss, download_bangumi, add_rss)
  • Checker.check_downloader converted to async function
  • ProgramStatus migrated from threading to asyncio (Event, Lock)

Bugfixes

  • Fixed downloader connection check with max retry limit
  • Fixed transient network errors when adding torrents with retry logic
  • Fixed multiple issues in search and subscription flow
  • Improved torrent fetch reliability and error handling
  • Fixed aaguid type error (now str in py_webauthn 2.7.0, no longer bytes)
  • Fixed missing credential_backup_eligible field (replaced with credential_device_type)
  • Fixed verify_authentication_response receiving invalid credential_id parameter causing TypeError
  • Fixed program startup blocking the server (fixes #891, #929, #886, #917, #946)
  • Fixed search interface export not matching component expectations
  • Fixed poster endpoint path check incorrectly intercepting all requests (fixes #933, #934)
  • Fixed OpenAI parser security issue
  • Fixed database tests using async sessions with sync code mismatch
  • Fixed config field conflicts when upgrading from 3.1.x to 3.2 causing settings loss (fixes #956)
    • program.sleep_time / program.times auto-migrated to rss_time / rename_time
    • Removed deprecated rss_parser fields (type, custom_url, token, enable_tmdb)
    • Fixed ENV_TO_ATTR environment variable mapping pointing to non-existent model fields
    • Fixed DEFAULT_SETTINGS inconsistency with current config model
  • Fixed version upgrade migration logic errors (all upgrades calling 3.0→3.1 migration)
    • Added version-aware migration dispatch based on source version
    • Added from_31_to_32() migration function for database schema changes

Frontend

Features

  • Complete UI design system redesign
    • Unified design tokens (colors, fonts, spacing, shadows, animations)
    • Light/dark theme toggle support
    • Comprehensive accessibility support (ARIA, keyboard navigation, focus management)
    • Responsive layout for mobile devices
  • Added first-run setup wizard page
    • Multi-step wizard component (progress bar + step navigation)
    • Route guard auto-detection and redirect to setup page
    • Downloader/RSS/notification connection test feedback
    • Chinese and English i18n support
  • Added Passkey management panel (settings page)
    • WebAuthn browser support detection
    • Automatic device name identification
    • Passkey list display and deletion
  • Added Passkey fingerprint login button on login page (supports usernameless login)
  • Added calendar view page
  • Added downloader management page
  • Added Bangumi card hover overlay (showing title and tags)
  • Added resolvePosterUrl utility function for unified external URL and local path handling (fixes #934)
  • Redesigned search panel with modal and filter system
    • Added filter section supporting fansub group, resolution, subtitle type, and season filtering
    • Multi-select filters with smart disable for incompatible options (grayed out)
    • Result item tags changed to non-clickable colored pill style
    • Unified tag styling (pill shape, 12px font)
    • Standardized tag values (resolution: FHD/HD/4K, subtitles: CHS/CHT/Dual)
    • Filter categories and result variants support expand/collapse
    • Poster height auto-matches 4 rows of variant items (168px)
    • Click outside modal to auto-close
  • Redesigned login panel with modern glassmorphism style
  • Added log level filter in log view
  • Redesigned LLM settings panel (fixes #938)
  • Redesigned settings, downloader, player, and log page styles
  • Added search provider settings panel
    • View, add, edit, delete search sources in UI
    • Default sources (mikan, nyaa, dmhy) cannot be deleted
    • URL template validation ensures %s placeholder
  • Added iOS-style notification badge system
    • Yellow badge + purple border for subscriptions needing review
    • Combined display support (e.g., ! | 2 for warning + multiple rules)
    • Yellow glow animation on cards needing attention
  • Edit modal warning banner with one-click auto-detect and dismiss
  • Rule selection modal highlights rules with warnings
  • Calendar page bangumi grouping: same anime with multiple rules merged, click to select specific rule
  • Bangumi list page collapsible "Archived" section
  • Bangumi list page skeleton loading animation
  • Rule editor episode offset field with "Auto Detect" button
  • Empty state on home page now includes "Add RSS Subscription" button to guide new users
  • Calendar page poster images now use lazy loading for better performance
  • Calendar page "Unknown Air Date" section separated into its own block for better visual rhythm
  • RSS management page connection status labels: green "Connected" when healthy, red "Error" with tooltip for details
  • New mobile-first responsive design
    • Three-tier breakpoint system: mobile (<640px), tablet (640-1023px), desktop (≥1024px)
    • Mobile bottom navigation bar (with icons and text labels)
    • Tablet mini sidebar (56px icon navigation)
    • Mobile popups automatically switch to bottom sheets
    • Pull-to-refresh support
    • Horizontal swipe container support
    • Mobile card list replacing data tables (RSS page)
    • CSS Grid responsive layout (Bangumi card grid)
    • Form labels stack vertically on mobile, full-width inputs
    • Touch targets minimum 44px, meeting accessibility standards
    • Safe area support (notched devices)
    • 100dvh dynamic viewport height (fixes mobile browser address bar issue)
    • viewport-fit=cover for full-sc...
Read more

🌙3.2.3-beta.1

28 Jan 07:25

Choose a tag to compare

🌙3.2.3-beta.1 Pre-release
Pre-release

[3.2] - 2025-01

Backend

Features

  • Added WebAuthn Passkey passwordless login support
    • Register, authenticate, and manage Passkey credentials
    • Multi-device credential backup detection (iCloud Keychain, etc.)
    • Clone attack protection (sign_count verification)
    • Authentication strategy pattern unifying password and Passkey login interfaces
    • Usernameless login support via discoverable credentials (resident keys)
  • Added season/episode offset auto-detection
    • Analyzes TMDB episode air dates to detect "virtual seasons" (e.g., Frieren S1 split into two parts)
    • Auto-identifies different parts when broadcast gap exceeds 6 months
    • Calculates episode offset (e.g., RSS shows S2E1 → TMDB S1E29)
    • Background scan thread automatically detects offset issues in existing subscriptions
    • New API endpoints: POST /bangumi/detect-offset, PATCH /bangumi/dismiss-review/{id}
  • Added bangumi archive functionality
    • Manual archive/unarchive support
    • Auto-archive completed series
    • New API endpoints: PATCH /bangumi/archive/{id}, PATCH /bangumi/unarchive/{id}, GET /bangumi/refresh/metadata
  • Added search provider configuration API
    • GET /search/provider/config - Get search provider config
    • PUT /search/provider/config - Update search provider config
  • Offset detection panel now shows suggested values (parsed season/episode and recommended offset)
  • Fixed season offset not being applied to download folder path
    • Setting season offset now auto-updates qBittorrent save path (e.g., Season 2Season 1)
    • RSS rule save paths also sync the update
  • Optimized episode offset suggestion logic
    • Simple season mismatch no longer suggests episode offset (only virtual seasons need it)
    • Improved prompt messages to clarify whether episode adjustment is needed
  • Added RSS connection status tracking
    • Records connection_status (healthy/error), last_checked_at, and last_error after each refresh
  • Added first-run setup wizard
    • 7-step guided configuration: account, downloader, RSS source, media path, notifications
    • Downloader connection test, RSS source validation
    • Optional steps can be skipped and configured later in settings
    • Sentinel file mechanism (config/.setup_complete) prevents re-triggering
    • Unauthenticated setup API (only available on first run, returns 403 after completion)
  • Added calendar view with Bangumi.tv broadcast schedule integration
  • Added downloader API and management interface
  • Full async migration
    • Database layer async support (aiosqlite) for non-blocking I/O in Passkey operations
    • UserDatabase supports both sync/async modes for backward compatibility
    • Database context manager supports both with (sync) and async with (async)
    • RSS engine, downloader, checker, and parser fully converted to async
    • Network requests migrated from requests to httpx (AsyncClient)
  • Backend migrated to uv package manager (pyproject.toml + uv.lock)
  • Server startup uses background tasks to avoid blocking (fixes #891, #929)
  • Database migration auto-fills NULL values with model defaults
  • Database adds needs_review and needs_review_reason fields for offset detection

Performance

  • Shared HTTP client connection pool, reuses TCP/SSL connections
  • RSS refresh now concurrent (asyncio.gather), ~10x faster with multiple sources
  • Torrent file download now concurrent, ~5x faster for multiple torrents
  • Rename module concurrent file list fetching, ~20x faster
  • Notification sending now concurrent, removed 2-second hardcoded delay
  • Added TMDB and Mikan parser result caching to avoid duplicate API calls
  • Database indexes added for Torrent.url, Torrent.rss_id, Bangumi.title_raw, Bangumi.deleted, RSSItem.url
  • RSS batch enable/disable uses single transaction instead of per-item commits
  • Pre-compiled regex patterns for torrent name parsing and filter matching
  • SeasonCollector created outside loops, reuses single authentication
  • RSS parsing deduplication changed from O(n²) list lookup to O(1) set lookup
  • Episode/SeasonInfo dataclasses use __slots__ for reduced memory footprint

Changes

  • Upgraded WebAuthn dependency to py_webauthn 2.7.0
  • _get_webauthn_from_request prioritizes browser Origin header, fixing verification issues in cross-port development environments
  • auth_user and update_user_info converted to async functions
  • TitleParser.tmdb_parser converted to async function
  • RSSEngine methods fully async (pull_rss, refresh_rss, download_bangumi, add_rss)
  • Checker.check_downloader converted to async function
  • ProgramStatus migrated from threading to asyncio (Event, Lock)

Bugfixes

  • Fixed downloader connection check with max retry limit
  • Fixed transient network errors when adding torrents with retry logic
  • Fixed multiple issues in search and subscription flow
  • Improved torrent fetch reliability and error handling
  • Fixed aaguid type error (now str in py_webauthn 2.7.0, no longer bytes)
  • Fixed missing credential_backup_eligible field (replaced with credential_device_type)
  • Fixed verify_authentication_response receiving invalid credential_id parameter causing TypeError
  • Fixed program startup blocking the server (fixes #891, #929, #886, #917, #946)
  • Fixed search interface export not matching component expectations
  • Fixed poster endpoint path check incorrectly intercepting all requests (fixes #933, #934)
  • Fixed OpenAI parser security issue
  • Fixed database tests using async sessions with sync code mismatch
  • Fixed config field conflicts when upgrading from 3.1.x to 3.2 causing settings loss (fixes #956)
    • program.sleep_time / program.times auto-migrated to rss_time / rename_time
    • Removed deprecated rss_parser fields (type, custom_url, token, enable_tmdb)
    • Fixed ENV_TO_ATTR environment variable mapping pointing to non-existent model fields
    • Fixed DEFAULT_SETTINGS inconsistency with current config model
  • Fixed version upgrade migration logic errors (all upgrades calling 3.0→3.1 migration)
    • Added version-aware migration dispatch based on source version
    • Added from_31_to_32() migration function for database schema changes

Frontend

Features

  • Complete UI design system redesign
    • Unified design tokens (colors, fonts, spacing, shadows, animations)
    • Light/dark theme toggle support
    • Comprehensive accessibility support (ARIA, keyboard navigation, focus management)
    • Responsive layout for mobile devices
  • Added first-run setup wizard page
    • Multi-step wizard component (progress bar + step navigation)
    • Route guard auto-detection and redirect to setup page
    • Downloader/RSS/notification connection test feedback
    • Chinese and English i18n support
  • Added Passkey management panel (settings page)
    • WebAuthn browser support detection
    • Automatic device name identification
    • Passkey list display and deletion
  • Added Passkey fingerprint login button on login page (supports usernameless login)
  • Added calendar view page
  • Added downloader management page
  • Added Bangumi card hover overlay (showing title and tags)
  • Added resolvePosterUrl utility function for unified external URL and local path handling (fixes #934)
  • Redesigned search panel with modal and filter system
    • Added filter section supporting fansub group, resolution, subtitle type, and season filtering
    • Multi-select filters with smart disable for incompatible options (grayed out)
    • Result item tags changed to non-clickable colored pill style
    • Unified tag styling (pill shape, 12px font)
    • Standardized tag values (resolution: FHD/HD/4K, subtitles: CHS/CHT/Dual)
    • Filter categories and result variants support expand/collapse
    • Poster height auto-matches 4 rows of variant items (168px)
    • Click outside modal to auto-close
  • Redesigned login panel with modern glassmorphism style
  • Added log level filter in log view
  • Redesigned LLM settings panel (fixes #938)
  • Redesigned settings, downloader, player, and log page styles
  • Added search provider settings panel
    • View, add, edit, delete search sources in UI
    • Default sources (mikan, nyaa, dmhy) cannot be deleted
    • URL template validation ensures %s placeholder
  • Added iOS-style notification badge system
    • Yellow badge + purple border for subscriptions needing review
    • Combined display support (e.g., ! | 2 for warning + multiple rules)
    • Yellow glow animation on cards needing attention
  • Edit modal warning banner with one-click auto-detect and dismiss
  • Rule selection modal highlights rules with warnings
  • Calendar page bangumi grouping: same anime with multiple rules merged, click to select specific rule
  • Bangumi list page collapsible "Archived" section
  • Bangumi list page skeleton loading animation
  • Rule editor episode offset field with "Auto Detect" button
  • Empty state on home page now includes "Add RSS Subscription" button to guide new users
  • Calendar page poster images now use lazy loading for better performance
  • Calendar page "Unknown Air Date" section separated into its own block for better visual rhythm
  • RSS management page connection status labels: green "Connected" when healthy, red "Error" with tooltip for details
  • New mobile-first responsive design
    • Three-tier breakpoint system: mobile (<640px), tablet (640-1023px), desktop (≥1024px)
    • Mobile bottom navigation bar (with icons and text labels)
    • Tablet mini sidebar (56px icon navigation)
    • Mobile popups automatically switch to bottom sheets
    • Pull-to-refresh support
    • Horizontal swipe container support
    • Mobile card list replacing data tables (RSS page)
    • CSS Grid responsive layout (Bangumi card grid)
    • Form labels stack vertically on mobile, full-width inputs
    • Touch targets minimum 44px, meeting accessibility standards
    • Safe area support (notched devices)
    • 100dvh dynamic viewport height (fixes mobile browser address bar issue)
    • viewport-fit=cover for full-sc...
Read more

🌟3.2.2

27 Jan 10:11
93eae80

Choose a tag to compare

Summary

  • fix(ci): Extract version number from PR title for proper Docker tagging and release creation

Test plan

  • CI workflow extracts version correctly from PR titles

🤖 Generated with Claude Code

3.2.1

27 Jan 09:57
48d890a

Choose a tag to compare

[3.2] - 2025-01

Backend

Features

  • Added WebAuthn Passkey passwordless login support
    • Register, authenticate, and manage Passkey credentials
    • Multi-device credential backup detection (iCloud Keychain, etc.)
    • Clone attack protection (sign_count verification)
    • Authentication strategy pattern unifying password and Passkey login interfaces
    • Usernameless login support via discoverable credentials (resident keys)
  • Added season/episode offset auto-detection
    • Analyzes TMDB episode air dates to detect "virtual seasons" (e.g., Frieren S1 split into two parts)
    • Auto-identifies different parts when broadcast gap exceeds 6 months
    • Calculates episode offset (e.g., RSS shows S2E1 → TMDB S1E29)
    • Background scan thread automatically detects offset issues in existing subscriptions
    • New API endpoints: POST /bangumi/detect-offset, PATCH /bangumi/dismiss-review/{id}
  • Added bangumi archive functionality
    • Manual archive/unarchive support
    • Auto-archive completed series
    • New API endpoints: PATCH /bangumi/archive/{id}, PATCH /bangumi/unarchive/{id}, GET /bangumi/refresh/metadata
  • Added search provider configuration API
    • GET /search/provider/config - Get search provider config
    • PUT /search/provider/config - Update search provider config
  • Offset detection panel now shows suggested values (parsed season/episode and recommended offset)
  • Fixed season offset not being applied to download folder path
    • Setting season offset now auto-updates qBittorrent save path (e.g., Season 2Season 1)
    • RSS rule save paths also sync the update
  • Optimized episode offset suggestion logic
    • Simple season mismatch no longer suggests episode offset (only virtual seasons need it)
    • Improved prompt messages to clarify whether episode adjustment is needed
  • Added RSS connection status tracking
    • Records connection_status (healthy/error), last_checked_at, and last_error after each refresh
  • Added first-run setup wizard
    • 7-step guided configuration: account, downloader, RSS source, media path, notifications
    • Downloader connection test, RSS source validation
    • Optional steps can be skipped and configured later in settings
    • Sentinel file mechanism (config/.setup_complete) prevents re-triggering
    • Unauthenticated setup API (only available on first run, returns 403 after completion)
  • Added calendar view with Bangumi.tv broadcast schedule integration
  • Added downloader API and management interface
  • Full async migration
    • Database layer async support (aiosqlite) for non-blocking I/O in Passkey operations
    • UserDatabase supports both sync/async modes for backward compatibility
    • Database context manager supports both with (sync) and async with (async)
    • RSS engine, downloader, checker, and parser fully converted to async
    • Network requests migrated from requests to httpx (AsyncClient)
  • Backend migrated to uv package manager (pyproject.toml + uv.lock)
  • Server startup uses background tasks to avoid blocking (fixes #891, #929)
  • Database migration auto-fills NULL values with model defaults
  • Database adds needs_review and needs_review_reason fields for offset detection

Performance

  • Shared HTTP client connection pool, reuses TCP/SSL connections
  • RSS refresh now concurrent (asyncio.gather), ~10x faster with multiple sources
  • Torrent file download now concurrent, ~5x faster for multiple torrents
  • Rename module concurrent file list fetching, ~20x faster
  • Notification sending now concurrent, removed 2-second hardcoded delay
  • Added TMDB and Mikan parser result caching to avoid duplicate API calls
  • Database indexes added for Torrent.url, Torrent.rss_id, Bangumi.title_raw, Bangumi.deleted, RSSItem.url
  • RSS batch enable/disable uses single transaction instead of per-item commits
  • Pre-compiled regex patterns for torrent name parsing and filter matching
  • SeasonCollector created outside loops, reuses single authentication
  • RSS parsing deduplication changed from O(n²) list lookup to O(1) set lookup
  • Episode/SeasonInfo dataclasses use __slots__ for reduced memory footprint

Changes

  • Upgraded WebAuthn dependency to py_webauthn 2.7.0
  • _get_webauthn_from_request prioritizes browser Origin header, fixing verification issues in cross-port development environments
  • auth_user and update_user_info converted to async functions
  • TitleParser.tmdb_parser converted to async function
  • RSSEngine methods fully async (pull_rss, refresh_rss, download_bangumi, add_rss)
  • Checker.check_downloader converted to async function
  • ProgramStatus migrated from threading to asyncio (Event, Lock)

Bugfixes

  • Fixed downloader connection check with max retry limit
  • Fixed transient network errors when adding torrents with retry logic
  • Fixed multiple issues in search and subscription flow
  • Improved torrent fetch reliability and error handling
  • Fixed aaguid type error (now str in py_webauthn 2.7.0, no longer bytes)
  • Fixed missing credential_backup_eligible field (replaced with credential_device_type)
  • Fixed verify_authentication_response receiving invalid credential_id parameter causing TypeError
  • Fixed program startup blocking the server (fixes #891, #929, #886, #917, #946)
  • Fixed search interface export not matching component expectations
  • Fixed poster endpoint path check incorrectly intercepting all requests (fixes #933, #934)
  • Fixed OpenAI parser security issue
  • Fixed database tests using async sessions with sync code mismatch
  • Fixed config field conflicts when upgrading from 3.1.x to 3.2 causing settings loss (fixes #956)
    • program.sleep_time / program.times auto-migrated to rss_time / rename_time
    • Removed deprecated rss_parser fields (type, custom_url, token, enable_tmdb)
    • Fixed ENV_TO_ATTR environment variable mapping pointing to non-existent model fields
    • Fixed DEFAULT_SETTINGS inconsistency with current config model
  • Fixed version upgrade migration logic errors (all upgrades calling 3.0→3.1 migration)
    • Added version-aware migration dispatch based on source version
    • Added from_31_to_32() migration function for database schema changes

Frontend

Features

  • Complete UI design system redesign
    • Unified design tokens (colors, fonts, spacing, shadows, animations)
    • Light/dark theme toggle support
    • Comprehensive accessibility support (ARIA, keyboard navigation, focus management)
    • Responsive layout for mobile devices
  • Added first-run setup wizard page
    • Multi-step wizard component (progress bar + step navigation)
    • Route guard auto-detection and redirect to setup page
    • Downloader/RSS/notification connection test feedback
    • Chinese and English i18n support
  • Added Passkey management panel (settings page)
    • WebAuthn browser support detection
    • Automatic device name identification
    • Passkey list display and deletion
  • Added Passkey fingerprint login button on login page (supports usernameless login)
  • Added calendar view page
  • Added downloader management page
  • Added Bangumi card hover overlay (showing title and tags)
  • Added resolvePosterUrl utility function for unified external URL and local path handling (fixes #934)
  • Redesigned search panel with modal and filter system
    • Added filter section supporting fansub group, resolution, subtitle type, and season filtering
    • Multi-select filters with smart disable for incompatible options (grayed out)
    • Result item tags changed to non-clickable colored pill style
    • Unified tag styling (pill shape, 12px font)
    • Standardized tag values (resolution: FHD/HD/4K, subtitles: CHS/CHT/Dual)
    • Filter categories and result variants support expand/collapse
    • Poster height auto-matches 4 rows of variant items (168px)
    • Click outside modal to auto-close
  • Redesigned login panel with modern glassmorphism style
  • Added log level filter in log view
  • Redesigned LLM settings panel (fixes #938)
  • Redesigned settings, downloader, player, and log page styles
  • Added search provider settings panel
    • View, add, edit, delete search sources in UI
    • Default sources (mikan, nyaa, dmhy) cannot be deleted
    • URL template validation ensures %s placeholder
  • Added iOS-style notification badge system
    • Yellow badge + purple border for subscriptions needing review
    • Combined display support (e.g., ! | 2 for warning + multiple rules)
    • Yellow glow animation on cards needing attention
  • Edit modal warning banner with one-click auto-detect and dismiss
  • Rule selection modal highlights rules with warnings
  • Calendar page bangumi grouping: same anime with multiple rules merged, click to select specific rule
  • Bangumi list page collapsible "Archived" section
  • Bangumi list page skeleton loading animation
  • Rule editor episode offset field with "Auto Detect" button
  • Empty state on home page now includes "Add RSS Subscription" button to guide new users
  • Calendar page poster images now use lazy loading for better performance
  • Calendar page "Unknown Air Date" section separated into its own block for better visual rhythm
  • RSS management page connection status labels: green "Connected" when healthy, red "Error" with tooltip for details
  • New mobile-first responsive design
    • Three-tier breakpoint system: mobile (<640px), tablet (640-1023px), desktop (≥1024px)
    • Mobile bottom navigation bar (with icons and text labels)
    • Tablet mini sidebar (56px icon navigation)
    • Mobile popups automatically switch to bottom sheets
    • Pull-to-refresh support
    • Horizontal swipe container support
    • Mobile card list replacing data tables (RSS page)
    • CSS Grid responsive layout (Bangumi card grid)
    • Form labels stack vertically on mobile, full-width inputs
    • Touch targets minimum 44px, meeting accessibility standards
    • Safe area support (notched devices)
    • 100dvh dynamic viewport height (fixes mobile browser address bar issue)
    • viewport-fit=cover for full-sc...
Read more

🌟3.2.0

26 Jan 20:10
eda98db

Choose a tag to compare

AutoBangumi 3.2.0

主要新功能 / Key Features

🎨 全新 UI 设计 / UI Redesign

  • 现代化界面设计,优化视觉体验
  • 深色模式支持,自动跟随系统设置
  • 全新移动端适配,支持手势操作
  • 骨架屏加载动画,提升加载体验
  • 统一的设计系统:圆角、阴影、过渡动画

🔍 搜索面板重新设计 / Search Panel Redesign

  • 新增筛选区域,支持按字幕组、分辨率、字幕类型、季度分类筛选
  • 多选筛选器,智能禁用不兼容的选项
  • 结果项标签改为彩色药丸样式,统一视觉风格
  • 标签值标准化(分辨率:FHD/HD/4K,字幕:简/繁/双语)
  • 筛选分类和结果变体支持展开/收起
  • 点击弹窗外部自动关闭

📱 移动端优化 / Mobile Interface

  • 响应式布局,完美适配手机和平板
  • 底部导航栏,便于单手操作
  • 下拉刷新、滑动手势支持
  • 底部弹出式表单,优化触摸体验

🧙 设置向导 / Setup Wizard

  • 首次使用引导式配置流程
  • 分步设置:下载器、RSS 源、通知推送
  • 配置验证和连接测试
  • 一键完成初始化

🗄️ 番剧归档 / Bangumi Archive

  • 支持手动归档/取消归档番剧
  • 已完结番剧自动归档
  • 番剧列表页新增可折叠的「已归档」分区

🔢 季度/集数偏移自动检测 / Season/Episode Offset Auto-Detection

  • 通过分析 TMDB 剧集播出日期检测「虚拟季度」(如芙莉莲第一季分两部分播出)
  • 自动计算集数偏移量(如 RSS 显示 S2E1 → TMDB S1E29)
  • 规则编辑器新增「自动检测」按钮和建议值显示
  • iOS 风格通知角标提示需要检查的订阅
  • 季度偏移自动应用到下载文件夹路径

🏷️ 标题别名系统 / Title Alias System

  • 处理字幕组季中改名问题(如 "LoliHouse" → "LoliHouse&动漫国")
  • 自动检测语义重复并合并为别名
  • 避免同一番剧因命名变化产生重复规则

📥 种子管理 / Torrent Management

  • 全新下载器页面:按番剧分组显示种子
  • 支持批量选择、暂停、恢复、删除操作
  • 实时显示下载进度、速度、ETA、做种数
  • 显示「番剧名 / Season」格式便于识别

⚙️ 搜索源配置 / Search Provider Config

  • 新增搜索源设置面板
  • 支持查看、添加、编辑、删除搜索源
  • 默认搜索源(mikan、nyaa、dmhy)不可删除
  • URL 模板验证,确保包含 %s 占位符

📅 日历页分组 / Calendar Grouping

  • 相同番剧的多个规则合并显示
  • 点击可选择具体规则编辑
  • 海报图片懒加载,提升性能
  • 「未知播出日」独立为单独区块

📡 RSS 连接状态追踪 / RSS Connection Status

  • 每次刷新后记录连接状态(healthy/error)
  • RSS 管理页面显示连接状态标签和错误详情

⚡ 性能优化 / Performance

Backend

  • HTTP 连接池:复用 TCP/SSL 连接,减少握手开销
  • 并发处理
    • RSS 刷新并发拉取(速度提升 ~10x)
    • 种子下载并发获取(速度提升 ~5x)
    • 重命名模块并发处理(速度提升 ~20x)
    • 通知发送并发执行
  • 缓存优化:TMDB/Mikan 解析结果内存缓存,番剧列表 5 分钟 TTL 缓存
  • 数据库索引:为常用查询字段添加索引
  • 正则预编译:避免运行时重复编译

Frontend

  • 下载器 store 使用 shallowRef 优化大数组
  • 表格列定义改为 computed
  • 移除重复 API 调用和不必要的延迟
  • 内存泄漏修复(useIntervalFn 替代 setInterval

🐛 Bug 修复 / Bug Fixes

Backend

  • 修复 add_all() 缺少去重检查导致重复添加番剧规则
  • 修复从 3.1.x 升级后数据库缺少 air_weekday 列的问题
  • 修复重命名模块中 'dict' object has no attribute 'files' 错误
  • 修复 disable_rule() 未清除缓存导致匹配异常
  • 修复季度偏移未应用到下载文件夹路径的问题
  • 新增 schema_version 表确保数据库迁移可靠执行

Frontend

  • 修复弹窗 z-index 层级问题
  • 修复下载器页面仅显示季度文件夹名的问题
  • 修复 iOS Safari 输入框缩放和键盘问题
  • 修复空搜索和关闭弹窗时取消搜索
  • 修复移动端设置页面水平溢出问题
  • 修复移动端顶栏布局和搜索弹窗关闭按钮被截断问题
  • 改善无障碍体验:44px 触摸区域、焦点状态、aria-label
  • 修复多处类型安全问题

🧪 测试 / Tests

新增全面的测试套件,覆盖核心业务逻辑:

  • RSS 引擎全流程测试
  • 下载客户端测试
  • 重命名器测试
  • 认证/通知/搜索/配置测试
  • 标题别名系统测试
  • 集成测试

📝 API 变更 / API Changes

新增端点:

  • PATCH /bangumi/archive/{id} - 归档番剧
  • PATCH /bangumi/unarchive/{id} - 取消归档
  • GET /bangumi/refresh/metadata - 刷新元数据
  • GET /bangumi/suggest-offset/{id} - 获取建议的剧集偏移量
  • POST /bangumi/detect-offset - 检测季度/集数偏移
  • PATCH /bangumi/dismiss-review/{id} - 忽略偏移检查提醒
  • GET /search/provider/config - 获取搜索源配置
  • PUT /search/provider/config - 更新搜索源配置

📦 数据库迁移 / Database Migrations

  • v2: rssitem 表添加连接状态字段
  • v4: bangumi 表添加 archived 字段
  • v8: bangumi 表添加 title_aliases 字段
  • v9: bangumi 表添加 needs_reviewneeds_review_reason 字段
  • 新增 schema_version 表追踪迁移版本

🤖 Generated with Claude Code

🌙3.2.0-beta.13

26 Jan 15:03

Choose a tag to compare

🌙3.2.0-beta.13 Pre-release
Pre-release

Changes since 3.2.0-beta.12

Features

  • feat(database): add title alias system for mid-season naming changes

Fixes

  • fix(webui): prevent empty search and cancel search on modal close
  • fix(webui): fix iOS Safari input zoom and keyboard issues
  • fix(error-handling): replace bare except clauses with specific exceptions

Performance

  • perf(database): optimize N+1 queries and add caching

Documentation

  • docs(dev): add database developer guide

Full Changelog: 3.2.0-beta.12...3.2.0-beta.13

🌙3.2.0-beta.12

26 Jan 13:10

Choose a tag to compare

🌙3.2.0-beta.12 Pre-release
Pre-release

[3.2] - 2025-01

Backend

Features

  • Added WebAuthn Passkey passwordless login support
    • Register, authenticate, and manage Passkey credentials
    • Multi-device credential backup detection (iCloud Keychain, etc.)
    • Clone attack protection (sign_count verification)
    • Authentication strategy pattern unifying password and Passkey login interfaces
    • Usernameless login support via discoverable credentials (resident keys)
  • Added season/episode offset auto-detection
    • Analyzes TMDB episode air dates to detect "virtual seasons" (e.g., Frieren S1 split into two parts)
    • Auto-identifies different parts when broadcast gap exceeds 6 months
    • Calculates episode offset (e.g., RSS shows S2E1 → TMDB S1E29)
    • Background scan thread automatically detects offset issues in existing subscriptions
    • New API endpoints: POST /bangumi/detect-offset, PATCH /bangumi/dismiss-review/{id}
  • Added bangumi archive functionality
    • Manual archive/unarchive support
    • Auto-archive completed series
    • New API endpoints: PATCH /bangumi/archive/{id}, PATCH /bangumi/unarchive/{id}, GET /bangumi/refresh/metadata
  • Added search provider configuration API
    • GET /search/provider/config - Get search provider config
    • PUT /search/provider/config - Update search provider config
  • Added RSS connection status tracking
    • Records connection_status (healthy/error), last_checked_at, and last_error after each refresh
  • Added first-run setup wizard
    • 7-step guided configuration: account, downloader, RSS source, media path, notifications
    • Downloader connection test, RSS source validation
    • Optional steps can be skipped and configured later in settings
    • Sentinel file mechanism (config/.setup_complete) prevents re-triggering
    • Unauthenticated setup API (only available on first run, returns 403 after completion)
  • Added calendar view with Bangumi.tv broadcast schedule integration
  • Added downloader API and management interface
  • Full async migration
    • Database layer async support (aiosqlite) for non-blocking I/O in Passkey operations
    • UserDatabase supports both sync/async modes for backward compatibility
    • Database context manager supports both with (sync) and async with (async)
    • RSS engine, downloader, checker, and parser fully converted to async
    • Network requests migrated from requests to httpx (AsyncClient)
  • Backend migrated to uv package manager (pyproject.toml + uv.lock)
  • Server startup uses background tasks to avoid blocking (fixes #891, #929)
  • Database migration auto-fills NULL values with model defaults
  • Database adds needs_review and needs_review_reason fields for offset detection

Performance

  • Shared HTTP client connection pool, reuses TCP/SSL connections
  • RSS refresh now concurrent (asyncio.gather), ~10x faster with multiple sources
  • Torrent file download now concurrent, ~5x faster for multiple torrents
  • Rename module concurrent file list fetching, ~20x faster
  • Notification sending now concurrent, removed 2-second hardcoded delay
  • Added TMDB and Mikan parser result caching to avoid duplicate API calls
  • Database indexes added for Torrent.url, Torrent.rss_id, Bangumi.title_raw, Bangumi.deleted, RSSItem.url
  • RSS batch enable/disable uses single transaction instead of per-item commits
  • Pre-compiled regex patterns for torrent name parsing and filter matching
  • SeasonCollector created outside loops, reuses single authentication
  • RSS parsing deduplication changed from O(n²) list lookup to O(1) set lookup
  • Episode/SeasonInfo dataclasses use __slots__ for reduced memory footprint

Changes

  • Upgraded WebAuthn dependency to py_webauthn 2.7.0
  • _get_webauthn_from_request prioritizes browser Origin header, fixing verification issues in cross-port development environments
  • auth_user and update_user_info converted to async functions
  • TitleParser.tmdb_parser converted to async function
  • RSSEngine methods fully async (pull_rss, refresh_rss, download_bangumi, add_rss)
  • Checker.check_downloader converted to async function
  • ProgramStatus migrated from threading to asyncio (Event, Lock)

Bugfixes

  • Fixed downloader connection check with max retry limit
  • Fixed transient network errors when adding torrents with retry logic
  • Fixed multiple issues in search and subscription flow
  • Improved torrent fetch reliability and error handling
  • Fixed aaguid type error (now str in py_webauthn 2.7.0, no longer bytes)
  • Fixed missing credential_backup_eligible field (replaced with credential_device_type)
  • Fixed verify_authentication_response receiving invalid credential_id parameter causing TypeError
  • Fixed program startup blocking the server (fixes #891, #929, #886, #917, #946)
  • Fixed search interface export not matching component expectations
  • Fixed poster endpoint path check incorrectly intercepting all requests (fixes #933, #934)
  • Fixed OpenAI parser security issue
  • Fixed database tests using async sessions with sync code mismatch
  • Fixed config field conflicts when upgrading from 3.1.x to 3.2 causing settings loss (fixes #956)
    • program.sleep_time / program.times auto-migrated to rss_time / rename_time
    • Removed deprecated rss_parser fields (type, custom_url, token, enable_tmdb)
    • Fixed ENV_TO_ATTR environment variable mapping pointing to non-existent model fields
    • Fixed DEFAULT_SETTINGS inconsistency with current config model
  • Fixed version upgrade migration logic errors (all upgrades calling 3.0→3.1 migration)
    • Added version-aware migration dispatch based on source version
    • Added from_31_to_32() migration function for database schema changes

Frontend

Features

  • Complete UI design system redesign
    • Unified design tokens (colors, fonts, spacing, shadows, animations)
    • Light/dark theme toggle support
    • Comprehensive accessibility support (ARIA, keyboard navigation, focus management)
    • Responsive layout for mobile devices
  • Added first-run setup wizard page
    • Multi-step wizard component (progress bar + step navigation)
    • Route guard auto-detection and redirect to setup page
    • Downloader/RSS/notification connection test feedback
    • Chinese and English i18n support
  • Added Passkey management panel (settings page)
    • WebAuthn browser support detection
    • Automatic device name identification
    • Passkey list display and deletion
  • Added Passkey fingerprint login button on login page (supports usernameless login)
  • Added calendar view page
  • Added downloader management page
  • Added Bangumi card hover overlay (showing title and tags)
  • Added resolvePosterUrl utility function for unified external URL and local path handling (fixes #934)
  • Redesigned search panel with modal and filter system
  • Redesigned login panel with modern glassmorphism style
  • Added log level filter in log view
  • Redesigned LLM settings panel (fixes #938)
  • Redesigned settings, downloader, player, and log page styles
  • Added search provider settings panel
    • View, add, edit, delete search sources in UI
    • Default sources (mikan, nyaa, dmhy) cannot be deleted
    • URL template validation ensures %s placeholder
  • Added iOS-style notification badge system
    • Yellow badge + purple border for subscriptions needing review
    • Combined display support (e.g., ! | 2 for warning + multiple rules)
    • Yellow glow animation on cards needing attention
  • Edit modal warning banner with one-click auto-detect and dismiss
  • Rule selection modal highlights rules with warnings
  • Calendar page bangumi grouping: same anime with multiple rules merged, click to select specific rule
  • Bangumi list page collapsible "Archived" section
  • Bangumi list page skeleton loading animation
  • Rule editor episode offset field with "Auto Detect" button
  • RSS management page connection status labels: green "Connected" when healthy, red "Error" with tooltip for details
  • New mobile-first responsive design
    • Three-tier breakpoint system: mobile (<640px), tablet (640-1023px), desktop (≥1024px)
    • Mobile bottom navigation bar (with icons and text labels)
    • Tablet mini sidebar (56px icon navigation)
    • Mobile popups automatically switch to bottom sheets
    • Pull-to-refresh support
    • Horizontal swipe container support
    • Mobile card list replacing data tables (RSS page)
    • CSS Grid responsive layout (Bangumi card grid)
    • Form labels stack vertically on mobile, full-width inputs
    • Touch targets minimum 44px, meeting accessibility standards
    • Safe area support (notched devices)
    • 100dvh dynamic viewport height (fixes mobile browser address bar issue)
    • viewport-fit=cover for full-screen devices

New Components

  • ab-bottom-sheet — Touch-driven bottom sheet component (drag to close, max height limit)
  • ab-adaptive-modal — Adaptive modal (bottom sheet on mobile / centered dialog on desktop)
  • ab-pull-refresh — Pull-to-refresh wrapper component
  • ab-swipe-container — Horizontal swipe container (CSS scroll-snap)
  • ab-data-list — Mobile-friendly card list (replacing NDataTable)
  • ab-mobile-nav — Enhanced bottom navigation bar (icon + label + active indicator)
  • useSafeArea — Safe area composable

Performance

  • Downloader store uses shallowRef instead of ref to avoid deep reactive proxy on large arrays
  • Table column definitions moved to computed to avoid rebuilding on each render
  • RSS table columns separated from data, column config not rebuilt on data changes
  • Calendar page removed duplicate getAll() calls
  • ab-select watchEffect changed to watch, eliminates invalid emit on mount
  • useClipboard hoisted to store top level, avoids creating new instance on each copy()
  • setInterval replaced with useIntervalFn for automatic lifecycle management

Changes

  • Refactored search logic, removed rxjs dependency
  • Search store export refactored to match component expectations
  • Upgraded frontend dependencies
  • Breakpoint system expanded ...
Read more

🌙3.2.0-beta.9

25 Jan 18:32

Choose a tag to compare

🌙3.2.0-beta.9 Pre-release
Pre-release

[3.2] - 2025-01

Backend

Features

  • Added WebAuthn Passkey passwordless login support
    • Register, authenticate, and manage Passkey credentials
    • Multi-device credential backup detection (iCloud Keychain, etc.)
    • Clone attack protection (sign_count verification)
    • Authentication strategy pattern unifying password and Passkey login interfaces
    • Usernameless login support via discoverable credentials (resident keys)
  • Added first-run setup wizard
    • 7-step guided configuration: account, downloader, RSS source, media path, notifications
    • Downloader connection test, RSS source validation
    • Optional steps can be skipped and configured later in settings
    • Sentinel file mechanism (config/.setup_complete) prevents re-triggering
    • Unauthenticated setup API (only available on first run, returns 403 after completion)
  • Added calendar view with Bangumi.tv broadcast schedule integration
  • Added downloader API and management interface
  • Full async migration
    • Database layer async support (aiosqlite) for non-blocking I/O in Passkey operations
    • UserDatabase supports both sync/async modes for backward compatibility
    • Database context manager supports both with (sync) and async with (async)
    • RSS engine, downloader, checker, and parser fully converted to async
    • Network requests migrated from requests to httpx (AsyncClient)
  • Backend migrated to uv package manager (pyproject.toml + uv.lock)
  • Server startup uses background tasks to avoid blocking (fixes #891, #929)
  • Database migration auto-fills NULL values with model defaults

Changes

  • Upgraded WebAuthn dependency to py_webauthn 2.7.0
  • _get_webauthn_from_request prioritizes browser Origin header, fixing verification issues in cross-port development environments
  • auth_user and update_user_info converted to async functions
  • TitleParser.tmdb_parser converted to async function
  • RSSEngine methods fully async (pull_rss, refresh_rss, download_bangumi, add_rss)
  • Checker.check_downloader converted to async function
  • ProgramStatus migrated from threading to asyncio (Event, Lock)

Bugfixes

  • Fixed downloader connection check with max retry limit
  • Fixed transient network errors when adding torrents with retry logic
  • Fixed multiple issues in search and subscription flow
  • Improved torrent fetch reliability and error handling
  • Fixed aaguid type error (now str in py_webauthn 2.7.0, no longer bytes)
  • Fixed missing credential_backup_eligible field (replaced with credential_device_type)
  • Fixed verify_authentication_response receiving invalid credential_id parameter causing TypeError
  • Fixed program startup blocking the server (fixes #891, #929, #886, #917, #946)
  • Fixed search interface export not matching component expectations
  • Fixed poster endpoint path check incorrectly intercepting all requests (fixes #933, #934)
  • Fixed OpenAI parser security issue
  • Fixed database tests using async sessions with sync code mismatch
  • Fixed config field conflicts when upgrading from 3.1.x to 3.2 causing settings loss (fixes #956)
    • program.sleep_time / program.times auto-migrated to rss_time / rename_time
    • Removed deprecated rss_parser fields (type, custom_url, token, enable_tmdb)
    • Fixed ENV_TO_ATTR environment variable mapping pointing to non-existent model fields
    • Fixed DEFAULT_SETTINGS inconsistency with current config model
  • Fixed version upgrade migration logic errors (all upgrades calling 3.0→3.1 migration)
    • Added version-aware migration dispatch based on source version
    • Added from_31_to_32() migration function for database schema changes

Frontend

Features

  • Complete UI design system redesign
    • Unified design tokens (colors, fonts, spacing, shadows, animations)
    • Light/dark theme toggle support
    • Comprehensive accessibility support (ARIA, keyboard navigation, focus management)
    • Responsive layout for mobile devices
  • Added first-run setup wizard page
    • Multi-step wizard component (progress bar + step navigation)
    • Route guard auto-detection and redirect to setup page
    • Downloader/RSS/notification connection test feedback
    • Chinese and English i18n support
  • Added Passkey management panel (settings page)
    • WebAuthn browser support detection
    • Automatic device name identification
    • Passkey list display and deletion
  • Added Passkey fingerprint login button on login page (supports usernameless login)
  • Added calendar view page
  • Added downloader management page
  • Added Bangumi card hover overlay (showing title and tags)
  • Added resolvePosterUrl utility function for unified external URL and local path handling (fixes #934)
  • Redesigned search panel with modal and filter system
  • Redesigned login panel with modern glassmorphism style
  • Added log level filter in log view
  • Redesigned LLM settings panel (fixes #938)
  • Redesigned settings, downloader, player, and log page styles
  • New mobile-first responsive design
    • Three-tier breakpoint system: mobile (<640px), tablet (640-1023px), desktop (≥1024px)
    • Mobile bottom navigation bar (with icons and text labels)
    • Tablet mini sidebar (56px icon navigation)
    • Mobile popups automatically switch to bottom sheets
    • Pull-to-refresh support
    • Horizontal swipe container support
    • Mobile card list replacing data tables (RSS page)
    • CSS Grid responsive layout (Bangumi card grid)
    • Form labels stack vertically on mobile, full-width inputs
    • Touch targets minimum 44px, meeting accessibility standards
    • Safe area support (notched devices)
    • 100dvh dynamic viewport height (fixes mobile browser address bar issue)
    • viewport-fit=cover for full-screen devices

New Components

  • ab-bottom-sheet — Touch-driven bottom sheet component (drag to close, max height limit)
  • ab-adaptive-modal — Adaptive modal (bottom sheet on mobile / centered dialog on desktop)
  • ab-pull-refresh — Pull-to-refresh wrapper component
  • ab-swipe-container — Horizontal swipe container (CSS scroll-snap)
  • ab-data-list — Mobile-friendly card list (replacing NDataTable)
  • ab-mobile-nav — Enhanced bottom navigation bar (icon + label + active indicator)
  • useSafeArea — Safe area composable

Changes

  • Refactored search logic, removed rxjs dependency
  • Search store export refactored to match component expectations
  • Upgraded frontend dependencies
  • Breakpoint system expanded from single 1024px to 640px + 1024px two-tier
  • useBreakpointQuery added isTablet, isMobileOrTablet, isTabletOrPC
  • media-query.vue added #tablet slot (falls back to #mobile)
  • UnoCSS added sm: 640px breakpoint
  • ab-input mobile full-width + increased touch target styling
  • Layout uses dvh units instead of vh, supports safe-area-inset
  • Fixed calendar page unknown column width
  • Unified action bar button sizes in downloader page

CI/Infrastructure

  • CI added build test on PR open (dev branch PRs to main auto-trigger build)
  • CI upgraded actions/upload-artifact and actions/download-artifact to v4
  • Docker build removed linux/arm/v7 platform (uv image doesn't support it)
  • Added CLAUDE.md development guide

🌙3.2.0-beta.7

25 Jan 10:53

Choose a tag to compare

🌙3.2.0-beta.7 Pre-release
Pre-release

[3.2] - 2025-01

Backend

Features

  • Added WebAuthn Passkey passwordless login support
    • Register, authenticate, and manage Passkey credentials
    • Multi-device credential backup detection (iCloud Keychain, etc.)
    • Clone attack protection (sign_count verification)
    • Authentication strategy pattern unifying password and Passkey login interfaces
  • Added first-run setup wizard
    • 7-step guided configuration: account, downloader, RSS source, media path, notifications
    • Downloader connection test, RSS source validation
    • Optional steps can be skipped and configured later in settings
    • Sentinel file mechanism (config/.setup_complete) prevents re-triggering
    • Unauthenticated setup API (only available on first run, returns 403 after completion)
  • Added calendar view with Bangumi.tv broadcast schedule integration
  • Added downloader API and management interface
  • Full async migration
    • Database layer async support (aiosqlite) for non-blocking I/O in Passkey operations
    • UserDatabase supports both sync/async modes for backward compatibility
    • Database context manager supports both with (sync) and async with (async)
    • RSS engine, downloader, checker, and parser fully converted to async
    • Network requests migrated from requests to httpx (AsyncClient)
  • Backend migrated to uv package manager (pyproject.toml + uv.lock)
  • Server startup uses background tasks to avoid blocking (fixes #891, #929)
  • Database migration auto-fills NULL values with model defaults

Changes

  • Upgraded WebAuthn dependency to py_webauthn 2.7.0
  • _get_webauthn_from_request prioritizes browser Origin header, fixing verification issues in cross-port development environments
  • auth_user and update_user_info converted to async functions
  • TitleParser.tmdb_parser converted to async function
  • RSSEngine methods fully async (pull_rss, refresh_rss, download_bangumi, add_rss)
  • Checker.check_downloader converted to async function
  • ProgramStatus migrated from threading to asyncio (Event, Lock)

Bugfixes

  • Fixed downloader connection check with max retry limit
  • Fixed transient network errors when adding torrents with retry logic
  • Fixed aaguid type error (now str in py_webauthn 2.7.0, no longer bytes)
  • Fixed missing credential_backup_eligible field (replaced with credential_device_type)
  • Fixed verify_authentication_response receiving invalid credential_id parameter causing TypeError
  • Fixed program startup blocking the server (fixes #891, #929, #886, #917, #946)
  • Fixed search interface export not matching component expectations
  • Fixed poster endpoint path check incorrectly intercepting all requests (fixes #933, #934)
  • Fixed OpenAI parser security issue
  • Fixed database tests using async sessions with sync code mismatch
  • Fixed config field conflicts when upgrading from 3.1.x to 3.2 causing settings loss (fixes #956)
    • program.sleep_time / program.times auto-migrated to rss_time / rename_time
    • Removed deprecated rss_parser fields (type, custom_url, token, enable_tmdb)
    • Fixed ENV_TO_ATTR environment variable mapping pointing to non-existent model fields
    • Fixed DEFAULT_SETTINGS inconsistency with current config model
  • Fixed version upgrade migration logic errors (all upgrades calling 3.0→3.1 migration)
    • Added version-aware migration dispatch based on source version
    • Added from_31_to_32() migration function for database schema changes

Frontend

Features

  • Complete UI design system redesign
    • Unified design tokens (colors, fonts, spacing, shadows, animations)
    • Light/dark theme toggle support
    • Comprehensive accessibility support (ARIA, keyboard navigation, focus management)
    • Responsive layout for mobile devices
  • Added first-run setup wizard page
    • Multi-step wizard component (progress bar + step navigation)
    • Route guard auto-detection and redirect to setup page
    • Downloader/RSS/notification connection test feedback
    • Chinese and English i18n support
  • Added Passkey management panel (settings page)
    • WebAuthn browser support detection
    • Automatic device name identification
    • Passkey list display and deletion
  • Added Passkey fingerprint login button on login page
  • Added calendar view page
  • Added downloader management page
  • Added Bangumi card hover overlay (showing title and tags)
  • Added resolvePosterUrl utility function for unified external URL and local path handling (fixes #934)
  • Redesigned search panel with modal and filter system
  • Redesigned login panel with modern glassmorphism style
  • Added log level filter in log view
  • Redesigned LLM settings panel (fixes #938)
  • Redesigned settings, downloader, player, and log page styles
  • New mobile-first responsive design
    • Three-tier breakpoint system: mobile (<640px), tablet (640-1023px), desktop (≥1024px)
    • Mobile bottom navigation bar (with icons and text labels)
    • Tablet mini sidebar (56px icon navigation)
    • Mobile popups automatically switch to bottom sheets
    • Pull-to-refresh support
    • Horizontal swipe container support
    • Mobile card list replacing data tables (RSS page)
    • CSS Grid responsive layout (Bangumi card grid)
    • Form labels stack vertically on mobile, full-width inputs
    • Touch targets minimum 44px, meeting accessibility standards
    • Safe area support (notched devices)
    • 100dvh dynamic viewport height (fixes mobile browser address bar issue)
    • viewport-fit=cover for full-screen devices

New Components

  • ab-bottom-sheet — Touch-driven bottom sheet component (drag to close, max height limit)
  • ab-adaptive-modal — Adaptive modal (bottom sheet on mobile / centered dialog on desktop)
  • ab-pull-refresh — Pull-to-refresh wrapper component
  • ab-swipe-container — Horizontal swipe container (CSS scroll-snap)
  • ab-data-list — Mobile-friendly card list (replacing NDataTable)
  • ab-mobile-nav — Enhanced bottom navigation bar (icon + label + active indicator)
  • useSafeArea — Safe area composable

Changes

  • Refactored search logic, removed rxjs dependency
  • Search store export refactored to match component expectations
  • Upgraded frontend dependencies
  • Breakpoint system expanded from single 1024px to 640px + 1024px two-tier
  • useBreakpointQuery added isTablet, isMobileOrTablet, isTabletOrPC
  • media-query.vue added #tablet slot (falls back to #mobile)
  • UnoCSS added sm: 640px breakpoint
  • ab-input mobile full-width + increased touch target styling
  • Layout uses dvh units instead of vh, supports safe-area-inset
  • Fixed calendar page unknown column width
  • Unified action bar button sizes in downloader page

CI/Infrastructure

  • CI added build test on PR open (dev branch PRs to main auto-trigger build)
  • CI upgraded actions/upload-artifact and actions/download-artifact to v4
  • Docker build removed linux/arm/v7 platform (uv image doesn't support it)
  • Added CLAUDE.md development guide