All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
1.0.0 - 2026-01-31
- Native PeerTube theme integration: replaced custom button styles with native PeerTube classes (
peertube-button,primary-button,secondary-button,danger-button) - CSS variables for colors: replaced all hardcoded colors with PeerTube theme CSS variables (
--primary,--fg,--green,--red,--input-bg,--bg-secondary-*) so the plugin follows the instance theme in both light and dark modes
0.5.0 - 2026-01-31
- HLS regeneration crash: FFmpeg produces
output.m4swith-hls_segment_type fmp4, notoutput.mp4;copyFilefailed with ENOENT - Double-cutting on retry: when HLS regeneration failed after a successful cut, retries re-cut an already-shortened file; worker now tracks
cut_completedflag and skips cuts on retry - Processed video check was fragile: replaced indirect queue
status = 'done'check with explicitsegments_removedboolean on the mapping table
- Worker split into two phases: phase 1 (FFmpeg cuts, skipped if
cut_completed), phase 2 (HLS metadata regeneration, always retried) - Segments endpoint checks
segments_removedon the mapping instead of querying the processing queue - Dashboard info note explains that permanent removal cuts all segment types regardless of category settings
- Documentation clarifies: category checkboxes control client-side skip only; FFmpeg removal cuts all segment types
0.4.0 - 2026-01-31
- Category settings ignored: settings were registered but never read; segments endpoint now filters by enabled categories
- SponsorBlock API only returning sponsors: all API calls now include
categoriesparameter to fetch all segment types - Admin dashboard not rendering: no longer depends on
html-type setting; injects its own container into the settings page - Orphaned data on video deletion: added
action:api.video.deletedhook to clean up mappings, segments, and queue entries
- Process button works in any mode: the worker always processes the queue; manual Process bypasses the mode setting
- Mode description updated: skip mode is default, remove mode auto-queues on import; Process button always available
- Video column in admin table shows video title with link instead of truncated UUID
- Admin buttons have tooltip descriptions (hover to see what they do)
- Dashboard appears below the settings form (after "Update plugin settings" button)
- FFmpeg segment removal (
server/ffmpeg.js): hard removal of sponsor segments from video files usingffmpeg -c copy(no re-encoding) - Background worker in
main.js: 30s polling, supports retries (3 max) withFOR UPDATE SKIP LOCKED POST /process/:videoUuidandPOST /process-allroutesstorage_pathsetting: configurable PeerTube storage directory- Admin dashboard with stats, mappings table, and action buttons
- Periodic sync with configurable interval
- Scan Imports for existing YouTube videos
0.3.0 - 2026-01-31
- Video import hook: use
params.videoinstead ofvideoImport.video(PeerTube uses uppercaseVideoin Sequelize)
- Added authentication checks on
POST /sync/:videoUuidandGET /mapping/:videoUuidroutes - Added SSRF protection (
validateApiUrl) rejecting private IPs and non-HTTPS URLs - Replaced
innerHTMLwith safe DOM manipulation (textContent+createElement) - Added SponsorBlock API response validation (
validateSegmenthelper) - Wrapped all delete/insert segment operations in database transactions
- Added UUID validation on all route params accepting
:videoUuid - Added path traversal protection in
ffmpeg.jsfile path resolution - Added in-memory token-bucket rate limiter on
GET /segmentsendpoint - Made
api_urlsetting private to hide it from unauthenticated users
0.2.1 - 2026-01-31
- Switched all URLs from GitLab to GitHub repository
0.2.0 - 2026-01-31
- Initial public release with core functionality
0.1.0 - 2026-01-31
- Initial plugin skeleton
- YouTube ID extraction from import URLs
- SponsorBlock API integration
- Database tables for mapping and segments caching
- Client-side automatic segment skipping
- Visual progress bar markers
- Skip notifications
- REST API for segments retrieval
- Multi-language support (EN, FR)
- Configurable categories
- Admin settings panel
- Automatic detection of YouTube videos on import
- Real-time segment skipping during playback
- Color-coded progress bar markers by category
- Manual sync endpoint for updating segments
- Comprehensive documentation
- Server-side hooks for video import
- Client-side Video.js integration
- PostgreSQL tables for data persistence
- Express routes for API endpoints
- Settings management system