Documentation

Guide complet pour installer, configurer et automatiser Kass Recorder.

Installation APK

Kass Recorder s'installe directement depuis le fichier APK — aucun store requis.

1

Activer les sources inconnues

Sur votre appareil Android, allez dans Paramètres → Sécurité → Sources inconnues (ou Installer des apps inconnues sur Android 8+) et autorisez votre navigateur ou gestionnaire de fichiers à installer des APK.
2

Télécharger le fichier APK

Téléchargez la dernière version de Kass Recorder depuis la section Télécharger de la page d'accueil.
3

Installer l'APK

Ouvrez le fichier téléchargé dans votre gestionnaire de fichiers et appuyez sur Installer. L'application apparaîtra dans votre launcher.
4

Accorder les permissions

Au premier lancement, Kass Recorder demande les permissions Caméra, Stockage et USB. Accordez toutes les permissions pour un fonctionnement optimal.

Android 8.0+ requis — Compatible Android 8 à 14. Testé sur Pixel, Samsung Galaxy, Xiaomi et tablettes OTG.

Première connexion

Connectez votre première caméra UVC et vérifiez que l'API répond correctement.

1

Brancher une caméra USB UVC

Connectez votre caméra USB compatible UVC sur le port OTG de l'appareil Android. Kass Recorder détecte automatiquement la caméra sous 2–3 secondes.
2

Vérifier la détection

La caméra détectée s'affiche dans le tableau de bord. Un indicateur vert confirme la connexion active.
3

Tester l'API HTTP

Depuis un autre appareil sur le même réseau, envoyez une requête GET à :
terminal
curl http://<IP_ANDROID>:8181/api/system/status
Vous devez recevoir un JSON avec l'état du système :
réponse
{
  "is_recording": false,
  "cameras_connected": 1,
  "storage_free_gb": 184,
  "mqtt_connected": false,
  "rtsp_active": false
}
4

Démarrer un enregistrement

Envoyez la commande POST pour démarrer l'enregistrement :
terminal
curl -X POST http://<IP_ANDROID>:8181/api/record/start \
  -H "Content-Type: application/json" \
  -d '{"camera": 0, "mode": "continuous"}'

Paramètres généraux

Configurez les paramètres globaux de Kass Recorder via l'interface ou l'API.

Port API HTTP

Le port par défaut de l'API HTTP est 8181. Vous pouvez le modifier dans les paramètres de l'application :

Modifier le port via API
POST /api/system/config
{
  "api_port": 9090
}

Paramètres disponibles

ParamètreTypeDéfautDescription
api_portint8181Port du serveur HTTP API
auto_startbooleanfalseDémarrer l'enregistrement au lancement
keep_screen_onbooleantrueMaintenir l'écran allumé
log_levelstring"info"Niveau de log : debug, info, warn, error
max_camerasint4Nombre maximum de caméras simultanées

Notifications

Kass Recorder peut envoyer des notifications Android et des alertes MQTT sur différents événements.

Caméra déconnectée
MQTTNotif
Mouvement détecté
MQTTNotif
Stockage faible (< 1 Go)
MQTTNotif
Upload S3 terminé
MQTT
Reconnexion MQTT
MQTT
Erreur d'encodage
Notif
Topic MQTT alerte mouvement
kass/recorder/cam0/motion

{
  "detected": true,
  "camera": 0,
  "timestamp": "2024-01-01T12:00:00Z"
}

Caméras UVC

Kass Recorder supporte toutes les caméras conformes au standard USB Video Class (UVC). La plupart des webcams modernes sont UVC compatibles.

Plug & Play

Détection automatique à la connexion

Multi-caméras

Jusqu'à 4 caméras simultanées

Reconnexion auto

Reconnexion en cas de micro-déconnexion

Caméras testées

Marque / ModèleRésolution maxUVC ControlsStatut
Logitech C9201080p/30fpsOuiValidé
ELP-USB Camera4K/30fpsPartielValidé
Arducam USB1080p/60fpsOuiValidé
Générique UVC720p/30fpsNonCompatible

Hub OTG

