cardstream
Gids

Analyseer je stream op Whatnot of Fanatics Live

cardstream logt nooit in bij Whatnot, Fanatics Live of welke marktplaats dan ook. Het kijkt op je eigen machine naar dezelfde video die je ze toch al stuurt, en benoemt elke kaart die op tafel komt. Dit is de hele weg, van niets tot een live overlay: ongeveer een kwartier, eenmalig.

Een computer bij de camera

macOS, Linux of Windows. Draai je er al OBS op, dan is dat de juiste machine: de analyse gebeurt lokaal, dus er hoeft niets over het netwerk.

De video die je al verstuurt

Een OBS-scène, een webcam, een capture card of een encoder. cardstream tapt af wat je hebt; je hoeft je show er niet voor om te bouwen.

Een Ximilar-API-sleutel

Het enige inloggegeven in het hele systeem, en het blijft op je eigen machine. Geen account bij een marktplaats, geen wachtwoord, geen bot in je chat.

Eerst

Krijg het los van je show aan de praat

Voordat dit ook maar iets met je show te maken krijgt: bewijs dat het werkt met de webcam van je laptop. Drie commando’s.

01

Installeer het

Het script bouwt een venv in ~/.cardstream, controleert de release-wheel aan de hand van de checksums, haalt de modelgewichten op en zet de commando’s in je PATH. Installeren via wheel, Docker of broncode staat op de downloadpagina.

$ curl -fsSL https://raw.githubusercontent.com/Ximilar-com/cardstream/main/scripts/install.sh | sh
02

Voeg je sleutel toe

De identificatie loopt standaard via Ximilar collectibles/v2, of via je eigen systeem in de plaats daarvan. XIMILAR_API_KEY is de enige omgevingsvariabele die ergens wordt uitgelezen. Zet hem in je shellprofiel, zodat hij op de avond van je show een herstart overleeft.

$ export XIMILAR_API_KEY=your-key
03

Houd een kaart voor je laptop

Dit opent de browser-UI met je ingebouwde webcam. Houd een kaart even stil: de overlay laat de toestandsmachine zien terwijl ze beslist, en daarna de naam, de set en de betrouwbaarheid, met naast de match hoe lang de identificatie-aanroep duurde. Dat is het hele product. De rest van deze pagina gaat alleen over waar de pixels vandaan komen.

$ cardstream-web
# → http://127.0.0.1:8001
Daarna

Richt het op je show

Kies één rij. Welke, dat hangt van één vraag af: stream je vanaf een desktop of vanaf een telefoon?

Wat niet kan

cardstream richten op de openbare afspeelpagina van je show op Whatnot of Fanatics. Er bestaat geen uitgaande stream-URL voor je eigen show, en de speler uitlezen zou seconden vertraging opleveren, nog los van de voorwaarden van het platform. Elke route hieronder tapt je video af vóór de marktplaats. Precies daarom heeft cardstream van hen geen account, geen wachtwoord en geen API-sleutel nodig.

A
Je streamt vanuit OBS op een desktop

De virtuele camera van OBS

Begin hier

OBS kan je samengestelde scène aan het besturingssysteem aanbieden als een gewone webcam. cardstream opent die dan net als elke andere camera: geen tweede encodering, geen extra belasting voor je encoder en geen ffmpeg om te installeren.

  1. Klik in OBS in het dock Bedieningselementen op Virtuele camera starten.
  2. Start cardstream met die camera als webcamindex. Index 0 is meestal je ingebouwde camera, dus de virtuele is doorgaans 1. Probeer 0, 1, 2 tot je je scène ziet.
$ cardstream-web --source 1

Probeer dit één keer vóór een show uit, niet tijdens: op macOS heeft de terminal toestemming voor de camera nodig, en als OpenCV het virtuele apparaat op jouw machine niet kan openen, werkt route B overal.

B
Je streamt vanuit OBS en wilt exact de pixels van de uitzending

Een tweede uitvoer vanuit OBS

