A modern Android application that combines Jellyfin media server integration with AI-powered movie recommendations. CineBot allows users to search and discover movies from their Jellyfin library using natural language queries and voice search capabilities.
- Jellyfin Integration: Connect to your Jellyfin media server to browse your movie library
- AI-Powered Search: Use natural language queries to find movies with intelligent recommendations
- Voice Search: Search for movies using voice commands
- Smart Filtering: Advanced filtering and search capabilities with AI assistance
- Direct Playback: Start playing movies directly on your Jellyfin devices
- Modern Material Design 3: Beautiful, intuitive interface following Material Design principles
- Dark/Light Mode: Toggle between dark and light themes
- Multilingual Support: Available in English and Spanish
- Responsive Design: Optimized for various screen sizes and orientations
- Classical Styling: Elegant gradient backgrounds and typography
- Intelligent Caching: Movies are cached locally for faster loading
- Memory Optimization: Efficient memory management with automatic cache clearing
- Background Processing: Non-blocking UI with coroutines for smooth performance
- Optimized Network Calls: Efficient API communication with proper error handling
- Kotlin: Primary programming language
- Jetpack Compose: Modern declarative UI framework
- Material Design 3: Latest Material Design components
- OkHttp: HTTP client for API communication
- Gson: JSON parsing and serialization
- Coroutines: Asynchronous programming
- SharedPreferences: Local data persistence
- Minimum SDK: API 26 (Android 8.0)
- Target SDK: API 36 (Android 14)
- Compile SDK: API 36
- Java Version: 17
- Jellyfin Server: A running Jellyfin media server
- OpenRouter API Key: For AI-powered recommendations
- Android Device: Running Android 8.0 or higher
- Clone the repository
- Open the project in Android Studio
- Build and run the application
- Open the app and navigate to Settings
- Enter your Jellyfin server URL (e.g.,
http://192.168.1.100:8096) - Add your Jellyfin API key
- Test the connection
- Get an API key from OpenRouter
- Enter the API key in the settings
- Select your preferred AI model (default:
deepseek/deepseek-chat:free)
- Choose your preferred Jellyfin playback device
- The app will automatically detect available devices
- Use the search bar to enter movie queries
- Type natural language descriptions like "sci-fi movies from the 80s"
- View AI-powered recommendations
- Tap the microphone icon
- Speak your movie request
- The app will process your voice input and search accordingly
- Select a movie from the search results
- Choose your playback device
- Tap the play button to start streaming
- Refresh: Pull to refresh your movie library
- Load More: Infinite scrolling for large libraries
- Filtering: Use AI to filter movies by genre, year, or other criteria
app/src/main/java/pe/canica/cinebot/
βββ components/ # Reusable UI components
βββ screens/ # Main application screens
βββ ui/theme/ # Theme and styling
βββ utils/ # Utility functions
βββ JellyfinService.kt # Jellyfin API integration
βββ OpenRouterService.kt # AI service integration
βββ Movie.kt # Data models
βββ MainActivity.kt # Main activity
- JellyfinService: Handles communication with Jellyfin server
- OpenRouterService: Manages AI-powered recommendations
- SpeechRecognitionHelper: Voice search functionality
- MovieSearchScreen: Main search and discovery interface
- ConfigurationScreen: Settings and configuration management
- MovieSearchState: Manages search state and movie data
- Reactive UI: Real-time updates using Compose state
The application requires the following permissions:
- Internet: For API communication with Jellyfin and OpenRouter
- Record Audio: For voice search functionality
- Movies are cached locally for 1 hour
- Automatic cache invalidation on memory pressure
- Efficient JSON serialization with Gson
- Hardware acceleration enabled
- Automatic cache clearing on low memory
- Optimized image loading and display
- Connection timeouts configured
- Efficient API field selection
- Error handling and retry mechanisms
- Fork the repository
- Create a feature branch
- Make your changes
- Test thoroughly
- Submit a pull request
This project is licensed under the MIT License - see the LICENSE file for details.
For issues and feature requests, please create an issue in the repository.


