cardstream
오픈소스 Powered by Ximilar 베타 버전

라이브 방송을 위한 최고의 카드 식별. 브레이크, 개봉, 라이브 쇼를 위해 만들어졌습니다.

cardstream은 브레이크, 개봉, 쇼 영상을 지켜보다가 트레이딩 카드가 프레임에 들어오는 순간 식별합니다. 이름, 세트, 신뢰도를 실시간으로 보여 줍니다. 카드 추적 시스템으로 라이브 쇼핑 방송을 분석하세요. 더 많은 것을 알고 싶은 스트리머를 위한 도구입니다.

식별 대상

포켓몬부터 매직 더 개더링까지

쇼마다 카테고리를 바꾸면 엔진 전체가 따라갑니다. 감지, 게이트, 식별 호출이 모두 올바른 엔드포인트를 가리킵니다. 모든 매칭 결과에는 이름, 세트, 세트 코드, 카드 번호, 시리즈, 연도가 담겨 돌아옵니다.

🃏

트레이딩 카드 게임

collectibles/v2/tcg_id
Ximilar 준비 완료

최신 카드부터 빈티지까지, TCG 싱글 카드를 방송 화면에서 곧바로 식별합니다. 엔드포인트가 일러스트, 테두리, 텍스트를 함께 읽기 때문에 시청자가 보고 있는 바로 그 화면에서 카드를 식별합니다. 세트 심볼을 찾거나 컬렉터 번호를 들여다볼 필요가 없습니다.

  • 포켓몬
  • 매직 더 개더링
  • 유희왕
  • 원피스
  • 로르카나
  • 디지몬
  • 드래곤볼 슈퍼
  • Flesh and Blood
  • Star Wars Unlimited
  • Star Wars Destiny
  • MetaZoo
  • Riftbound
  • 바이스 슈바르츠
  • 유니온 아레나
  • Force of Will
  • Grand Archive
  • 뱅가드
  • Marvel Champions
  • Sorcery
  • 파이널 판타지
  • 건담
  • 듀얼 마스터즈
  • Naruto Mythos
  • 홀로라이브
  • Garbage Pail Kids
🏅

스포츠 카드 sport_id

루키, 패럴렐, 인서트, 사인 카드까지. 야구, 농구, 미식축구, 축구, 하키 등 주요 스포츠 전반에 걸쳐 정확한 카드, 정확한 세트, 정확한 연도를 식별합니다.

출시 예정
🧊

그레이딩 슬랩 slab_id

그레이딩 케이스의 라벨을 읽습니다. PSA, BGS, CGC 슬랩 안에 든 카드를 케이스를 깨지 않고 식별합니다.

출시 예정
📚

코믹스 comics_id

카드와 같은 방식으로 표지를 식별합니다. 정지된 프레임 한 장에서 제목, 호수, 연도를 알아냅니다.

출시 예정
특정 제공업체에 묶이지 않습니다

전용 인식기든 직접 만든 것이든 연결하세요

호출할지 여부를 결정하는 모든 과정은 식별 자체보다 앞서 이루어집니다. 감지, 모션 게이트, 동일 카드 게이트는 모두 로컬에서 실행되며 제공업체에 종속되지 않습니다. 호출 자체는 교체 가능한 한 단계일 뿐입니다. 기본 제공되는 Ximilar, 전용 카드 식별 서비스, 또는 직접 학습시켜 자체 하드웨어에서 호스팅하는 모델 중 무엇이든 됩니다.

인터페이스는 아주 작습니다. 카드 크롭이 들어가면 매칭 결과가 나옵니다. IdentifyTarget을 구현하면 그 앞단의 모든 게이트, 스로틀, 임계값이 이전과 똑같이 동작합니다. 누가 응답하든 서로 다른 카드 한 장당 크롭 한 번은 그대로입니다.

# 직접 만든 인식기, 같은 엔진
class HouseIdentifier(IdentifyTarget):
    def identify(self, crop_bgr):
        return my_service.match(crop_bgr)

# 어느 쪽이든 서로 다른 카드 한 장당 크롭 한 번
$ cardstream-web --detector rfdetr
왜 cardstream.ai인가?

프레임마다가 아니라 카드 한 장당 한 번의 호출