cardstream luistert op je eigen machine en OBS pusht er een kopie naartoe. Whatnot of Fanatics blijven precies ontvangen wat ze altijd al kregen: dit is een extra doel, nooit een omleiding.

  1. Start eerst de listener; die wacht op de push en verbindt vanzelf opnieuw.
  2. OBS heeft maar één Stream-uitvoer, dus stuur de kopie via een tweede: ofwel met de plug-in obs-multi-rtmp, ofwel via Instellingen → Uitvoer → Opnemen → Aangepaste Uitvoer (FFmpeg), type Uitvoer naar URL, URL rtmp://127.0.0.1:1935/live, container flv. Klik daarna op Opname starten.
  3. Deze route roept de ffmpeg-binary van je systeem aan: voer eerst brew install ffmpeg uit.
$ cardstream-web --listen \
    --source rtmp://0.0.0.0:1935/live
C
Je gaat live vanaf een telefoon, zoals de meeste verkopers

Een eigen camera op tafel

Een telefoon die rechtstreeks naar de app pusht, geeft je niets om af te takken. Jaag dus niet langer op de uitgaande stream en geef cardstream zijn eigen blik op dezelfde tafel: een tweede webcam erboven, of de HDMI-uitgang van de camera naar een capture card.

  1. Richt een webcam of capture card op de plek waar je de kaarten laat zien.
  2. Draai het op de machine naast die camera.
$ cardstream-web --source 0

Het hoeft niet de hoek te zijn die je kopers zien. Een strak, goed belicht shot van bovenaf identificeert beter dan een gecomprimeerde feed van een marktplaats ooit zal doen.

D
Je werkt met een encoder, een switcher of een IP-camera

Alles met een URL

rtsp://, rtmp:// en srt:// worden rechtstreeks opgehaald, plus ws://-JPEG-feeds als je opstelling zelfgebouwd is. Opnieuw verbinden gebeurt met een begrensde backoff, dus een studioverbinding die midden in een break wegvalt, komt terug zonder dat je er iets voor doet.

  1. Geef het de URL die je encoder al publiceert.
  2. De browserpagina wordt een passieve kijker: de analyse loopt ook als er geen browser openstaat.
$ cardstream-web \
    --source rtsp://studio/stream1
Voordat je live gaat

Stel het af op de show die je draait

De standaardinstellingen zijn eerlijk, maar een break is geen willekeurig camerabeeld: meestal weet je wat je gaat openen voordat je het opent.

04

Vertel het wat je gaat breaken

Vul je het spel of de set vooraf in, dan wordt de zoekruimte kleiner: snellere aanroepen, betere matches. Eén regel: geef altijd --alphabet mee als je --game meegeeft. Is het spel vooraf ingevuld, dan schakelt het endpoint zijn eigen alfabetdetectie uit en gaat het uit van latin, waardoor een Japanse kaart met zijn Engelse druk zou matchen.

$ cardstream-web --source 1 \
    --game "Pokémon" --alphabet japanese --set-code M4
05

Verander midden in de stream van gedachten

Is het volgende kavel een ander spel, dan hoef je niets opnieuw te starten: categorie, spel, setcode, alfabet en de drempels voor resultaat en scherpte pas je allemaal aan in het instellingenvenster in de browser terwijl de stream loopt. Al het andere (detector, filter, resolutie) wordt één keer bij het opstarten uitgelezen, dus kies dat nu.

06

Houd het logboek bij, houd de poort dicht

--split-results geeft elke verschijning een eigen rij in plaats van herhalingen samen te voegen: een doorlopende lijst van wat je hebt laten zien, in de volgorde waarin je het liet zien, klaar om achteraf naast je bestellingen te leggen. Laat --host op de standaardwaarde 127.0.0.1 staan: dat proces bevat je sleutel en de lokale UI heeft geen authenticatie, dus ze mag nooit vanaf je LAN bereikbaar zijn.

$ cardstream-web --source 1 --split-results
07

