Cómo ve Styx tus ficheros, qué es una raíz, y qué fuentes existen hoy y cuáles están especificadas.
Especificado, con una parte implementada (las raíces locales del daemon). La tabla de estado real separa lo que existe de lo que obliga.
El daemon de medios no abre rutas arbitrarias. Sólo lee ficheros bajo una raíz, y el resto
del sistema le habla con { rootId, relPath }, nunca con una ruta absoluta. Las raíces se
declaran en STYX_MEDIA_ROOTS, separadas por comas, con la forma id=/ruta[:ro][:trusted]:
STYX_MEDIA_ROOTS=peliculas=/media/peliculas:ro,series=/media/series:roid: de 1 a 64 caracteres de [A-Za-z0-9._-]..., enlaces simbólicos y rutas que se
escapen se rechazan (dec-0117 I7).Toda fuente implementa una interfaz de lectura con rangos (SeekableMediaSource) con cancelación
por petición. Las fuentes previstas, y su estado:
| Fuente | Estado |
|---|---|
| Disco local bajo una raíz del daemon | Implementado |
| HTTP con rangos (en TypeScript) | Existe en el SDK de fuentes, pero no sirve vídeo: los bytes de vídeo no pasan por JS |
| SFTP / WebDAV / SMB (Storage Box) | Especificado: Storage Box |
| S3, Jellyfin, Xtream, torrent | Especificado en el modelo de dominio, sin implementación en el daemon |
El catálogo puntúa varias fuentes de una misma película y elige la mejor (dec-0025).
| Pieza | Estado |
|---|---|
| Declarar raíces y leerlas fd-relativas | Implementado |
Escanear un fichero (POST /scan, Bearer de propietario) | Implementado |
| Recorrer una raíz entera y crear obras por contenido | Especificado (dec-0114), sin código |
| Una película, una obra: re-escanear no duplica | Especificado: hoy cada escaneo sin id crea una obra nueva |
| Series, temporadas, episodios | Especificado: hoy todo se registra como película |
Mientras no exista el recorrido de raíces, la forma de dar de alta ficheros es subirlos o escanearlos uno a uno por la API.
La operación tal y como la publica el OpenAPI de catalog-svc (la misma que lista la referencia de la API):
bearerAuth Access token de identity-svc (JWT EdDSA, caducidad corta). Se verifica en local y después contra la sesión viva (revocation-aware).
In: header
application/json
TypeScript Definitions
Use the request body type in TypeScript.
1 <= lengthapplication/json
application/problem+json
application/problem+json
application/problem+json
application/problem+json
application/problem+json
application/problem+json
application/problem+json
application/problem+json
application/problem+json
application/problem+json
curl -X POST "https://example.com/scan" \ -H "Content-Type: application/json" \ -d '{ "path": "string" }'{ "asset": { "container": "string", "createdAt": 0, "editionId": "string", "fastHash": "string", "id": "string", "identification": "identified", "kind": "logical-composition", "layout": "file", "path": "string", "sizeBytes": 0, "updatedAt": 0 }, "index": { "assetId": "string", "bitrateBps": 0, "capabilities": [ "string" ], "container": "string", "createdAt": 0, "durationMs": 0, "id": "string", "indexVersion": 0, "keyframesMs": [ 0 ], "streams": [ { "bitRateBps": 0, "channels": 0, "codec": "string", "defaultFlag": true, "frameRate": 0, "height": 0, "index": 0, "language": "string", "sampleRate": 0, "type": "video", "width": 0 } ] }, "indexed": true}