핵심은 방송 분석에 드는 호출을 정말로 새로운 정보를 주는 것만으로 줄이는 데 있습니다. 폐쇄형 카드 인식 SaaS를 대신하는 오픈소스 대안. 중간에 끼는 플랫폼도, 좌석 라이선스도 없습니다. 여러분의 하드웨어, 여러분의 API 키, 그리고 프레임 속 카드가 정말로 새로울 때만 외부에 호출하는 상태 머신뿐입니다.

54,000 → ~100
시간당 API 호출 수

프레임마다 처리하는 단순한 파이프라인은 15 fps에서 시간당 54,000번의 식별을 실행합니다. cardstream은 보여준 서로 다른 카드 한 장당 한 번만 호출합니다. 같은 한 시간에 100번 정도입니다.

540×
식별 호출 감소

같은 한 시간, 같은 영상, 같은 카드로 54,000번 대 약 100번. 모션 게이트와 동일성 게이트는 여러분의 하드웨어에서 로컬로 실행되며, 정말로 새로운 카드가 프레임 안에 자리 잡을 때만 호출이 나갑니다.

$0
플랫폼 수수료

SaaS 구독도, 좌석당 과금도, 종속도 없습니다. 식별까지 포함한 전체 스택을 직접 호스팅하거나 Ximilar API에 연결하세요.

기능

카드 스트리밍 쇼에 필요한 모든 것

카드를 한 장도 놓치지 않는 공동 진행자. Whatnot과 Fanatics Live 같은 플랫폼의 라이브 커머스 판매자, 박스 브레이크, 카드샵 방송, 컬렉션 목록화까지. 카메라와 카드가 만나는 곳이라면 어디든.

⚡

프레임에 들어오는 순간 알 수 있습니다

스캔 버튼도, 기다림도 없습니다. 카드를 보여주기만 하면 이름, 세트, 신뢰도가 약 0.5초 만에 방송 화면에 실시간으로 나타납니다.

🎯

카드 한 장당 한 번의 호출

모션 게이트와 임베딩 기반 동일성 게이트가 여러분의 CPU에서 로컬로 실행됩니다. 카드를 가만히 들고 있으면 반복 호출은 0번. 카드를 바꾸면 정확히 한 번의 새 호출입니다.

📡

어떤 스트림 소스든

웹캠, 동영상 파일, RTSP, RTMP, SRT를 풀 방식으로 가져오거나 --listen으로 OBS에서 곧바로 푸시할 수 있습니다. 직접 구성한 장비를 위한 WebSocket JPEG 피드도 지원합니다.

🔌

어떤 식별 백엔드든

Ximilar collectibles/v2를 기본으로 지원합니다. 같은 엔진을 전용 카드 인식기나 직접 학습시켜 호스팅하는 모델로 향하게 할 수도 있습니다.

🧠

직접 만든 모델 사용

로케이터 가중치는 저희가 만든 것입니다. 파인튜닝한 RF-DETR 세그멘테이션 모델로, Apache-2.0 라이선스이며 설치 프로그램이 가져옵니다. 직접 내보낸 모델을 쓰고 싶다면 박스 디텍터(RF-DETR, RT-DETRv2)도 지원합니다.

🔓

오픈소스, 자체 호스팅

관대한 라이선스의 Python 패키지 하나. 읽고, 포크하고, 여러분의 하드웨어에서 실행하세요. 여러분의 키, 여러분의 데이터, 여러분의 인프라입니다.

작동 방식

API를 호출하지 말아야 할 때를 아는 똑똑함

스트림과 API 사이에 상태 머신이 자리합니다. 모든 프레임은 로컬에서 실행되는 하나의 상태 머신 DecisionCore를 거치고, 세 개의 로컬 게이트가 단 하나뿐인 API 단계가 정말로 필요한지 판단합니다.

1

감지

로컬 · API 호출 없음

카드의 사각형을 찾아 기울기를 보정한 깔끔한 크롭을 만듭니다. 로컬 모션 게이트가 움직임, 카드 있음·정지, 비어 있음의 세 단계로 스로틀링합니다.

2

모션 게이트

로컬 · API 호출 없음

가벼운 평균 프레임 차분입니다. 장면이 N 프레임 동안 정지한 뒤에야 카드를 자세히 볼 가치가 있다고 판단합니다. 아직 움직이고 있다면 기다립니다.

3

동일성 게이트

로컬 · API 호출 없음

임베딩 비교로 한 가지 질문에 답합니다. 아까와 같은 카드인가? 같은 카드라면 캐시된 결과를 다시 내보냅니다.

4

식별

Ximilar · 호출 1회