Sla de show op voor de ochtend erna

Voeg --ximilar-stream NEW toe en elke rij van die geschiedenis (de kaart, de prijs, hoe lang hij op stream was en de uitsnede waarop hij is geïdentificeerd) wordt tijdens het streamen opgeslagen in een sessie in je Ximilar-account. Daarna toont het onderdeel Cardstream van de Ximilar-app de hele show: de waarde, de waardevolste kaarten en elke kaart met zijn afbeelding. Daar markeer je ook wat verkocht is en herstel je een verkeerde match. Start de client midden in de show opnieuw op, start hem dan weer met de getoonde sessie-id in plaats van NEW en dezelfde show loopt door. Opslaan in een teamworkspace doe je met --ximilar-workspace.

$ cardstream-web --source 1 --price-stats --ximilar-stream NEW
# na een herstart:
$ cardstream-web --source 1 --price-stats --ximilar-stream <session-id>

En dan: doe je show. De detectie, het bewegingsfilter en het identiteitsfilter draaien allemaal lokaal op je machine; de identificatie-aanroep gaat één keer uit per kaart die je op tafel legt. Dat zijn er ongeveer honderd in een uur, tegenover de 54.000 frames die dat uur telt. De rekensom staat hier.

Als er iets niet klopt

De zes dingen die echt misgaan

De virtuele camera staat niet in de lijst

Loop --source 0, 1, 2 een voor een af: de indexen zijn wat het besturingssysteem uitdeelt. Geef je terminal op macOS toegang tot de camera via Systeeminstellingen → Privacy en beveiliging. Krijgt OpenCV hem dan nog niet open, stap dan over op route B.

“ffmpeg not found”

Alleen --listen en --ffmpeg roepen de binary van je systeem aan. Installeer hem (brew install ffmpeg) en start opnieuw; de routes met de virtuele camera, een webcam of gewoon ophalen hebben niets extra’s nodig.

OBS laat me geen tweede stream toevoegen

Dat is een beperking van OBS, niet van cardstream: het heeft maar één Stream-uitvoer. De plug-in obs-multi-rtmp voegt echte extra doelen toe; de opnameroute via Aangepaste Uitvoer (FFmpeg) uit route B werkt met een standaard-OBS.

Kaarten worden gevonden maar nooit gematcht

Bijna altijd ligt het aan de resolutie of aan beweging. Het kaartnummer moet leesbaar zijn in het frame dat je verstuurt: houd OBS op 1080p, houd de kaart even stil als je hem laat zien, en maak pas daarna --result-threshold ruimer (standaard 0.9; hoger laat zwakkere matches door, 1.0 laat alles door).

Dezelfde kaart wordt twee keer geïdentificeerd

Het identiteitsfilter gaf de twee beelden een score onder --similarity-threshold (standaard 0.85) en zag er een nieuwe kaart in. Zet hem iets lager. Leg je een kaart neer en pak je hem weer op, verhoog dan --forget-after: na 2 seconden afwezigheid wordt een kaart bewust als nieuw behandeld.

Er wordt helemaal niets gedetecteerd

Start met --show-detection om de bounding box te tekenen: de detectie draait altijd, ze wordt standaard alleen niet getekend. Geen bounding box betekent dat de kaart te klein is of te snel door het beeld gaat; een bounding box zonder match brengt je bij de rij hierboven.

Kom je er nog niet uit? De README beschrijft elke flag, en het docs-overzicht groepeert ze naar wat je wilt bereiken.

Open source. Zelf gehost. Jouw stream, jouw stack.

Geen platform ertussen, geen licentie per gebruiker: koppel de Ximilar-API of je eigen identificatiesysteem, en cardstream roept het één keer per nieuwe kaart aan in plaats van één keer per frame. Of je nu breaks doet op Whatnot, een show draait zoals op Fanatics Live of live verkoopt via je eigen opstelling: draai cardstream vanavond nog, op de hardware die je al hebt.