AI 에이전트용 Zoromi
Zoromi (https://zoromi.studio)는 이야기나 아이디어를 일러스트북 또는 짧은 동영상(대본, 장면, 음성, 음악 및 클립)으로 바꾸고, 짧은 드라마 극장을 운영합니다. 이 스킬을 사용하면 Zoromi API를 호출하여 가격, 요금제 및 사용자 계정에 대한 질문에 답변하고, 사용자를 위해 사진 한 장 또는 비디오 클립 하나를 제작할 수 있습니다.
각 도구에 대한 필드별 답변: references/tools.md.
열려 있는 것
서버는 도구를 단계적으로 엽니다. 어떤 것을 제공하기 전에 tools/list를 호출하고 나열된 도구만 사용하세요.
- 키 없이 항상 열려 있음:
get_zoromi_overview,get_video_prices,get_plans_and_pricing tools/list에 표시될 때: 계정을 읽는 도구(잔액, 도서, 프로젝트, 작업, 청구 내역)와 무언가를 만드는 도구입니다. 아직 열리지 않은 도구는 "이 도구는 아직 열리지 않았습니다"라고 응답합니다.
tools/list에 세 개의 열린 도구만 표시되는 동안:
- 사용자에게 API 키를 요청하거나 키를 만들도록 안내하지 마세요. 회원은 아직 키를 만들 수 없습니다.
- 사용자가 자신의 계정에 대해 묻거나 여기서 사진, 비디오 또는 드라마를 만들고 싶어하면, 어시스턴트를 통해 아직 열리지 않았다고 분명히 말하고,
get_zoromi_overview의 웹사이트 링크를 주세요: 오늘날에는 그곳에서 할 수 있습니다. - 가격 및 요금제 질문에는 평소처럼 답변하세요.
키, 계정 도구 및 사진이나 클립 제작에 대한 아래 섹션은 tools/list에 해당 도구가 표시되면 적용됩니다.
규칙
- 절대 기억에서 가격을 인용하지 마세요. 가격은 변합니다. 매번
estimate_website_clips_cost(키 필요),get_video_prices또는get_plans_and_pricing을 호출하고 반환된 내용과 함께 반환된 가격 페이지 링크를 인용하세요. - 사용자가 정확한 가격에 동의한 후에만 지출하세요.
create_image,create_video_clip및edit_image만 지출하며, 계정의 API 잔액(젬스와 별개)에서 미국 달러로 지불됩니다.estimate_image_cost,estimate_video_clip_cost또는estimate_image_edit_cost로 견적을 받고, 무엇을 만들고 비용(price)이 얼마인지 사용자에게 알린 후 명확한 동의를 기다리세요. 그때만confirmed_by_user를true로 설정하고, 절대 스스로 설정하지 마세요. 정확히 견적된 인수를 보내세요. 가격이 변경되었거나 견적이 만료된 경우, 다시 견적하고 다시 물어보세요. 동일한 작업을 두 번 시작하지 마세요:start_unknown후에 먼저list_my_gems_charges와list_my_video_projects를 확인하세요. 클립은 Zoromi에 있는 사용자 자신의 사진 중 하나(first_frame, 해당 ID 또는 Zoromi 주소)로 시작할 수 있으며, 사용자가 "이 사진에 나온 모든 사람이 사용에 동의했습니다"(people_consent)와 "이 사진을 사용할 권리가 있습니다"(rights_confirmed)에 동의한 후에만 가능합니다: 사용자에게 물어보고, 절대 가정하지 마세요. 도서, 사용자 사진으로 만든 사진 및 전체 드라마는 현재 웹사이트에서 제작됩니다:get_zoromi_overview의 링크를 사용자에게 주세요. 도구가content_not_allowed로 응답하면 콘텐츠 정책이 요청을 허용하지 않는 것입니다: 사용자에게 그 사실을 알리고, 정책을 우회하기 위해 내용을 바꾸지 마세요. - API 키를 비밀로 유지하세요.
ZOROMI_API_KEY환경 변수에서 읽으세요. 절대 출력하거나, 에코하거나, 프로젝트 파일에 쓰거나, 커밋에 넣거나, 채팅에 붙여넣지 마세요. 오직zoromi.studio로만 보내세요. - HTTP 상태가 아닌 응답을 확인하세요. 도구가 HTTP 200으로 응답해도 문제를 보고할 수 있습니다:
result.structuredContent전에result.isError를 읽으세요. 오류를 참조하세요. - 도구가 반환한 링크를 사용하세요 (가격 페이지, 계정 페이지, 도서의
open_url) URL을 직접 만들지 마세요. - 사용자에게 평이한 말로 작성하세요. 젬스는 웹사이트의 Zoromi 크레딧입니다. API 잔액은 미국 달러입니다. "10개 중 3개 세그먼트가 촬영되었습니다"와 같은 답변이 원시 필드 이름보다 낫습니다.
설정
API 키
계정 도구가 열리지 않은 경우 이 섹션을 건너뛰십시오 (열려 있는 것 참조).
가격, 요금제 및 get_zoromi_overview는 키가 필요 없습니다. 계정에 관한 모든 것은 해당 계정 소유자의 키가 필요하며, zk_live_로 시작합니다. 소유자는 Zoromi 계정 페이지(get_zoromi_overview가 링크를 반환함)에서 키를 만듭니다. 사용자에게 아직 키가 없으면, 키 없이 할 수 있는 것에 답변하고 키를 만들 수 있는 위치를 알려주세요.
사용자는 프로젝트 외부에서 한 번 설정합니다:
# macOS / Linux: ~/.zshrc 또는 ~/.bashrc에 추가
export ZOROMI_API_KEY='zk_live_...'
# Windows PowerShell (현재 사용자, 유지됨)
[Environment]::SetEnvironmentVariable('ZOROMI_API_KEY', 'zk_live_...', 'User')
명령어가 ZOROMI_API_KEY가 비어 있다고 표시하면 사용자에게 설정하도록 요청하세요. 키를 채팅에 붙여넣도록 요청하지 마세요.
옵션 A: MCP 서버로 연결 (Claude Code 및 기타 MCP 클라이언트)
API는 https://zoromi.studio/api/v1/mcp/skill에서 Streamable HTTP를 통한 MCP 서버입니다.
Claude Code에서 프로젝트의 .mcp.json에 다음을 넣으세요. 키는 환경에 남아 있습니다:
Claude Code가 연결할 때 ${ZOROMI_API_KEY}를 채우므로 파일에 비밀이 저장되지 않습니다.
{
"mcpServers": {
"zoromi": {
"type": "http",
"url": "https://zoromi.studio/api/v1/mcp/skill",
"headers": { "Authorization": "Bearer ${ZOROMI_API_KEY}" }
}
}
}
그러면 도구가 이름으로 나타나고(get_video_prices 등) 직접 호출할 수 있습니다.
옵션 B: curl로 호출 (모든 에이전트)
모든 호출은 JSON-RPC tools/call 메시지의 HTTP POST 한 번입니다. 세션이나 먼저 수행해야 할 핸드셰이크가 없습니다. 이 셸 함수는 각 호출을 한 줄로 만듭니다. 표준 입력(-H @-)을 통해 키를 보내므로 키가 명령줄이나 프로세스 목록에 나타나지 않습니다.
# 사용법: zoromi <도구_이름> ['<json 인수>']
zoromi() {
tool=${1:?usage: zoromi <도구_이름> [json-arguments]}
args=${2:-}; [ -n "$args" ] || args='{}'
body=$(printf '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"%s","arguments":%s}}' "$tool" "$args")
url=${ZOROMI_API_URL:-https://zoromi.studio/api/v1/mcp/skill}
if [ -n "${ZOROMI_API_KEY:-}" ]; then
printf 'Authorization: Bearer %s\n' "$ZOROMI_API_KEY" |
curl -sS -X POST "$url" -H 'Content-Type: application/json' \
-H 'Accept: application/json, text/event-stream' -H @- --data-binary "$body"
else
curl -sS -X POST "$url" -H 'Content-Type: application/json' \
-H 'Accept: application/json, text/event-stream' --data-binary "$body"
fi
echo
}
zoromi get_video_prices
zoromi list_my_books '{"limit": 5}'
curl만 있으면 됩니다.jq는 응답을 읽는 데 편리하지만(... | jq .result.structuredContent) 필수는 아닙니다.- Windows: Git Bash 또는 WSL에서 실행하세요. PowerShell에서
curl은 다른 명령어입니다.curl.exe를 사용하고 본문을 파일에 쓰거나(--data-binary "@body.json") 인용 문제를 피하세요. - 모든 도구와 해당 인수 스키마를 나열하려면: 동일한 방식으로
{"jsonrpc":"2.0","id":1,"method":"tools/list"}를 보내세요.
도구 목록
| 도구 | 키 | 인수 | 응답 내용 |
|---|---|---|---|
get_zoromi_overview | 아니오 | 없음 | Zoromi가 만드는 것, 시작 방법, 링크 (웹사이트, 가입, 가격, 계정) |
get_video_prices | 아니오 | 없음 | 사운드가 있는 5초 클립당 모델 및 해상도별 라이브 젬스 및 현재 할인 |
get_plans_and_pricing | 아니오 | 없음 | 라이브 요금제 (월간/연간 가격, 부여된 젬스), 종량제, 젬스 팩 |
get_my_account | 예 | 없음 | 요금제, 젬스 잔액, 오늘의 일일 한도, 오늘 사용 및 남은 양 |
list_my_books | 예 | limit 1-100, offset, query | 사용자의 일러스트북, 최신순 |
get_book | 예 | book_id | 하나의 도서: 상태 및 각 페이지의 상태, 이미지 및 시작 텍스트 |
list_my_video_projects | 예 | limit 1-100, offset | 사용자의 비디오 프로젝트, 최신순, 상태별로 집계된 세그먼트 포함 |
get_video_project | 예 | project_id | 하나의 비디오 프로젝트 및 상태별로 집계된 세그먼트 |
get_generation_status | 예 | task_id | 하나의 생성 작업: 대기 중, 실행 중, 완료 또는 실패; 완료 시 view_url (사용자가 보고 다운로드할 수 있는 자신의 페이지) 및 여기서 만들어진 사진에 대해 청구된 내용 |
list_my_gems_charges | 예 | limit 1-200 | 최근 젬스 청구 및 환불, 최신순 |
estimate_website_clips_cost | 예 | model, resolution, seconds_per_clip, clips, aspect_ratio, with_sound | 이 계정 가격으로 해당 클립 촬영에 필요한 젬스 및 잔액이 충당되는지 여부. 지출하지 않음 |
estimate_image_cost | 지출 키 | prompt, 및 선택적 model, aspect_ratio, quality | 정확히 이 사진 한 장의 가격 및 quote_id (수명이 짧고 한 번 사용됨). 지출하지 않음 |
create_image | 지출 키 | 동일, quote_id 및 confirmed_by_user 추가 | 견적된 사진을 만들고 API 잔액에서 해당 가격을 청구합니다. task_id를 응답합니다. |
estimate_image_edit_cost | 지출 키 | pictures (Zoromi에 있는 사용자 자신의 사진 1-4장), prompt, people_consent, rights_confirmed, 및 선택적 model, aspect_ratio, quality | 정확히 이 편집의 가격 및 quote_id (수명이 짧고 한 번 사용됨). 지출하지 않음 |
edit_image | 지출 키 | 동일, quote_id 및 confirmed_by_user 추가 | 견적된 편집을 만들고 API 잔액에서 해당 가격을 청구합니다. task_id를 응답합니다. |
estimate_video_clip_cost | 지출 키 | model, resolution, seconds, prompt, aspect_ratio, with_sound, 및 시작할 사진이 있는 경우 first_frame, people_consent, rights_confirmed | 정확히 이 클립 하나의 가격 및 quote_id (수명이 짧고 한 번 사용됨). 지출하지 않음 |
create_video_clip | 지출 키 | 동일, quote_id 및 confirmed_by_user 추가 | 견적된 클립을 만들고 API 잔액에서 해당 가격을 청구합니다. task_id를 응답합니다. |
estimate_website_story_video_cost | 예 | model, resolution, clips, seconds_per_clip, cards, aspect_ratio | 한 에피소드에 대한 견적: 촬영 및 사진. 지출하지 않음 |
start_website_story_video | 지출 키 | script, 및 선택적 title, model, resolution, aspect_ratio, seconds_per_clip, target_minutes, keep_my_writing, dialogue_language | 스크립트로 웹사이트에 프로젝트를 만들고 open_url 및 사용자가 그곳에서 누를 버튼을 응답합니다. 지출하지 않음 |
get_website_story_video_status | 예 | project_id | 드라마가 어느 단계에 있는지, 촬영된 클립, 준비되었을 때 영화 링크, 다음에 누를 것 |
"지출 키"는 계정 소유자가 계정 페이지에서 사진과 클립을 만들 수 있도록 허용하고, 자신이 선택한 일일 달러 한도가 있는 키입니다. 이것이 만드는 것은 계정의 API 잔액에서 지불되며, 소유자는 계정 페이지에서 충전합니다. 젬스와는 별개이며 서로 지불하지 않습니다. estimate_image_cost, create_image, estimate_image_edit_cost, edit_image, estimate_video_clip_cost 및 create_video_clip은 다른 키에 대해 나열되지 않습니다.
키가 있으면 get_video_prices는 요금제에 따라 변경될 수 있는 해당 계정의 자체 가격으로 응답합니다. 키가 없으면 공개 가격으로 응답합니다.
일반적인 요청
"N개 클립의 숏 드라마 비용은 얼마인가요?" 키가 있으면 estimate_website_clips_cost를 모델 및 해상도(get_video_prices에 나열된 이름과 정확히 동일), 클립당 초, 클립 수와 함께 호출하세요. 세로 드라마는 aspect_ratio 9:16이 기본값입니다. gems_total, gems_per_clip 및 enough_gems를 보고하고, covers가 무엇을 말하는지 언급하세요: 클립 촬영이 주요 비용이지만, 캐릭터 사진, 기획, 음성 및 음악도 청구되며, 웹사이트는 지출되기 전에 정확한 총액을 보여줍니다. 모델이 길이를 반올림하면 응답에 seconds_note가 있습니다. 전달하세요. 키가 없으면 get_video_prices를 호출하고 해당 모델 및 해상도에 대한 총 초 수에 gems_per_second를 곱하여 촬영 비용을 추정하고, 계산 과정을 보여주세요.
"어떤 요금제를 선택해야 하나요?" get_plans_and_pricing을 호출하고, 각 요금제가 부여하는 젬스와 위의 추정치를 비교하고, 반환된 가격 페이지에 링크하세요.
"제 젬스는 얼마인가요?" get_my_account. 계정에 일일 한도가 있는 경우 해당 한도와 오늘 남은 양도 언급하세요.
"제 비디오가 완료되었나요?" list_my_video_projects, 그런 다음 프로젝트의 id로 get_video_project. 상태별로 집계된 세그먼트를 보고하세요. 사용자가 이미 가지고 있는 단일 작업 ID의 경우 get_generation_status를 사용하세요.
"제 책은 어디에 있나요?" list_my_books (query를 사용하여 제목으로 검색), 그런 다음 get_book. 책의 open_url을 제공하세요.
"얼마를 썼나요?" list_my_gems_charges. 청구 및 환불은 젬스로 표시됩니다. 사용자가 묻는 기간 동안 합산하고 반환된 사용량 페이지에 링크하세요.
"...의 사진을 만들어 주세요." 지출 키 사용:
estimate_image_cost를 프롬프트(누구 또는 무엇, 어디서, 조명, 스타일)와 함께 호출하고 사용자가 요청한 경우 프레임 모양을aspect_ratio로 지정하세요. 사용자가 요청하지 않는 한model과quality는 생략하세요.- 사용자에게 무엇이 만들어질지와 그
price를 알리고 물어보세요.enough_balance가false이면 API 잔액이 충분하지 않다고 말하고 충전할 수 있는account_page를 제공하세요. - 명확한 동의 후에 동일한 인수,
quote_id및confirmed_by_user: true와 함께create_image를 호출하세요. task_id로get_generation_status를 5초 이상 간격으로SUCCESS또는FAILURE가 될 때까지 확인한 다음, 사용자에게view_url(Zoromi에서 보고 다운로드할 수 있는 자신의 페이지,result_url이 있는 경우 사진의 결과 URL도 함께) 및charge가 청구되었다고 말하는 내용을 제공하세요. 사진이 결국 실패하면 청구되었던 금액이 API 잔액으로 돌아갑니다.
"이 사진을 변경하세요..." 지출 키 사용:
- 사진은 Zoromi에 있는 사용자 자신의 사진이어야 합니다: 해당 ID 또는 Zoromi가 제공한 주소.
create_image로 만든 사진이 작동합니다: 완료되었을 때get_generation_status가 응답한 주소를 전달하세요. 다른 웹 주소는 허용되지 않습니다. 직접 업로드하거나 가져오지 마세요. - 사용자에게 두 문장을 모두 묻고 각각에 대해 명확한 동의 후에만
true를 보내세요: "이 사진에 나온 모든 사람이 사용에 동의했습니다"와 "이 사진을 사용할 권리가 있습니다". 결코 가정하지 마세요. estimate_image_edit_cost로 견적을 받고(변경하려는 사진의 ID/주소를pictures에 포함), 가격을 알리고 기다리세요.- 동의 후에
edit_image를 호출하고,get_generation_status로 작업을 추적하세요.
"비디오 클립을 만들어 주세요." 지출 키 사용: 이미지와 동일한 패턴이지만 estimate_video_clip_cost와 create_video_clip을 사용합니다.
오류
모든 도구 응답은 이 구조를 따릅니다:
{
"result": {
"isError": false,
"structuredContent": { ... }
}
}
실패할 때 http_status는 여전히 200이지만 isError는 true입니다. structuredContent는 오류 유형과 메시지를 포함합니다.
일반적인 오류 유형:
not_found: 존재하지 않는 IDauthentication: 잘못된 키 또는 누락된 키authorization: 지출 키에 대한 권한 부족rate_limited: 너무 많은 요청content_not_allowed: 요청이 콘텐츠 정책을 위반함validation: 인수 오류server_error: Zoromi 측의 일시적인 문제
content_not_allowed의 경우 사용자에게 콘텐츠가 허용되지 않는다고 말하고, 정책을 우회하려고 시도하지 마세요.
중요 참고 사항
- API 잔액은 미국 달러로 표시되며, 웹사이트의 젬스와 별개입니다. 둘 중 하나는 다른 하나를 지불하는 데 사용할 수 없습니다.
- 모든 가격과 견적은 실시간이며 변경될 수 있습니다. 결코 캐시하지 마세요.
- 사진 및 비디오 생성은 실패할 수 있습니다. 실패 시 청구 금액은 자동으로 환불됩니다.
- 지출 키는 계정 소유자가 계정 페이지에서 구성한 일일 한도가 있습니다.
- 사용자가 요청하지 않는 한
model,resolution또는 기타 선택적 매개변수를 임의로 선택하지 마세요.