정말로 새로운 카드가 정지했을 때만 Ximilar 식별을 실행합니다. 비동기, 디바운스 적용, 프레임 루프 밖에서. 결과는 실시간으로 다시 전달됩니다.

스트리머, 브레이커, 샵을 위해

개인 스트리머이신가요?

한 사람, 카메라 한 대, 밤새 이어지는 브레이크. 화면에 어떤 카드가 있는지 알기 위해 엔지니어링 팀이 필요해서는 안 됩니다. 이미 진행 중인 방송을 연결하면 cardstream이 실시간으로 분석합니다. 마켓플레이스에서 판매하든 자신의 채널에서 직접 판매하든 마찬가지입니다.

  • Whatnot
  • Fanatics Live
  • eBay Live
  • TikTok Shop
  • Twitch
  • YouTube Live
  • 자체 사이트

계정 접근도, 마켓플레이스 API 키도, 채팅 봇도 필요 없습니다. 이들 플랫폼 어느 곳과도 제휴 관계가 없습니다. cardstream이 읽는 것은 영상뿐입니다.

01

이미 OBS로 방송하고 있다면

쇼에 송출하는 출력 옆에 출력을 하나 더 추가하세요. 구매자에게는 이전과 똑같은 화면이 보이고, 같은 피드의 복사본이 cardstream으로 들어와 테이블에 오르는 카드마다 지나가는 사이에 식별됩니다. 아래 리스너에는 시스템 ffmpeg 바이너리가 필요합니다. 두 번째 출력을 아예 건너뛰고 OBS 가상 카메라를 일반 웹캠처럼 cardstream이 읽게 할 수도 있습니다.

$ cardstream-web --listen \
      --source rtmp://0.0.0.0:1935/live
# OBS의 두 번째 출력 대상을 여기로
02

아니면 이미 테이블 위에 있는 카메라

오버헤드 캠, 캡처 카드, 웹캠 대용 스마트폰까지, 개봉하고 공개할 때 쓰는 것이면 무엇이든 됩니다. 분석은 카메라 옆 컴퓨터에서 실행되므로 기본적으로 방 밖으로 나가는 것은 카드 한 장당 크롭 한 장뿐입니다.

$ cardstream-web --source 0
# 웹캠 · 브라우저 UI는 localhost에서
03

아니면 URL이 있는 무엇이든

인코더, 스위처, 리스트리머, 시내 반대편의 두 번째 스튜디오. RTSP, RTMP, SRT 풀은 물론, 직접 만든 장비를 위한 WebSocket JPEG 피드도 지원합니다.

$ cardstream-web \
      --source rtsp://studio/stream1

실시간 오버레이

카드가 자리 잡는 순간 이름, 세트, 신뢰도가 나타납니다. 그대로 읽어 주거나 장면에 다시 합성할 수 있습니다.

모든 카드를 기록

보여 준 모든 카드가 실시간으로 기록됩니다. 카드마다 썸네일과 방송에 머문 시간이 함께 남습니다. Ximilar 계정에 저장해 두면 다음 날 아침 방송을 돌아보며 무엇이 팔렸고 얼마의 가치였는지 확인할 수 있습니다.

한 사람에게 맞는 규모

플랫폼 수수료도, 좌석 라이선스도 없습니다. 세 시간짜리 쇼도 프레임마다가 아니라 손에 꼽을 만큼의 식별 호출로 끝납니다.

Cardstream Cloud

방송을 저장하고, 끝난 뒤에 돌아보세요

cardstream은 여러분의 컴퓨터에서 실행되며 기본적으로 아무것도 저장하지 않습니다. 플래그 하나만 더하면 보여 준 모든 카드가 가격, 방송에 머문 시간, 식별에 쓰인 크롭과 함께 여러분의 Ximilar 계정 안의 세션에도 저장됩니다. 방송이 끝난 뒤 Ximilar 앱을 열어 그 방송의 가치를 확인하세요.

$ cardstream-web --price-stats \
    --ximilar-stream NEW
# 세션 id를 출력하고 방송 중에 저장합니다
Ximilar 앱에 저장된 세션: 보여 준 상품 수, 유료 API 호출, 시장 가치, 화면에 머문 평균 시간, 가장 값비싼 상품과 가장 자주 나온 세트.

숫자로 보는 방송

세션마다 보여 준 상품 수, 유료 API 호출, 시장 가치, 화면에 머문 평균 시간을 보여 주고, 가장 값비싼 상품과 가장 자주 나온 세트도 함께 정리합니다.

