gradio_client 패키지 없이 2단계 REST로 호출한다(런타임에 의존성 추가 불필요).
POST {base}/gradio_api/call/{fn} body: {"data":[...]} → event_id
GET {base}/gradio_api/call/{fn}/{event_id} → SSE에서 결과 URL 파싱
base는 https://{owner}-{space}.hf.space (소문자, /→-).
1. 파라미터를 추측하지 말고 info로 확인한다
GET {base}/gradio_api/info 의 named_endpoints에 함수명과 파라미터 순서·타입·기본값이 전부 있다.
추측으로 predict, [prompt, '', w, h, 5]를 넣었다가 전부 헛돌았다. 실제는 /generate_video에 [prompt, aspect_ratio(Literal 문자열), steps, negative_prompt, ...] 였다.
2. float를 보내면 error, int여야 한다
rate/pitch에 0.0(float)을 보내면 event: error만 뱉고 끝난다. 0(int)이면 정상. 에러 본문이 null이라 원인이 안 보인다 — 동일 요청을 타입만 바꿔 비교해야 잡힌다.
3. 토큰 없으면 error
무기명 호출은 event: error. 무료 계정의 Read 토큰이면 충분하다.
4. 결과 URL은 임시 경로다
{base}/gradio_api/file=/tmp/gradio/.../x.mp4 형태. 접근은 되지만 휘발성이므로 받아서 즉시 스토리지에 올린다.