La mejor identificación de cartas para directos. Hecha para breaks, aperturas y shows en vivo.
cardstream sigue tu break, tu apertura o tu show e identifica cada carta coleccionable en el instante en que entra en el encuadre: nombre, set y confianza, en directo. Analiza tus directos de venta con un sistema de seguimiento de cartas, pensado para streamers que quieren saber más de lo que pasa en su mesa.
De Pokémon a Magic: The Gathering
Cambia de categoría en cada show y todo el motor va detrás: detección, compuertas y llamada de identificación apuntan al endpoint correcto. Cada coincidencia vuelve con nombre, set, código de set, número de carta, serie y año.
Juegos de cartas coleccionables
collectibles/v2/tcg_id Cartas sueltas de TCG, modernas y vintage, directamente desde el vídeo. El endpoint lee la ilustración, el marco y el texto, así que la carta se identifica a partir de la misma imagen que ven tus espectadores: sin buscar el símbolo del set ni forzar la vista con el número de coleccionista.
- Pokémon
- Magic: The Gathering
- Yu-Gi-Oh!
- One Piece
- Lorcana
- Digimon
- Dragon Ball Super
- Flesh and Blood
- Star Wars Unlimited
- Star Wars Destiny
- MetaZoo
- Riftbound
- Weiss Schwarz
- Union Arena
- Force of Will
- Grand Archive
- Vanguard
- Marvel Champions
- Sorcery
- Final Fantasy
- Gundam
- Duel Masters
- Naruto Mythos
- Hololive
- Garbage Pail Kids
Cartas deportivas sport_id
Rookies, paralelas, inserts y autógrafos de todos los grandes deportes (béisbol, baloncesto, fútbol americano, fútbol, hockey y más): la carta exacta, el set exacto, el año exacto.
Cartas graduadas (slabs) slab_id
Lee la etiqueta de la funda de graduación: la carta dentro de un slab de PSA, BGS o CGC, identificada sin abrirlo.
Cómics comics_id
Portadas identificadas igual que las cartas: título, número y año, a partir de un solo fotograma quieto.
Conecta un reconocedor propietario, o el tuyo propio
Todo lo que decide si llamar ocurre antes de la identificación en sí: la detección, la compuerta de movimiento y la compuerta de misma carta son locales e independientes del proveedor. La llamada es un único paso intercambiable: Ximilar de serie, un servicio propietario de identificación de cartas, o un modelo que hayas entrenado tú y alojes en tu propio hardware.
Es una interfaz mínima: entra un recorte de la carta, sale una coincidencia. Implementa IdentifyTarget y todas las compuertas, limitadores y umbrales que van delante siguen funcionando exactamente igual: un recorte por carta distinta, responda quien responda.
# tu propio reconocedor, el mismo motor class HouseIdentifier(IdentifyTarget): def identify(self, crop_bgr): return my_service.match(crop_bgr) # un recorte por carta distinta, en cualquiera de los dos casos $ cardstream-web --detector rfdetr
Una llamada por carta, no por fotograma
La idea es reducir el análisis del directo a las llamadas que de verdad aportan algo nuevo. La alternativa de código abierto al SaaS cerrado de reconocimiento de cartas: sin plataforma intermediaria ni licencias por puesto. Tu hardware, tu clave de API y una máquina de estados que solo llama fuera cuando la carta en pantalla es realmente nueva.
Un pipeline ingenuo que procesa cada fotograma a 15 fps dispara 54.000 identificaciones por hora. cardstream dispara una por cada carta distinta que muestras: alrededor de cien en esa misma hora.
La misma hora, el mismo vídeo, las mismas cartas: 54.000 llamadas frente a unas 100. Las compuertas de movimiento e identidad se ejecutan en local, en tu propio hardware, y solo sale una llamada cuando una carta realmente nueva se queda quieta en el encuadre.
Sin suscripción SaaS, sin precio por puesto, sin dependencia de un proveedor. Autoaloja todo el stack, identificación incluida, o conéctate a la API de Ximilar.
Todo lo que necesita un show de cartas en directo
Un copresentador al que no se le escapa ni una carta: para vendedores de live commerce en plataformas tipo Whatnot o Fanatics Live, box breaks, directos de tiendas de cartas y catalogación de colecciones. Donde haya una cámara y cartón, sirve.
Identificada al entrar en el encuadre
Sin botón de escanear. Sin esperas. Solo muestra la carta: nombre, set y confianza pasan del cartón al nombre en pantalla en medio segundo, en pleno directo.
Una llamada por carta
Una compuerta de movimiento y una compuerta de identidad por embedding se ejecutan en local, en tu propia CPU. Mantén una carta quieta: cero llamadas repetidas. Cambia de carta: exactamente una llamada nueva.
Cualquier fuente de vídeo
Webcam, archivos de vídeo, RTSP, RTMP y SRT, tanto en modo pull como recibidos directamente desde OBS con --listen. Feeds JPEG por WebSocket para montajes a medida.
Cualquier backend de identificación
Ximilar collectibles/v2 listo para usar, o apunta el mismo motor a un reconocedor de cartas propietario, o a uno que hayas entrenado y alojes tú mismo.
Trae tus propios modelos
Los pesos del localizador son nuestros: un modelo de segmentación RF-DETR ajustado, con licencia Apache-2.0, que descarga el instalador. También se admiten detectores de cajas (RF-DETR, RT-DETRv2) si prefieres traer tu propia exportación.
Código abierto, autoalojado
Un solo paquete de Python con licencia permisiva. Léelo, haz un fork y ejecútalo en tu propio hardware. Tu clave, tus datos, tu infraestructura.
Lo bastante listo para saber cuándo no llamar a la API
Entre tu directo y la API hay una máquina de estados. Cada fotograma pasa por DecisionCore, una única máquina de estados que se ejecuta en local, y tres compuertas locales deciden cuándo está justificado el único paso que llama a la API.
Detectar
local · sin llamada a la APIEncuentra el cuadrilátero de la carta y endereza un recorte limpio. La compuerta de movimiento local lo regula en tres niveles: en movimiento, quieto con carta, vacío.
Compuerta de movimiento
local · sin llamada a la APIUna diferencia media entre fotogramas, barata de calcular. Solo cuando la escena lleva N fotogramas quieta merece la pena mirar la carta de cerca. ¿Sigue moviéndose? Espera.
Compuerta de identidad
local · sin llamada a la APIUna comparación de embeddings responde a una sola pregunta: ¿es la misma carta de antes? Si lo es, se reenvía el resultado guardado en caché.
Identificar
ximilar · 1 llamadaSolo una carta realmente nueva y quieta dispara una identificación de Ximilar: asíncrona, con debounce y fuera del bucle de fotogramas. El resultado vuelve al directo al instante.
¿Haces directos por tu cuenta?
Una persona, una cámara y una larga noche de breaks: no deberías necesitar un equipo de ingenieros para saber qué carta hay en pantalla. Conecta el directo que ya estás emitiendo y deja que cardstream lo analice en vivo, tanto si vendes en un marketplace como directamente desde tu propio canal.
- Whatnot
- Fanatics Live
- eBay Live
- TikTok Shop
- Twitch
- YouTube Live
- tu propia web
Sin acceso a tu cuenta, sin claves de API del marketplace, sin bots en tu chat, y sin ninguna relación con estas plataformas. cardstream lee tu vídeo y nada más.
Ya transmites desde OBS
Añade una salida más junto a la que alimenta tu show. Tus compradores ven exactamente lo mismo que antes; una copia de la misma señal llega a cardstream y cada carta que pasa por la mesa queda identificada al vuelo. El modo escucha de abajo necesita el binario ffmpeg del sistema. O sáltate la segunda salida por completo y deja que cardstream lea la cámara virtual de OBS como una webcam normal.
$ cardstream-web --listen \ --source rtmp://0.0.0.0:1935/live # apunta aquí el segundo destino de OBS
O la cámara que ya tienes sobre la mesa
Cámara cenital, capturadora, el móvil como webcam: lo que uses para abrir y mostrar las cartas. El análisis corre en el equipo que está junto a la cámara, así que, por defecto, de la habitación no sale más que un recorte por carta.
$ cardstream-web --source 0 # webcam · interfaz en el navegador en localhost
O cualquier cosa con una URL
Codificadores, mezcladores, restreamers, un segundo estudio al otro lado de la ciudad. Pull por RTSP, RTMP y SRT, más feeds JPEG por WebSocket cuando el montaje es casero.
$ cardstream-web \
--source rtsp://studio/stream1 Overlay en directo
Nombre, set y confianza aparecen en cuanto la carta se queda quieta, listos para leerlos en voz alta o para componerlos de vuelta en tu escena.
Cada carta, registrada
Un historial continuo de todo lo que has mostrado: una miniatura de cada carta y cuánto tiempo estuvo en pantalla. Guárdalo en tu cuenta de Ximilar y revisa el show a la mañana siguiente: qué se vendió y cuánto valía.
A la medida de una sola persona
Sin comisión de plataforma ni licencia por puesto. Un show de tres horas son un puñado de llamadas de identificación, no una por fotograma.
Tu show, guardado y listo para revisar
cardstream se ejecuta en tu equipo y, por defecto, no guarda nada. Añade una opción y cada carta que muestres se guardará también en una sesión de tu cuenta de Ximilar, con su precio, su tiempo en pantalla y el recorte a partir del cual se identificó. Abre la app de Ximilar después del show y mira cuánto valió.
$ cardstream-web --price-stats \ --ximilar-stream NEW # muestra el id de la sesión y guarda durante el show
El show en cifras
Productos mostrados, llamadas de pago a la API, valor de mercado y tiempo medio en pantalla de cada sesión, junto a los productos más valiosos y los sets más frecuentes.
Cada carta, con su imagen
Cada fila conserva la carta, el set, el número, el precio y el recorte a partir del cual se identificó. Busca en la lista por producto o set y filtra tus sesiones por estado, plataforma y fecha.
Conviértelo en tu registro
Marca lo que se vendió, añade una nota, corrige una coincidencia equivocada o su precio y borra una falsa. Ponle nombre a la sesión y añade tus propios metadatos: un número de lote, costes, compradores.
Continúa donde lo dejaste
¿Se reinició a mitad del show? Pasa el id de la sesión en lugar de NEW y el show sigue en la misma sesión, aunque se hubiera cerrado. --ximilar-workspace la guarda en un espacio de trabajo de equipo.
Desactivado por defecto: sin --ximilar-stream, la llamada de identificación es lo único que sale de tu equipo. Para guardar, tu cuenta de Ximilar necesita el servicio Cardstream; solo se cobra el inicio de una sesión, y --no-ximilar-stream-images guarda únicamente el texto.
De cero a identificar en directo en 3 pasos
Instálalo
Un entorno virtual, el wheel de la versión publicada (con checksum verificado), los pesos de los modelos y los dos comandos en tu PATH. Usa el script, instala el mismo wheel desde PyPI con pip (los pesos se descargan aparte) o clona el repositorio y compílalo tú mismo. Docker y Windows están en la página de descarga.
$ curl -fsSL https://raw.githubusercontent.com/Ximilar-com/cardstream/main/scripts/install.sh | sh # otras formas de instalar → cardstream.ai/download
$ pip install 'cardstream[client,onnx]' # o bien: uv tool install 'cardstream[client,onnx]' # el wheel no incluye los pesos: descomprime los dos tarballs de cardstream.ai/models # y apunta los flags hacia ellos: $ cardstream-web --segmentor-model segmentation_model/onnx/model.onnx \ --embed-model similarity_model/onnx/model.onnx
$ git clone https://github.com/Ximilar-com/cardstream && cd cardstream $ ./scripts/build-from-source.sh --models $ source .venv/bin/activate
Conecta un sistema de identificación
Ximilar collectibles/v2 viene listo para usar: una clave de ximilar.com es la única credencial que necesita todo el sistema. O apunta ese mismo paso a tu propio reconocedor.
$ export XIMILAR_API_KEY=your-key
Apunta una cámara a una carta
Abre la interfaz en el navegador con tu webcam, o pásale tu show: pull por RTSP, o deja que OBS le envíe RTMP directamente. ¿Vas a abrir un solo set toda la noche? Preajústalo y el endpoint deja de adivinar: Pokémon en inglés de CRI son tres cosas menos en las que fallar. Indica --alphabet siempre que indiques --game, porque preajustar el juego desactiva la detección de sistema de escritura del propio endpoint. Añade --price-stats y cada coincidencia trae además precios de mercado en USD (mediana, rango y última venta) tanto en la carta como en el historial. Añade --ximilar-stream NEW para guardar el show en tu cuenta de Ximilar y revisarlo después.
$ cardstream-web # → http://127.0.0.1:8001 — muestra una carta a la cámara # Cartas Pokémon en inglés, un solo set (CRI - Chaos Rising), con precios de mercado en USD: $ cardstream-web --game Pokemon --set-code CRI --alphabet latin --price-stats
Código abierto. Autoalojado. Tu directo, tu stack.
Sin plataforma intermediaria ni licencias por puesto: conecta la API de Ximilar o tu propio sistema de identificación y cardstream lo llama una vez por cada carta distinta, no una vez por fotograma. Da igual si haces breaks en Whatnot, llevas un show al estilo de Fanatics Live o transmites tu propio live commerce: pon cardstream en marcha esta misma noche con el hardware que ya tienes.