Pour connecter plusieurs caméras, utilisez un hub USB OTG alimenté (recommandé : alimentation externe 5V/3A minimum).

Hub alimenté obligatoire pour 2+ caméras. Un hub passif (sans alimentation) peut causer des déconnexions aléatoires sous charge.

Vérifier les caméras connectées
GET /api/system/status

// Réponse
{
  "cameras_connected": 3,
  "camera_list": [
    {"index": 0, "name": "Logitech C920", "active": true},
    {"index": 1, "name": "ELP-USB", "active": true},
    {"index": 2, "name": "Generic UVC", "active": true}
  ]
}

Réglages UVC

Les caméras UVC exposent des contrôles matériels accessibles via l'API. Les paramètres disponibles varient selon le modèle de caméra.

Lire les contrôles supportés
GET /api/uvc/capabilities?camera=0

{
  "supports_zoom": true,
  "supports_focus": false,
  "brightness_range": [-64, 64],
  "contrast_range": [0, 100],
  "kelvin_range": [2800, 6500]
}

La balance des blancs automatique (Auto Kelvin) utilise le capteur de luminosité Lux pour adapter la température de couleur en temps réel selon les conditions d'éclairage.

Concepts API

L'API Kass Recorder repose sur un dictionnaire de commandes unifié — la même action peut être déclenchée via HTTP REST, MQTT ou Android Intent.

HTTP REST

API locale sur port 8181. Idéal pour l'automatisation et les intégrations.

MQTT

Bi-directionnel, intégration native Home Assistant et Node-RED.

Android Intents

Déclenchement via Tasker, MacroDroid, ou toute app Android.

Format des requêtes HTTP

Toutes les requêtes acceptent et retournent du JSON. L'authentification est optionnelle (token Bearer).

Format requête POST
POST http://<IP_ANDROID>:8181/api/record/start
Content-Type: application/json

{
  "camera": 0,
  "mode": "continuous"
}
Format réponse
{
  "success": true,
  "is_recording": true,
  "camera": 0
}

Codes de statut HTTP

200OKCommande exécutée avec succès
400Bad RequestParamètres manquants ou invalides
404Not FoundCaméra ou ressource introuvable
500Server ErrorErreur interne de l'application

RTSP / MediaMTX

Kass Recorder intègre MediaMTX pour publier les flux RTSP consommables par VLC, Home Assistant, NVR, ou tout client RTSP standard.

Démarrer le flux RTSP
POST /api/stream/rtsp/start
{
  "camera": 0,
  "path": "cam0"
}

// Réponse
{
  "success": true,
  "rtsp_url": "rtsp://192.168.1.50:8554/cam0"
}

Lire dans VLC

VLC
vlc rtsp://192.168.1.50:8554/cam0

Le flux RTSP est indépendant de l'enregistrement. Vous pouvez streamer sans enregistrer et inversement.

HTTP MJPEG

Le serveur MJPEG local permet d'afficher le flux vidéo directement dans un navigateur ou une image Home Assistant sans configuration supplémentaire.

Démarrer le serveur MJPEG
POST /api/stream/mjpeg/start
{
  "camera": 0,
  "port": 8080
}

// URL du flux
http://192.168.1.50:8080/stream

Intégration Home Assistant

configuration.yaml
camera:
  - platform: mjpeg
    name: Kass Cam 0
    mjpeg_url: http://192.168.1.50:8080/stream

MQTT

L'intégration MQTT est bi-directionnelle : Kass Recorder publie des événements et reçoit des commandes sur le même broker.

Configurer le broker
POST /api/mqtt/broker
{
  "host": "192.168.1.10",
  "port": 1883,
  "username": "kass",
  "password": "secret"
}

Topics publiés (état)

kass/recorder/cam0/statusÉtat de l'enregistrement
kass/recorder/cam0/motionDétection de mouvement
kass/recorder/storageEspace libre sur chaque stockage
kass/recorder/systemHeartbeat système toutes les 30s

Topics de commande (souscription)

Envoyer une commande MQTT
// Topic : kass/recorder/command
// Payload :
{
  "action": "start_recording",
  "camera": 0,
  "mode": "motion"
}

Warden Engine

