- Reworked getLogo and getTvLogo to use Promise.all for simultaneous requests to Fanart and TMDB
- Normalized logo data from both sources into a common structure
- Improved logo selection logic via unified array passed to pickLogo
- Prioritized Fanart logos by order in combined array
- Closes#101
- refactor(server): remove CORS setup
- refactor(server): remove express-rate-limit and request-ip
- refactor(server): remove unused router instance
This change simplifies the server initialization by removing
unused middleware and redundant router setup. Improves code
readability and reduces unnecessary dependencies.
- feat(security): implement basic auth for /stats/ui endpoint
- feat(security): add METRICS_USER and METRICS_PASSWORD env variables
This change adds a layer of security to the metrics dashboard,
requiring authentication to access the Swagger Stats UI.
- feat(env): add MONGODB_METRICS for Swagger Stats database
- refactor(env): remove Mixpanel configuration section
- chore(env): update MongoDB URI format with retryWrites parameter
- docs(env): improve variable descriptions and organization
This change reflects the migration from Mixpanel to Swagger Stats
and the addition of a separate MongoDB database for metrics.
- refactor(analytics): remove Mixpanel implementation
- feat(analytics): implement Swagger Stats for metrics and analytics
- feat(security): add rate limiting with express-rate-limit
- feat(security): implement CORS for access control
- feat(security): add request-ip for IP identification
- fix(analytics): fix unique users count via MongoDB
BREAKING CHANGE: Removed Mixpanel dependency. Metrics are now collected via
Swagger Stats and stored in MongoDB. New available routes:
- /stats - general statistics
- /stats/ui - Swagger Stats web interface
- /stats/metrics - detailed metrics
- Remove manual config object construction
- Use complete useConfig object directly
- Simplify code by removing unnecessary destructuring
This change fixes issues with configuration parameters not being
properly passed to the URL and makes the code more maintainable
by reducing boilerplate.
- Move public folder to project root for better organization
- Add proper favicon configuration for all routes using serve-favicon
- Add multiple favicon sizes and formats for better device compatibility
- Add theme-color meta tag for mobile browsers
- Add proper meta description for SEO
- Configure static file serving for both API and configuration page
Changes:
- Moved /configure/public to /public
- Added serve-favicon middleware
- Updated index.html with proper meta tags and favicon links
- Updated static file serving configuration in index.js
- Added proper cache headers for static assets
This change improves the organization of static assets and ensures
the favicon is properly displayed across all routes and devices.
- Added hideEpisodeThumbnails toggle in configuration page
- Implemented image blur endpoint using Sharp
- Added configuration option in addon URL
- Modified getEpisodes to support blurred thumbnails
- Added blur processing for episode preview images
The feature allows users to enable thumbnail blurring to avoid potential
spoilers from episode preview images. When enabled, all episode thumbnails
are processed through a blur filter before being displayed.
Changes:
- New configuration option in Others.tsx
- New image processing utility in utils/imageProcessor.js
- Modified getEpisodes.js to handle blurred thumbnails
- Added blur endpoint in index.js
- Updated config types and URL generation
Closes#89
- Removed unnecessary functions and simplified the code.
- Fixed user tracking functionality.
- Added Mixpanel token verification at the start of the module.
- If the token is not found, the Analytics module exports an empty object with no-op functions.
- Prevented unnecessary tracking calls, avoiding errors in the system when the token is absent.
- Removed unnecessary ternary operator for cleaner logic
- Ensured `imdbRating` is always formatted with one decimal place using `.toFixed(1)`
- Improved readability and maintainability of the code
Removed `toFixed(1)` on `vote_average` to prevent a TypeError when `vote_average` is not a number.
This ensures the function handles different data types correctly without breaking execution.
Refactored the code to reduce redundancy and improve readability.
- Used Optional Chaining (?.) to avoid explicit array checks.
- Replaced nested ternary operators with Nullish Coalescing (??) for better clarity.
- Preserved the original priority order for retrieving the runtime.
- Add Mixpanel API integration to track addon installations
- Implement /api/stats endpoint to fetch installation statistics
- Display the number of unique users in the settings page
- Improve data handling to prevent parsing errors
- Rewrite README.md with improved structure and markdown formatting
- Add detailed documentation files:
- self-hosting.md: Complete guide for deployment (#66)
- development.md: Development setup and workflow
- contributing.md: Contribution guidelines
- api.md: API endpoints and usage
The documentation now includes:
- Clear local development setup instructions
- Detailed deployment guides (Docker and manual)
- Step-by-step environment configuration
- API reference with examples
- Development workflow guidelines
- Troubleshooting sections
- Best practices and code examples
Closes#66
Add isRequired flag to genre extra property based on catalog's
showInHome setting. When a catalog is set to show in home, genre
selection becomes optional, otherwise it's required.
This ensures proper catalog behavior depending on its home page
visibility configuration.
When catalog options include a dot notation (field.order), ensure both
translations exist before formatting. Add fallback to original value
when translation is missing.
This fixes the issue where tmdb.trending catalog options were showing
as null instead of their original values.
- Fix catalog state management to properly handle enabled/disabled state
- Fix issue where disabled catalogs were still being included in addon URL
- Remove unnecessary comments and debug logs
- Clean up code formatting
The main fixes:
1. Ensure disabled catalogs are not included in the addon URL
2. Fix catalog state handling in MultiActionButton
3. Properly sync UI state with actual catalog state
Closes#73
- Change install URL to use stremio:// protocol instead of http(s)
- Update MultiActionButton to properly handle Stremio deep linking
This change fixes the addon installation process, ensuring Stremio
opens correctly instead of displaying the manifest.json in browser.
Closes#79
- Add sorting by date added, popularity, release date and random
- Support sorting in ascending/descending order
- Add translations for sorting options in multiple languages
- Map sorting fields to TMDB API parameters (created_at, popularity, release_date)
- Implement client-side sorting for random order
- Remove redundant code and improve reusability
This change allows users to sort their watchlist and favorites using
different criteria and orders, with proper translation support.
Closes#81
- Add searchEnabled state to control search independently
- Add search toggle in Other settings
- Update manifest to handle search catalogs separately
This change allows users to disable the popular catalog while keeping
search functionality, making the addon more flexible and modular.
Closes#74#80
- Fix transliteration for non-latin search queries
- Add genre list support to search results
- Remove redundant sorting by popularity
- Fix include_adult parameter handling
- Clean up search result processing
This change improves search accuracy for non-latin characters while
maintaining proper genre information in results.
Closes#78
- Add getDefaultCatalogs function using catalog-types.json
- Use default catalogs when no catalogs are configured
- Add minimum vote count filter to improve content quality
- Remove unused getTrending import
This fixes the issue where installing the addon directly without
configuration would result in no catalogs being available.
- Remove redundant defaultCatalogIds array
- Use baseCatalogs directly to initialize default catalogs
- Ensure only base catalogs (popular, year, language, trending) are enabled by default
This change simplifies the code by using the existing baseCatalogs
definition instead of maintaining a separate list of default catalog IDs.
- Add search toggle option in Others settings
- Add searchEnabled state to ConfigContext
- Add search catalogs to manifest when search is enabled
- Make search enabled by default
- Update manifest to include search catalogs for both movies and series
This change allows users to control search functionality independently
from catalog selection.
- Add age rating selection component with visual badges
- Implement US certification filtering for movies and TV shows
- Add certification parameters to TMDB API calls
- Create age rating data structure with G, PG, PG-13, R, NC-17 ratings
- Add info message about trending catalogs limitation
- Handle certification filtering in discover and search endpoints
This feature allows users to filter content based on US age ratings,
helping them find appropriate content for their desired audience.