MyCinema-Alexa-Skill

MyCinema-Alexa-Skill

Docker app from ripleyxlr8's Repository

Overview

A dockerized Amazon Skill to start movies or series with voice control using the Kodi Fenlight add-on (via TMBDHelper).

🎬 My Cinema - An Alexa Skill for FenLight AM (or your favorite Kodi player)

Version Python Docker Unraid Ready Platform Platform Language License Vibe Coding Buy Me A Coffee

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.

  1. With the container running, go to http://YOUR_SERVER_IP:5000/settings.
  2. Click "Connect my Trakt account". An 8-character code appears.
  3. 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 set TRAKT_CLIENT_ID and TRAKT_CLIENT_SECRET on 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:

  1. Create Skill: Create a new Custom Skill.
  2. Interaction Model:
    • Go to the JSON Editor section.
    • Import the provided JSON file from the /alexa_speech_assets folder (e.g., FR.json or US.json).
    • This will automatically create the necessary Intents (PlayMovieIntent, ResumeTVShowIntent, etc.) and Slots (MovieName, ShowName, SourceMode).
  3. 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.
  4. Security (Skill ID):
    • Copy your Your Skill ID (e.g., amzn1.ask.skill.xxxx) from the console.
    • Add it to your docker-compose.yaml under the ALEXA_SKILL_ID environment variable. The backend will reject any request not matching this ID.

🗣️ 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.


Enjoying this project? Buy Me A Coffee

📄 License

MIT License

Related apps

Explore more like this

Explore all

Details

Repository
ghcr.io/ripleyxlr8/my-cinema-amazon-skill-for-kodi:latest
Last Updated2026-10-14
First Seen2026-04-11

Runtime arguments

Network
bridge
Privileged
false

Template configuration

Appdata Config PathPathrw

Persistent storage for Trakt tokens

Target
/app/data
Default
/mnt/user/appdata/mycinema-alexa-skill/data
Persistant ADB keys PathPathrw

Persistent storage for ADB keys

Target
/root/.android
Default
/mnt/user/appdata/mycinema-alexa-skill/adb_keys
Shield IPVariable

Nvidia Shield IP address

Target
SHIELD_IP
Shield MACVariable

Shield MAC address (for Wake-on-LAN)

Target
SHIELD_MAC
TMDB API KeyVariable

Your TheMovieDB API Key

Target
TMDB_API_KEY
Trakt Client IDVariable

Trakt.tv Client ID

Target
TRAKT_CLIENT_ID
Trakt Access TokenVariable

Trakt.tv Access Token

Target
TRAKT_ACCESS_TOKEN
Trakt Refresh TokenVariable

Trakt.tv Refresh Token (Optional)

Target
TRAKT_REFRESH_TOKEN
Kodi PortVariable

Kodi Web Port

Target
KODI_PORT
Default
8080
Kodi UserVariable

Kodi User

Target
KODI_USER
Default
kodi
Kodi PasswordVariable

Kodi Password

Target
KODI_PASS
Default
kodi
App PortPorttcp

Port mapping for the Alexa Skill endpoint

Target
5000
Default
5000
Value
5000
Player DefaultVariable

Auto player filename

Target
PLAYER_DEFAULT
Default
fenlight_auto.json
Player SelectVariable

Manual player filename

Target
PLAYER_SELECT
Default
fenlight_select.json
Debug ModeVariable

Enable Debug mode (true/false)

Target
DEBUG_MODE
Default
false