Le Warden Engineest le moteur d'automatisation intégré à Kass Recorder. Il permet de créer des règles trigger → action sans dépendance externe.

Triggers disponibles

schedule

Heure précise ou récurrence cron

motion

Détection de mouvement sur une caméra

network

Connexion / déconnexion réseau Wi-Fi

battery

Niveau batterie franchit un seuil

timer

Délai relatif depuis un événement

camera_connect

Caméra USB connectée / déconnectée

Créer une règle Warden
POST /api/warden/rules
{
  "trigger": "motion",
  "rule_action": "start_recording",
  "condition": {
    "camera": 0,
    "sensitivity_min": 5
  }
}

// Réponse
{
  "success": true,
  "rule_id": "rule_abc123"
}

Tasker / MacroDroid

Kass Recorder expose des Android Intentsque Tasker ou MacroDroid peuvent déclencher. Vous pouvez aussi appeler l'API HTTP directement depuis ces apps.

Intents supportés

com.kass.recorder.STARTDémarrer l'enregistrement
com.kass.recorder.STOPArrêter l'enregistrement
com.kass.recorder.CAPTURECapturer une image
com.kass.recorder.UPLOADDéclencher l'upload S3
Déclencher un Intent via l'API
POST /api/automation/intent
{
  "intent_action": "com.kass.recorder.START",
  "extras": {
    "camera": "0",
    "mode": "motion"
  }
}

Home Assistant

Intégrez Kass Recorder dans Home Assistant via MQTT et MJPEG. Créez des automatisations depuis les événements de surveillance.

automation.yaml — enregistrer si quelqu'un sonne
automation:
  - alias: "Kass - Enregistrer sur sonnette"
    trigger:
      platform: state
      entity_id: binary_sensor.doorbell
      to: "on"
    action:
      service: mqtt.publish
      data:
        topic: kass/recorder/command
        payload: '{"action": "start_recording", "camera": 0}'
configuration.yaml — caméra MJPEG
camera:
  - platform: mjpeg
    name: Kass Cam Entrée
    mjpeg_url: http://192.168.1.50:8080/stream
    still_image_url: http://192.168.1.50:8080/snapshot

Les topics MQTT de Kass Recorder s'intègrent nativement avec les entités Home Assistant. Chaque caméra expose un binary_sensor de mouvement sur son topic.

S3 / MinIO

Kass Recorder peut exporter automatiquement les enregistrements vers un bucket S3 (AWS) ou une instance MinIOauto-hébergée. L'upload supporte la reprise sur interruption (chunked upload).

Configurer S3 / MinIO
POST /api/automation/s3/config
{
  "endpoint": "https://minio.local:9000",
  "bucket": "surveillance",
  "access_key": "YOUR_ACCESS_KEY",
  "secret_key": "YOUR_SECRET_KEY",
  "region": "us-east-1"
}

Options d'upload

wifi_onlytrueN'uploader que sur Wi-Fi pour préserver les données mobiles
delete_after_uploadfalseSupprimer le fichier local après upload réussi
chunk_size_mb10Taille des chunks pour la reprise sur interruption
auto_uploadfalseUpload automatique dès qu'un fichier est finalisé
Déclencher l'upload manuel
POST /api/automation/upload
{
  "wifi_only": true
}

// Réponse
{
  "success": true,
  "files_queued": 12
}

Stockage local

Kass Recorder gère 3 niveaux de stockage avec fallback automatique silencieux: l'enregistrement continue sans interruption même si un support est plein.

1

USB (prioritaire)

Clé USB ou disque externe via OTG. Capacité illimitée.

2

Carte SD

Fallback automatique si le stockage USB est plein ou absent.

3

Stockage interne

Dernier recours. Un avertissement est envoyé quand < 1 Go reste.

Lire l'état du stockage
GET /api/system/storage

{
  "usb_free_gb": 184,
  "sd_free_gb": 32,
  "internal_free_gb": 8,
  "active_storage": "usb",
  "priority": ["usb", "sd", "internal"]
}

Dépannage

Solutions aux problèmes les plus fréquents.

Problèmes connus

Limitations connues et comportements attendus.