CLI 빠른 시작
CLI를 설치하고 인증한 뒤, 터미널에서 몇 분 만에 첫 팟캐스트를 만들어 보세요.
이 가이드는 아무것도 설치되지 않은 환경에서 완성된 팟캐스트 에피소드까지 가는 과정을 다룹니다. listenhub 바이너리를 설치하고, 인증하고(대화형 사용에는 OAuth, 스크립트에는 API 키), 첫 생성 명령을 실행합니다. 이어서 폴링이 어떻게 동작하는지와 결과를 읽는 방법을 설명합니다.
Node.js >= 20이 필요합니다. CLI는 ESM 전용이며 listenhub 바이너리로 전역 설치됩니다.
대화형 설정 (OAuth)
직접 터미널 앞에서 작업할 때 이 방식을 사용하세요. 브라우저를 통해 로그인하며, 사용자 계정 권한으로 동작합니다.
CLI 설치
npm install -g @marswave/listenhub-cli이렇게 하면 listenhub 바이너리가 PATH에 등록됩니다. 확인해 보세요:
listenhub --version
listenhub --help로그인
listenhub auth login브라우저가 열리면서 OAuth를 완료합니다. 승인하고 나면 CLI가 토큰을 ~/.config/listenhub/credentials.json(권한 0600)에 저장하고, 로그인한 계정을 출력합니다. 토큰은 자동으로 갱신되므로 머신당 한 번만 하면 됩니다.
세션 상태는 언제든지 확인할 수 있습니다:
listenhub auth status첫 팟캐스트 만들기
주제 하나로 짧은 단독 진행 에피소드를 생성합니다:
listenhub podcast create --query "AI agent trends in 2026" --mode quick이 명령은 작업을 제출한 뒤 에피소드가 준비될 때까지 폴링하며, 스피너로 진행 상황을 보여 줍니다. 완료되면 에피소드 ID, 제목, 상태를 출력합니다.
podcast create에서 알아 둘 만한 플래그 몇 가지:
| 플래그 | 설명 |
|---|---|
--query <text> | 에피소드의 주제 또는 프롬프트. |
--source-url <url> | 에피소드의 근거로 삼을 참조 URL. 반복 지정 가능. |
--source-text <text> | 에피소드의 근거로 삼을 참조 텍스트. 반복 지정 가능. |
--mode <mode> | quick, deep, debate 중 하나. 기본값은 quick. |
--lang <lang> | en, zh, ja 중 하나. 생략하면 쿼리에서 자동 감지. |
--speaker <name> | 이름으로 지정하는 스피커. 반복 지정 가능. 스피커가 한 명이면 단독 진행 에피소드가 되고, 두 명 이상이면 여러 목소리의 에피소드가 됩니다. |
--speaker-id <id> | 내부 ID로 지정하는 스피커. 반복 지정 가능. ID를 이미 알고 있다면 --speaker 대신 사용하세요. |
스피커를 생략하면 CLI가 감지된 언어에 맞는 기본값을 고릅니다. 보이스를 직접 고르려면 먼저 스피커 목록을 조회한 뒤(openapi 네임스페이스가 조회 가능한 목록을 제공합니다. 아래 API 키 사용 경로 참고) --speaker 또는 --speaker-id를 전달하세요.
결과 읽기
기본적으로 이 명령은 생성이 끝날 때까지 기다리므로, 최종 출력은 이미 완료된 에피소드를 반영합니다:
✓ Podcast created
ID: ep_xxx
Title: AI agent trends in 2026
Status: success최근 에피소드 목록은 언제든지 확인할 수 있습니다:
listenhub podcast list폴링 동작 방식
생성은 비동기로 처리됩니다. 모든 생성 명령은 작업을 제출해 ID를 받은 뒤, 작업이 종료 상태에 도달할 때까지 API를 폴링합니다.
- 간격. CLI는 10초마다 상태를 확인합니다.
- 타임아웃.
--timeout <seconds>로 대기 시간의 상한을 정합니다.podcast create의 기본값은300(5분)입니다. 작업이 끝나기 전에 타임아웃에 도달하면 명령은 종료 코드3으로 종료됩니다. 작업 자체는 서버에서 계속 진행되므로 나중에 ID로 가져올 수 있습니다. - 결과. 성공하면 완성된 에피소드를 출력합니다. 서버 측에서 실패하면 실패 내용을 출력하고 0이 아닌 코드로 종료합니다.
폴링을 아예 건너뛰려면 --no-wait을 전달하세요. 명령이 즉시 ID를 반환하고 0으로 종료합니다:
listenhub podcast create --query "AI agent trends in 2026" --no-wait
# ✓ Podcast submitted: ep_xxx스크립트와 CI에서는 --no-wait을 --json(-j)과 함께 사용하세요. --json은 기계가 읽을 수 있는 출력을 stdout으로 내보내므로(에러는 stderr에 남습니다) 바로 jq로 파이프할 수 있습니다:
ID=$(listenhub podcast create --query "Weekly recap" --no-wait -j | jq -r '.episodeId')그다음에는 원하는 주기로 직접 폴링하거나, 자체 작업 러너가 준비 완료를 알릴 때 에피소드를 가져오면 됩니다.
스크립트 환경 설정 (API 키)
서버나 CI에서는 OAuth 대신 API 키를 사용하세요. API 키 기반 명령은 listenhub openapi 네임스페이스 아래에 있으며, 키 소유자 권한으로 동작합니다.
API 키 만들기
listenhub.ai/settings/api-keys에서 키를 만드세요. 키는 lh_sk_로 시작합니다.
키를 사용할 수 있게 하기
두 가지 방법이 있습니다. CI나 일시적인 환경에서는 환경 변수를 설정하세요. CLI가 이것을 먼저 읽습니다:
export LISTENHUB_API_KEY="lh_sk_..."로컬에 계속 두고 쓰려면 디스크에 저장하세요. 아래 명령은 키를 입력받아 ~/.config/listenhub/openapi.json(권한 0600)에 기록합니다:
listenhub openapi config set-key무엇이 설정되어 있고 어느 소스가 적용 중인지는 다음으로 확인합니다:
listenhub openapi config show스피커 선택
OAuth 경로와 달리 openapi podcast create는 최소 하나의 --speaker-id를 요구합니다. 사용 가능한 보이스 목록을 조회해 ID를 복사하세요:
listenhub openapi speakers list --language enName, ID, Gender, Language 열로 이루어진 표가 출력됩니다. --speaker-id에 전달할 값은 ID 열입니다.
API 키로 팟캐스트 만들기
listenhub openapi podcast create \
--query "AI agent trends in 2026" \
--speaker-id <speaker-id> \
--mode quickOAuth 명령과 마찬가지로 작업을 제출하고 완료될 때까지 폴링한 뒤, 끝나면 에피소드 상세 정보를 출력합니다. --no-wait, --timeout <seconds>(기본값 300), --json 플래그도 동일하게 적용됩니다. 여러 목소리의 에피소드를 만들려면 --speaker-id를 여러 번 전달하고, 콘텐츠에 근거를 더하려면 --source-url / --source-text를 추가하세요.
나중에 ID로 에피소드를 가져오려면:
listenhub openapi podcast get <episode-id>종료 코드
스크립트는 종료 코드로 분기할 수 있습니다:
| 코드 | 의미 |
|---|---|
0 | 성공 |
1 | 에러(유효성 검사, API 에러, 네트워크 실패) |
2 | 인증이 필요하거나 유효하지 않음 — listenhub auth login을 다시 실행하거나 API 키를 확인하세요 |
3 | 타임아웃 — 작업이 끝나기 전에 폴링이 --timeout을 초과했습니다 |
크레딧 추정
생성에는 크레딧이 소비됩니다. 만들기 전에 사용하려는 제품의 estimate 명령(예: listenhub openapi video estimate 또는 listenhub video estimate)으로 비용을 확인하고, 남은 잔액은 listenhub openapi subscription으로 확인하세요. 비용이 고정되어 있다고 가정하지 말고 항상 조회하세요.