- Add HEAD request handler to serve video metadata without body
- Replace fluent-ffmpeg with direct spawn for FFmpeg process execution
- Implement active request tracking to prevent duplicate transcoding streams
- Enhance process management by avoiding killing similar seek processes (within 2s)
- Preserve original metadata and apply duration overrides for accurate streaming
- Return full duration metadata and seek time in custom response headers
- Add DELETE endpoint to clean up all transcoding processes for a video
- Update client video player to detect transcoding need and switch source accordingly
- Implement retry logic with capped attempts for both direct and transcoding streams
- Add user-visible transcoding error display with retry button in video viewer
- Optimize transcoding seek requests to avoid duplicate or unnecessary restarts
- Enhance useStableProgress hook to support seek offset from streaming URL
- Adjust progress updates to consider seek time offset for smooth playback progress
- Initialize progress state at seek offset instead of zero on reset to prevent jitter
- Implement GET /api/ffmpeg/status to return current FFmpeg process status
- Support filtering by videoId and response formatting (JSON or text table)
- Include optional statistics in status response
- Implement DELETE /api/ffmpeg/status for process cleanup operations
- Allow killing processes by videoId, stale status, or all at once
- Add cache-control and CORS headers for API responses
- Add error handling with 500 response on failure
- Updated folder path handling in the FolderViewerPage, SidebarContent, and VirtualizedFolderGrid components to use encodeURIComponent for URL encoding.
- This change improves the handling of special characters in folder paths, ensuring correct navigation and link generation.
- Updated file reading and database querying logic to decode URL-encoded paths, ensuring proper handling of special characters.
- Refactored path usage in the GET requests for both media file listing and content retrieval, enhancing compatibility with various file names.
- Removed the USER directive from the Dockerfile to simplify the build process.
- Added new volume mounts in docker-compose.yml for additional media directories, enhancing media accessibility.
- Updated the media database file, reflecting changes in media management.
- Deleted obsolete thumbnail files to clean up the project structure and reduce clutter.
- Changed the image reference for the NextAV service to use the latest version from the private registry.
- Ensured the container name and restart policy remain unchanged for consistent deployment behavior.
- Enhanced video player components to correctly read and display duration for transcoded streams, addressing issues with incorrect progress bar behavior.
- Updated FFmpeg configuration to ensure proper preservation of duration metadata during transcoding.
- Implemented better validation for progress bar calculations to prevent invalid values.
- Added dynamic duration change event handling to improve user experience during transcoding.
- Updated documentation to reflect changes and added testing instructions for progress bar functionality.
- Added documentation for transcoding fixes addressing FFmpeg process management and progress bar accuracy.
- Introduced a heartbeat mechanism to track active video players and ensure proper cleanup of FFmpeg processes.
- Created a global ProcessManager class for managing FFmpeg processes and automatic cleanup of stale processes.
- Enhanced video player components to support heartbeat notifications and display transcoding status.
- Updated API routes for managing heartbeats and processes, improving resource efficiency and user experience.
- Added support for video codec analysis and transcoding based on codec information.
- Implemented new API routes for transcoding videos, allowing for dynamic quality adjustments.
- Updated video player components to handle errors and fallback to transcoded versions if direct streaming fails.
- Enhanced database schema to store codec information for media files.
- Introduced a VideoAnalyzer utility for extracting codec details from video files during scanning.
- Improved CORS handling in API responses for better compatibility with various clients.
- Deleted the thumbnail API route to streamline the application structure.
- Integrated ThumbnailManager for improved thumbnail path generation and directory management.
- Updated media scanning logic to utilize hashed thumbnail paths and ensure directory existence.
- Enhanced error handling for thumbnail generation with fallback options based on media type.
- Introduced a text viewer for displaying various text file formats, including .txt, .md, and more.
- Implemented API routes for fetching text file content with encoding options and error handling.
- Enhanced folder viewer to support text file selection and integrated the new text viewer component.
- Updated global styles to include custom scrollbar styles for the text viewer.
- Added support for hashed folder structure to store thumbnails for better organization.
- Included new dependencies for text encoding handling and updated package configurations.
- Changed base image in Dockerfile to a smaller Alpine version for reduced size.
- Updated package installation commands to use Alpine's package manager.
- Enhanced .dockerignore to exclude additional files and directories, improving build efficiency.
- Added new entries for media, database, and test files to .dockerignore.
- Adjusted docker-compose.yml to use a simplified image name for clarity.
- Implemented a new API route for serving thumbnails, allowing dynamic retrieval of image files.
- Updated Dockerfile to install FFmpeg for media processing.
- Enhanced docker-compose.yml to mount the thumbnails directory for easier access.
- Added public/thumbnails to .dockerignore and .gitignore to prevent unnecessary file inclusion.
- Created a new media database file for managing media assets.
- Modified Dockerfile to rebuild better-sqlite3 using npm as a fallback and ensure native bindings are compiled correctly.
- Updated build command to 'buildprod' for production optimization.
- Removed unnecessary package installations for the production image.
- Enhanced permissions setup for media directories and ensured the database file is created at runtime.
- Revised deployment guide to clarify environment configuration and directory setup for Docker.
- Introduced a .dockerignore file to exclude unnecessary files from Docker builds.
- Created a Dockerfile for building the Next.js application with optimized production settings.
- Added a docker-compose.yml file for orchestrating services, including NextAV, FFmpeg, and Nginx.
- Refactored database access to use a singleton pattern for better management and initialization of the SQLite database.
- Updated API routes to utilize the new database access method, enhancing consistency across the application.
- Introduced a comprehensive deployment guide for NextAV, detailing steps for building and pushing Docker images to a private registry.
- Added a new docker-compose.yml file for service orchestration, including configurations for NextAV and Nginx.
- Updated CLAUDE.md with guidelines for creating documentation and managing Docker images.
- Created a PRIVATE_DOCKER_REPO.md file outlining tagging and pushing images to the private Docker repository.
- Implemented next and previous photo navigation in the photo viewer, allowing users to cycle through images while skipping videos.
- Introduced state management for current items in the folder viewer to support navigation functionality.
- Updated the InfiniteVirtualGrid and VirtualizedFolderGrid components to handle item clicks with index support for better user experience.
- Implemented keyboard shortcuts for video playback, including controls for play/pause, seek, fullscreen, and mute.
- Added deployment instructions for using Docker, including the definition of Dockerfile and docker-compose.yml.
- Replaced the existing folder viewer layout with a new VirtualizedFolderGrid component to improve performance and responsiveness.
- Streamlined item fetching logic to eliminate unnecessary state management and enhance loading efficiency.
- Updated UI elements for better navigation, including breadcrumb support and back button functionality.
- Enhanced error handling and loading states to provide clearer feedback during directory access.
- Enhanced path display logic to accommodate longer directory names and improved truncation for better clarity.
- Adjusted grid item dimensions and padding for a more consistent and responsive layout across components.
- Updated title formatting and line clamping to enhance readability and prevent overflow in media item displays.
- Updated path display logic to show full paths or truncated versions based on length, enhancing clarity for users navigating directories.
- Adjusted grid layout and item dimensions for better responsiveness and visual consistency across different screen sizes.
- Improved title formatting and added line clamping to prevent overflow, ensuring a cleaner presentation of media item names.
- Refined star rating component to support additional size options, allowing for better integration with various UI elements.
- Simplified the title overlay in the video viewer by removing unnecessary elements for a cleaner look.
- Introduced a new video info bar that displays the video title and size, improving user accessibility to video details.
- Maintained existing bookmark and rating functionalities while enhancing their layout for better usability.
- Replaced the existing VirtualizedMediaGrid component with a new InfiniteVirtualGrid component to support infinite scrolling for bookmarks, photos, and videos.
- Enhanced media item fetching with batch loading and search functionality, improving user experience and performance.
- Removed unused state variables and functions related to photo indexing and file size formatting, streamlining the codebase.
- Updated global CSS to implement custom scrollbar styles, including hover effects and animations.
- Adjusted layout in the media grid component to improve responsiveness and user experience, including dynamic height calculations and loading states.
- Disabled automatic loading of more items, allowing users to manually trigger loading for better control.
- Introduced dynamic column count and width calculations based on container size to improve responsiveness.
- Added container width state management and resize event handling for better adaptability to different screen sizes.
- Updated rendering logic to ensure proper display of media items based on calculated dimensions.
- Added a comprehensive performance optimization plan detailing phases for API pagination, frontend memory optimization, file system scanning, database performance, and caching strategies.
- Implemented pagination for bookmarks, photos, and videos APIs, including limit/offset parameters and server-side filtering and sorting.
- Enhanced database queries with indexes for improved performance and added total count for pagination responses.
- Updated frontend components to utilize virtualized lists for better memory management and user experience.
- Adjusted the layout of media items in the folder viewer to ensure proper aspect ratio handling for video files.
- Modified thumbnail size settings in the video thumbnail generation function to maintain aspect ratio while specifying a fixed width.
- Updated the media database file to reflect recent changes.
- Updated path splitting logic to retain leading slashes for absolute paths while filtering out empty segments.
- Enhanced parent path reconstruction to ensure correct navigation within the folder structure.
- Improved readability and maintainability of the path management code.
- Simplified the scanning logic to handle all file types in a single glob pattern, improving efficiency.
- Implemented case-insensitive filtering for video and photo files based on their extensions, enhancing media detection accuracy.
- Refactored code for better readability and maintainability.
- Enhanced media type detection by normalizing file extensions to handle case variations for videos and photos.
- Updated the scanning process to accommodate different case formats for video and photo file extensions, improving accuracy in file recognition.
- Refactored related code for better readability and maintainability.
- Added functionality to fetch libraries from the API and manage library paths within the folder viewer.
- Implemented error handling for directory loading, displaying user-friendly messages when errors occur.
- Updated breadcrumb navigation to reflect the current library context and improved path management.
- Enhanced UI to show error states and provide a retry option for loading directory contents.
- Updated the scan API to allow scanning of specific libraries or all libraries based on user input.
- Enhanced the SettingsPage component to support selection of multiple libraries for scanning.
- Added visual feedback for scanning progress and status updates for individual libraries.
- Introduced new functions for scanning selected libraries and specific libraries, improving user experience and control over the scanning process.
- Updated media retrieval query to include average ratings and star counts for media files.
- Enhanced FolderViewer and VideosPage components to display star ratings, improving user feedback on media quality.
- Integrated StarRating component for visual representation of ratings in the UI.
- Implemented breadcrumb navigation for easier path tracking within the folder viewer.
- Added a back button to navigate to the parent directory, improving user experience.
- Introduced a utility function to format file paths for better readability.
- Updated the UI to display formatted file paths and current directory titles.
- Added POST and DELETE endpoints for managing bookmarks in the video API.
- Enhanced the VideosPage component to handle bookmarking and unbookmarking actions.
- Updated the InlineVideoPlayer and VideoViewer components to reflect bookmark state and count.
- Improved error handling for invalid media IDs and existing bookmarks.
- Implemented keyboard navigation for the PhotoViewer, allowing users to close the viewer with 'Escape' and navigate through photos using 'ArrowLeft' and 'ArrowRight' keys.
- Added a utility function to safely retrieve the photo ID, ensuring it is defined before use in various functionalities like bookmarking and rating.
- Replaced inline video player with a dedicated VideoViewer component for enhanced video playback experience.
- Updated the PhotosPage and FolderViewerPage to utilize the new PhotoViewer and VideoViewer components, streamlining the media viewing process.
- Removed unnecessary loading states and modal implementations, simplifying the code structure and improving performance.
- Enhanced the PhotoViewer and VideoViewer with bookmarking and rating features for better user interaction.
- Added a new SVG placeholder for photos and updated the photos page to utilize it.
- Implemented a photo viewer modal with navigation capabilities, allowing users to view photos in a dedicated interface.
- Enhanced folder viewer to support photo selection and viewing, including loading indicators and improved UI for photo items.
- Updated error handling and content type determination for photo retrieval in the API.
- Updated the media retrieval query to include bookmark counts and average ratings for photos.
- Refactored the bookmarks page to support both videos and photos, improving state management and UI consistency.
- Added search functionality to the photos page, allowing users to filter photos by title or path.
- Implemented a photo viewer modal for enhanced viewing experience, including navigation and bookmarking features.
- Introduced a new "Bookmarks" link in the sidebar for easy access to bookmarked content.
- Integrated the Bookmark icon from lucide-react for visual consistency.
- Implemented bookmark functionality allowing users to bookmark/unbookmark videos.
- Added star rating feature enabling users to rate videos from one to five stars.
- Updated database schema to include bookmarks and stars tables, along with necessary indexes for performance.
- Enhanced inline video player UI to display bookmark status and average star rating, improving user interaction and feedback.
- Updated the folder viewer to support inline video playback, allowing users to click on video items to open a video player.
- Added state management for video selection and loading indicators.
- Improved UI elements for video items, including hover effects and play icons.
- Enhanced video information display in the inline video player with file size details.
- Updated the structure of the inline video player component for improved responsiveness and visual consistency.
- Adjusted CSS classes to better manage layout, including flex properties and spacing.
- Enhanced video info display with improved styling for title and path, ensuring better readability.
- Replaced modal video player with an inline video player that renders as a portal.
- Added state management for video playback, volume control, and fullscreen functionality.
- Introduced new component for inline video playback with customizable controls and metadata display.
- Added error handling for thumbnail generation, providing fallback thumbnails for videos and photos if generation fails.
- Updated database insertion logic to reflect the final thumbnail URL used, improving media management reliability.
- Updated video and photo sections in the UI to include detailed card layouts with thumbnails and file information.
- Added interactive features to video cards, allowing users to click and play videos in a pop-up player.
- Improved sidebar navigation and settings page for better user experience.
- Refined global styles and color themes for a cohesive design across the application.