All apps · 0 apps
MyCinema-Alexa-Skill
Docker app from ripleyxlr8's Repository
Overview
Readme
View on GitHub🎬 My Cinema - An Alexa Skill for FenLight AM (or your favorite Kodi player)
This container is an Alexa Skill allowing voice control for your favorite Kodi Player (for example FenLight AM). It is specifically optimized to search, play, and resume media using the FenLight AM add-on via TMDB Helper on devices like Nvidia Shield or Raspberry Pi.
This container can be installed directly using docker or on your Unraid Server directly through Community Applications (CA).
This dockerized solution acts as a middleware bridge, featuring a modern Web UI Control Panel and intelligent power management.
🎥 Demo
See the skill in action (French language demo):
https://github.com/user-attachments/assets/da996a8d-55bf-4b13-b84a-542da01ceb5d
✨ Key Features
- 🖥️ Web UI Control Panel: A real-time dashboard to monitor your Kodi connection, TMDB API status and Trakt.tv synchronization.
- 🗣️ Multi-Language Support: Full native support for English and French commands and responses.
- ⚡ Smart Power Management: Automatically handles device wake-up (WoL/ADB for Shield) or system commands (SSH for LibreELEC) before playback.
- 🧠 Resume where you left off: Ask Alexa to "Resume [Show]" to play your next episode. Progress comes from Trakt when an account is connected — so it works even with the device switched off — and falls back to a locally cached snapshot of your Kodi add-on's Trakt cache (POV by default,
PROGRESS_ADDON), refreshed in the background whenever the device is reachable. If no source can answer, the skill says so plainly instead of claiming you have no progress. - 🔍 TMDB Integration: Accurate identification of movies and TV shows with rich metadata support.
- 🔒 Secure Webhook: Cryptographic validation of Alexa requests to ensure only your authorized skill can control your media center.
📱 Platform Comparison
This container has initialy been developped to control Kodi and Fenlight AM running on the NVidia Shield platform but it can be used to control in conjunction with LibreElec / OpenElec running on a Raspberry Pi.
Here is a quick comparison of the features available on the different platform :
| Feature | Android TV (Nvidia Shield) | LibreELEC / OpenELEC |
|---|---|---|
| Voice Control | ✅ | ✅ |
| Trakt.tv Sync | ✅ | ✅ |
| Web UI Dashboard | ✅ | ✅ |
| Wake-on-LAN Support | ✅ | ❌ |
| HDMI-CEC TV Wake-up | ✅ (via Android) | ✅ (via JSON-RPC) |
🚀 Installation & Setup
1. Kodi Configuration (TMDB Helper Players)
Install your favorite Kodi player like Fenlight AM. (use google to find a tutorial on how to install and configure Fenlight AM) and the TMDB Helper Add-On.
Create the following .json files in your Kodi userdata/addon_data/plugin.video.themoviedb.helper/players/ folder:
- fenlight_auto.json: For standard, hands-free playback.
- fenlight_select.json: For playback with a manual source selection menu.
2. Docker Deployment
Deployment via Docker Compose is recommended. Use network_mode: host for the best results with Wake-on-LAN. The container includes a healthcheck specifically optimized for Docker environments like Unraid.
docker-compose.yaml:
version: '3.8'
services:
kodi-alexa-skill:
image: ghcr.io/ripleyxlr8/my-cinema-amazon-skill-for-kodi:latest
container_name: kodi-fenlight-alexa-skill
restart: unless-stopped
ports:
- "5000:5000"
volumes:
- ./data:/app/data
- ./adb_keys:/root/.android
environment:
- TZ=Europe/Paris
- TARGET_OS=android # 'android' or 'libreelec'
- SSH_USER=root
- SSH_PASS=libreelec
- SHIELD_IP=192.168.1.x
- SHIELD_MAC=AA:BB:CC:DD:EE:FF
- TMDB_API_KEY=your_tmdb_api_key
- ALEXA_SKILL_ID=amzn1.ask.skill.xxxx
- KODI_PORT=8080
- KODI_USER=kodi
- KODI_PASS=kodi
3. 🔑 Trakt.tv Connection (Optional, but recommended)
Connecting a Trakt account lets MyCinema resume a show even while your Kodi device is switched off — which is exactly when you ask Alexa to resume one. Without it, progress is read from your add-on's cache over ADB, which requires the device to be awake and reachable.
- With the container running, go to
http://YOUR_SERVER_IP:5000/settings. - Click "Connect my Trakt account". An 8-character code appears.
- Enter that code on trakt.tv/activate. The page refreshes itself once you approve.
There is no app to create: MyCinema ships its own Trakt application. Two things worth knowing:
- A free Trakt account is limited to 2 connected community apps. Your streaming add-on (POV, Seren, The Crew…) already uses one, so MyCinema will take the second. Check yours at trakt.tv/settings/apps/connected.
- Prefer your own Trakt application? Create one at developer.trakt.tv/apps (free; requires a linked GitHub account) with redirect URI
urn:ietf:wg:oauth:2.0:oob, then setTRAKT_CLIENT_IDandTRAKT_CLIENT_SECRETon the container. They override the bundled ones.
4. 🎙️ Alexa Skill Setup
To bridge your voice commands to the backend, follow these steps in the Alexa Developer Console:
- Create Skill: Create a new Custom Skill.
- Interaction Model:
- Go to the JSON Editor section.
- Import the provided JSON file from the
/alexa_speech_assetsfolder (e.g.,FR.jsonorUS.json). - This will automatically create the necessary Intents (
PlayMovieIntent,ResumeTVShowIntent, etc.) and Slots (MovieName,ShowName,SourceMode).
- Endpoint Configuration:
- In the Endpoint tab, select HTTPS.
- Enter your public URL followed by
/alexa-webhook(e.g.,https://your-domain.com/alexa-webhook). - Note: A valid SSL certificate is required. If using a reverse proxy, ensure it points to port
5000.
- Security (Skill ID):
- Copy your Your Skill ID (e.g.,
amzn1.ask.skill.xxxx) from the console. - Add it to your
docker-compose.yamlunder theALEXA_SKILL_IDenvironment variable. The backend will reject any request not matching this ID.
- Copy your Your Skill ID (e.g.,
🗣️ Usage Examples
| Action | English Command | Commande Française |
|---|---|---|
| Play Movie | "Alexa, ask My Cinema to play Inception." | "Alexa, demande à Mon Cinéma de lancer Inception." |
| Play Show | "Alexa, ask My Cinema to play The Witcher." | "Alexa, demande à Mon Cinéma de lancer The Witcher." |
| Resume | "Alexa, ask My Cinema to resume Breaking Bad." | "Alexa, demande à Mon Cinéma de reprendre Breaking Bad." |
| Manual Select | "Alexa, ask My Cinema to play Avatar manually." | "Alexa, demande à Mon Cinéma de lancer Avatar avec choix." |
🤖 Vibe Coding & Credits
This project is a pure "Vibe Coding" experiment. The entire architecture and feature set were refined through natural language dialogue with Google Gemini.
📄 License
Categories
Related apps
Explore more like this
Explore allDetails
ghcr.io/ripleyxlr8/my-cinema-amazon-skill-for-kodi:latestRuntime arguments
- Network
bridge- Privileged
- false
Template configuration
Persistent storage for Trakt tokens
- Target
- /app/data
- Default
- /mnt/user/appdata/mycinema-alexa-skill/data
Persistent storage for ADB keys
- Target
- /root/.android
- Default
- /mnt/user/appdata/mycinema-alexa-skill/adb_keys
Nvidia Shield IP address
- Target
- SHIELD_IP
Shield MAC address (for Wake-on-LAN)
- Target
- SHIELD_MAC
Your TheMovieDB API Key
- Target
- TMDB_API_KEY
Trakt.tv Client ID
- Target
- TRAKT_CLIENT_ID
Trakt.tv Access Token
- Target
- TRAKT_ACCESS_TOKEN
Trakt.tv Refresh Token (Optional)
- Target
- TRAKT_REFRESH_TOKEN
Kodi Web Port
- Target
- KODI_PORT
- Default
- 8080
Kodi User
- Target
- KODI_USER
- Default
- kodi
Kodi Password
- Target
- KODI_PASS
- Default
- kodi
Port mapping for the Alexa Skill endpoint
- Target
- 5000
- Default
- 5000
- Value
- 5000
Auto player filename
- Target
- PLAYER_DEFAULT
- Default
- fenlight_auto.json
Manual player filename
- Target
- PLAYER_SELECT
- Default
- fenlight_select.json
Enable Debug mode (true/false)
- Target
- DEBUG_MODE
- Default
- false