모든 카드를 이미지와 함께

각 행에는 카드, 세트, 번호, 가격, 식별에 쓰인 크롭이 남습니다. 목록은 상품이나 세트로 검색하고, 세션은 상태, 플랫폼, 날짜로 걸러 볼 수 있습니다.

나만의 기록으로

팔린 카드를 표시하고, 메모를 남기고, 잘못된 매칭이나 가격을 바로잡고, 잘못 잡힌 항목은 삭제하세요. 세션에 이름을 붙이고 로트 번호, 비용, 구매자 같은 나만의 메타데이터도 더할 수 있습니다.

멈춘 곳에서 이어서

방송 도중에 재시작했나요? NEW 대신 세션 id를 넘기면 세션이 닫혔더라도 같은 세션에서 방송이 이어집니다. --ximilar-workspace를 쓰면 팀 워크스페이스에 저장됩니다.

기본값은 꺼짐입니다. --ximilar-stream이 없으면 컴퓨터 밖으로 나가는 것은 식별 호출뿐입니다. 저장하려면 Ximilar 계정에 Cardstream 서비스가 있어야 합니다. 과금되는 것은 세션 시작뿐이며, --no-ximilar-stream-images를 쓰면 텍스트만 저장합니다.

빠른 시작

3단계로 제로에서 실시간 식별까지

1

설치하기

가상 환경(venv), 릴리스 wheel(체크섬 검증), 모델 가중치, 그리고 PATH에 등록된 두 명령어가 준비됩니다. 스크립트를 사용하거나, PyPI에서 같은 wheel을 pip install하거나(가중치는 별도 다운로드), 저장소를 클론해 직접 빌드하세요. Docker와 Windows는 다운로드 페이지에 있습니다.

$ curl -fsSL https://raw.githubusercontent.com/Ximilar-com/cardstream/main/scripts/install.sh | sh
# 다른 설치 방법 → cardstream.ai/download
$ pip install 'cardstream[client,onnx]'   # 또는: uv tool install 'cardstream[client,onnx]'
# wheel에는 가중치가 없습니다 — cardstream.ai/models 에서 두 tarball을 풀고
# 플래그로 그 위치를 지정하세요:
$ 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
2

식별 시스템 연결하기

Ximilar collectibles/v2를 기본 지원합니다. 시스템 전체에 필요한 인증 정보는 ximilar.com에서 발급받는 키 하나뿐입니다. 아니면 같은 단계를 자체 인식기로 향하게 할 수도 있습니다.

$ export XIMILAR_API_KEY=your-key
3

카메라를 카드에 비추기

웹캠으로 브라우저 UI를 열거나 쇼 영상을 입력하세요. RTSP로 풀하거나 OBS가 RTMP로 곧바로 푸시하게 할 수 있습니다. 밤새 한 세트만 브레이크하나요? 미리 지정해 두면 엔드포인트가 추측을 멈춥니다. CRI의 영어판 포켓몬이라고 알려 주면 틀릴 수 있는 요소가 세 가지 줄어듭니다. --game을 지정할 때는 반드시 --alphabet도 지정하세요. 게임을 미리 지정하면 엔드포인트 자체의 문자 체계 감지가 꺼집니다. --price-stats를 추가하면 모든 매칭 결과에 USD 시장 가격(중앙값, 범위, 최근 판매가)도 함께 붙어 카드와 기록 양쪽에 표시됩니다. --ximilar-stream NEW를 추가하면 쇼를 Ximilar 계정에 저장해 나중에 돌아볼 수 있습니다.

$ cardstream-web
# → http://127.0.0.1:8001 — 카드를 들어 보세요

# 영어판 포켓몬 카드, 세트 하나(CRI - Chaos Rising), USD 시장 가격 포함:
$ cardstream-web --game Pokemon --set-code CRI --alphabet latin --price-stats

오픈소스. 자체 호스팅. 여러분의 방송, 여러분의 스택.

중간에 끼는 플랫폼도, 좌석 라이선스도 없습니다. Ximilar API 또는 자체 식별 시스템을 연결하면 cardstream은 프레임마다가 아니라 서로 다른 카드 한 장당 한 번만 호출합니다. Whatnot에서 브레이크를 하든, Fanatics Live 같은 쇼를 진행하든, 자체 라이브 커머스 환경을 방송하든, 이미 가진 하드웨어로 오늘 밤 cardstream을 실행해 보세요.