Skip to content

Release#436

Merged
dialmaster merged 51 commits intomainfrom
dev
Feb 16, 2026
Merged

Release#436
dialmaster merged 51 commits intomainfrom
dev

Conversation

@dialmaster
Copy link
Collaborator

@dialmaster dialmaster commented Feb 16, 2026

This release introduces two major features along with infrastructure improvements and bug fixes:

Content Rating System

  • Add content ratings (TV-Y, TV-G, TV-PG, TV-14, TV-MA, etc.) to videos with support for per-channel default ratings and per-video overrides
  • Embed ratings into MP4 metadata via AtomicParsley (iTunEXTC atom) for native Plex recognition
  • Extract and normalize age-limit ratings from YouTube metadata automatically
  • Backfill script (scripts/backfill-ratings.js) for applying ratings to existing libraries

Vite Migration

  • Migrate frontend build toolchain from Create React App to Vite for faster builds and modern tooling
  • Add SWC compiler integration and update TypeScript to 5.9.3
  • Refactor test infrastructure with new locationUtils for robust window.location mocking
  • Add cache-control headers for API responses and static assets

Infrastructure & DevOps

  • Add --arm and --external-db flags to start.sh for ARM architecture and external database support
  • New docker-compose.dev.yml for improved development workflow
  • Fix temp path permissions in Docker (permission error in channel downloads #426) using configurable temp directory for yt-dlp
  • Add option for original date (year) metadata in downloads
  • CI/CD improvements for Claude Code review workflow

Documentation

  • Enhanced CONTRIBUTING.md with PR guidelines and expectations
  • Updated DEVELOPMENT.md and USAGE_GUIDE.md with Vite, content ratings, and backfill documentation

dialmaster and others added 30 commits January 31, 2026 13:37
fix(ci): grant gh CLI permissions to Claude Code workflow
…uidelines

docs: PR guidelines / expectations CONTRIBUTING.md
- Changed project setup from Create React App to Vite for improved performance.
- Updated dependencies including @types/node and added new devDependencies for Vite and SWC.
- Refactored test files to mock window.location and localStorage for better isolation.
- Introduced a redirect function in LocalLogin component to handle navigation.
- Updated WebSocketProvider to construct WebSocket URLs dynamically based on the environment.
- Enhanced UrlInput component to clear input conditionally based on validation results.
- Added new test cases to ensure proper functionality of the refactored components.
…ontrol, prior to refactor around cache-control
- Updated TypeScript version in client/package.json and package.json to 5.9.3.
- Deleted unused index.html file from client/public.
- Removed test-location.mjs as it was no longer needed.
- Adjusted Vite configuration by removing the rewrite rule for WebSocket paths.
fix:Vite dev server port align with historical and prod port.  Update…
…v to use this same endpoint. Updated documentation to reflect.
docs: fix Vite dev server port in documentation [skip ci]
Use configurable temp path to fix permission errors on Docker

- Replace hardcoded '/tmp' with tempPathManager.getTempBasePath() across all
  yt-dlp spawn calls (channelModule, downloadExecutor, ytDlpRunner, ytdlpModule,
  videoDownloadPostProcessFiles)
- Add --paths temp: argument to yt-dlp commands via new buildTempPathArgs()
  method, redirecting yt-dlp's internal temp files to writable staging directory
- Use lazy loading for tempPathManager in ytdlpModule to avoid circular deps
- Update tests to mock tempPathManager and verify TMPDIR is set correctly
- Add explicit instruction to only use gh commands in review prompt
- Prohibit running tests, npm commands, or other shell commands
- Remove misleading "branch is already checked out" text that encouraged
  local command execution
dialmaster and others added 21 commits February 8, 2026 16:48
…hannel-downloads

fix(#426): use configurable tmp path
- Refactor SubFolderChip to use Chip component for better UI consistency.
- Add RatingBadge component to ChannelPage for displaying default ratings.
- Integrate RatingBadge in ChannelSettingsDialog for rating selection.
- Update ChannelVideos to handle rating settings and pass them to dialogs.
- Enhance VideoCard and VideoListItem to show normalized ratings with sources.
- Modify VideoTableView to include a column for content ratings.
- Extend DownloadSettingsDialog to allow manual rating overrides.
- Update types to include rating in DownloadSettings.
- Adjust channelModule to parse and apply ratings from metadata.
- Implement rating handling in downloadExecutor and videoMetadataProcessor.
- Ensure effective rating determination in videoDownloadPostProcessFiles.
- Switch from ffmpeg temp-file approach to AtomicParsley for in-place
  MP4 metadata embedding (iTunEXTC atom), which Plex reads natively
- Remove rating columns from channelvideo model/migration; ratings
  live in .info.json files and Videos table
- Centralize rating validation into ratingMapper (single source of
  truth for valid ratings, NOT_RATED constant, iTunEXTC mapping)
- Replace console.log with structured logger in post-process module
- Add error/loading states to rating UI, show "Unrated" indicator
- Add unit tests for ChangeRatingDialog, RatingBadge, VideoActionsDropdown
- Fix TypeScript types (remove `any` casts in ChannelSettingsDialog)
@github-actions
Copy link
Contributor

📊 Test Coverage Report

Backend Coverage

Type Coverage Status
Lines 79.45% 🟡
Statements 79.28% 🟡
Functions 80.10% 🟢
Branches 72.68% 🟡

Frontend Coverage

Type Coverage Status
Lines 87.21% 🟢
Statements 86.51% 🟢
Functions 80.43% 🟢
Branches 81.50% 🟢

Coverage Requirements

  • Minimum threshold: 70% line coverage
  • Backend: ✅ Passes
  • Frontend: ✅ Passes

Coverage report generated for commit e671de3

@dialmaster dialmaster merged commit a294fcf into main Feb 16, 2026
5 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants