개발자 문서

MCP · AI 에이전트

MCP 서버 연결

설치 없이 원격 MCP 주소 하나로 연결합니다.
내 PC의 CLI 연결은 내 PC 파일·영상 편집기 도구가 필요할 때만 쓰는 선택 방법입니다.

설치 없이 원격 연결

아래 주소를 AI 서비스의 사용자 지정 MCP 서버에 입력하고 에임즈 계정으로 로그인하세요.
Python이나 CLI를 설치할 필요가 없습니다. AI 에이전트에게 연결을 맡길 때도 설치하지 말고 이 주소를 등록하게 하세요.

원격 MCP 서버 주소
https://aimzlabs.com/mcp
  1. ChatGPT: 웹의 Plugins에서 추가 버튼 → Add custom MCP server를 선택하고 주소를 입력합니다.
  2. Codex(데스크톱 앱 · IDE · CLI): 설정(IDE는 톱니) → MCP servers에서 Streamable HTTP로 주소를 추가하고 Authenticate를 누릅니다. CLI는 codex mcp add aimz --url https://aimzlabs.com/mcp 뒤 codex mcp login aimz를 실행합니다(~/.codex/config.toml의 [mcp_servers.aimz]에 url = "https://aimzlabs.com/mcp"를 직접 넣어도 됩니다).
  3. Claude Code: claude mcp add --transport http -s user aimz https://aimzlabs.com/mcp를 실행하고, Claude Code의 /mcp에서 aimz를 골라 Authenticate를 누릅니다.
  4. Claude(웹·데스크톱): Customize → Connectors → Add custom connector에서 주소를 입력합니다.
  5. Gemini: 웹의 Settings → Connected Apps → Add a custom app에서 주소를 입력합니다.
  6. 에임즈 연결 화면에서 계정을 확인합니다. 크레딧 자동 사용을 원하면 별도 동의 항목을 선택하고 연결합니다.

그 밖의 클라이언트도 원격 MCP(Streamable HTTP)와 OAuth 로그인을 지원하면 같은 주소를 씁니다.
로그인 콜백은 https 주소나 이 PC의 루프백 주소(127.0.0.1 · localhost)만 받습니다.

서비스별 이용 조건
ChatGPT와 Claude의 연결 메뉴는 계정·워크스페이스 정책에 따라 다를 수 있습니다. Gemini의 사용자 지정 앱은 현재 미국의 18세 이상 개인 Google 계정과 영어 설정에서 제공됩니다. Google 안내를 확인하세요.

원격 연결은 이 PC의 파일 경로를 읽거나 쓰지 않습니다. 이미지·영상은 HTTPS URL이나 라이브러리 결과 URL을 사용하고, ComfyUI 입력은 comfy_upload_url로 준비합니다. 3D 결과는 scene_export_to_library로 라이브러리에 저장합니다.

각 서비스에서 연결을 해제하거나 에임즈 연결 관리에서 접근 권한을 철회할 수 있습니다. 계정 암호나 토큰은 채팅에 붙여 넣지 마세요.

내 PC의 CLI로 연결 (선택)

원격 MCP와 같은 엔진(aimz CLI)을 내 PC에서 돌리는 방법입니다.
내 PC 파일 경로를 바로 쓰는 도구(upload_file · download_outputs · scene_capture), 영상 편집기 도구(editor_*), 서버 API 직접 호출(api_request)이 필요할 때만 설치하세요.

  1. CLI 를 설치합니다.
  2. 터미널에서 aimz login 으로 한 번 로그인합니다. 에이전트는 이 로그인을 그대로 씁니다.
  3. 아래에서 쓰는 에이전트의 설정을 추가합니다.
내 PC 에 맞는 설정을 바로 받기
aimz mcp-config 를 실행하면 이 PC 의 실제 실행 경로가 들어간 설정(Claude Code·Codex·Claude Desktop)을 출력합니다. aimz 가 PATH 에 없을 때 특히 편합니다.

에이전트별 CLI 설정

Claude Code

터미널
claude mcp add aimz -s user -- aimz mcp

-s user 는 모든 프로젝트에서 쓰겠다는 뜻입니다. 이 프로젝트에서만 쓰려면 빼세요. claude mcp list 로 연결을 확인합니다.

Codex

~/.codex/config.toml(Windows 는 %USERPROFILE%\.codex\config.toml) 에 추가합니다.

config.toml
[mcp_servers.aimz]
command = "aimz"
args = ["mcp"]

Claude Desktop

설정 → 개발자 → 구성 편집으로 claude_desktop_config.json 을 열어 추가하고 앱을 완전히 종료했다가 다시 시작합니다. 파일 위치는 운영체제마다 다릅니다.

%APPDATA%\Claude\claude_desktop_config.json
claude_desktop_config.json
{
  "mcpServers": {
    "aimz": {
      "command": "aimz",
      "args": ["mcp"]
    }
  }
}
macOS: 앱에서는 'aimz' 를 못 찾을 수 있습니다
Dock·Launchpad 로 연 앱은 터미널의 PATH(~/.zshrc)를 읽지 않아서 "command": "aimz" 가 실패합니다. 터미널에서 aimz mcp-config 를 실행하면 나오는 전체 경로(예: /Users/이름/.local/bin/aimz)를command 에 넣으세요. Windows 에서도 같은 증상이면 같은 방법이 통합니다.

Cursor

모든 프로젝트에서 쓰려면 ~/.cursor/mcp.json, 이 프로젝트에서만 쓰려면 프로젝트의 .cursor/mcp.json 에 Claude Desktop 과 같은 mcpServers 내용을 넣습니다.

그 밖의 MCP 클라이언트

stdio 방식 MCP 서버를 지원하는 클라이언트라면 같은 값을 넣으면 됩니다. 명령 aimz, 인자 mcp. aimz 를 찾지 못하면 aimz mcp-config 가 알려 주는 전체 경로를 쓰거나, 명령에 Python(Windows 는 py, macOS·Linux 는 venv 의 ~/.aimz-venv/bin/python), 인자에 -m aimz_cli mcp 를 넣으세요.

써 보기

연결한 뒤 에이전트에게 자연어로 요청하면 됩니다.

에이전트에게
내 AIMZ LABS 잔액이랑 쓸 수 있는 영상 모델 알려 줘.

라이브러리의 참고 이미지를 시작 프레임으로 seedance_fast 5초 영상 만들어 줘.

라이브러리에서 지난주에 만든 '광고' 관련 이미지 찾아 줘.

대기열 상황 보고, 같은 프롬프트로 비율만 다른 이미지 4장을 한 번에 만들어 줘.

에이전트가 쓸 수 있는 도구 목록과 인자는 MCP 도구 레퍼런스에 있습니다.

새 영상은 요청에 맞춰 custom 워크플로우를 설계합니다. 숫자 예산이 없어도 지원 모델의 값을 비교하고, 추천 모델과 최저가 모델의 이름·견적을 함께 보여 줍니다. “저렴하게” 요청하면 workspace_flow_plan의 cheapest.credits를 예산으로 다시 계획하며 컷별 길이·참고 자료·소리 조건을 유지합니다. 직접 정한 숫자 예산이 있으면 그 값을 우선합니다. 생성 전 최종 비용은 workspace_run_plan으로 확인합니다.

“Wan 3.0으로”처럼 모델을 정하면 spec.video_model에 실제 모델 id(wan_30)를 넣어 고정합니다. 해당 모델이 예산·컷 길이·참고 자료·소리를 지원하지 못하면 다른 모델로 바꾸지 않고 이유를 표시합니다. 추천 버튼에서 고른 모델도 같은 방식으로 적용됩니다.

확정한 그림체와 캐릭터 유지

캐릭터의 체형·머리와 몸의 비율·실루엣·선 두께와 색·팔레트·질감·명암·대상별 2D/3D 표현은 spec.look에, 유지할 제약은 spec.rule에 기록합니다. Character: ...; Environment: ...; Props: ...; Shared: ...처럼 역할별로 나눌 수 있으며 기존 문자열도 지원합니다. 동작·구도·길이·모델을 바꿀 때에도 이 기준을 프롬프트에 전달하고, 사용자가 명시적으로 요청한 스타일만 바꿉니다.

  • 캐릭터 원본과 시트는 생김새·그림체 기준, 공간 참고는 배경·배치 기준으로 구분합니다. 예를 들어 2D 고양이와 3D 로우폴리 음식을 섞을 때 배경의 질감이나 명암이 고양이까지 바꾸지 않도록 적용 대상을 명시합니다. 캐릭터 단독 검수에는 불필요한 배경 참고를 섞지 않습니다.
  • 대표 정지컷을 확정 원본과 대조하고, 짧은 영상 소량의 시작·중간·끝을 검수한 뒤 나머지를 생성합니다. 필수 참고가 빠졌거나 기준과 다르면 연결과 프롬프트를 고친 뒤 다시 확인합니다.
  • 잘못된 결과를 다음 생성의 참고로 재사용하지 않습니다. 수정본을 만들 때 원본·기존 결과·이전 스타일 기준을 보존합니다.

이 순서는 연결된 에이전트가 따라야 할 검수 지침입니다. 생성 모델의 스타일 준수나 자동 시각 검증을 보장하는 기능은 아니므로 실제 결과를 확인해야 합니다.

ComfyUI 워커도 MCP로 사용할 수 있습니다. 대시보드 워크플로우를 선택하고 실행 권한과 컴피 크레딧을 확인하는 순서는 ComfyUI 워커 실행 안내를 보세요.

에이전트가 ComfyUI 워커, 3D 씬과 워크플로우 사용 지침을 따르도록 AIMZ LABS 스킬을 설치할 수도 있습니다. 원격 MCP 서버도 연결 시 지침을 전달합니다.

연결된 에이전트가 받는 지침

원격 연결은 설치·업데이트가 필요 없습니다.
로컬 CLI 연결에서는 CLI 0.4.10부터 새 버전이 확인되면 MCP 연결 지침과 도구 응답에 현재 버전, 최신 버전, 설치 방식에 맞는 업데이트 명령이 표시됩니다.
에이전트에게 안내를 전달해 달라고 요청하세요.
자동으로 설치하지 않으며, 업데이트 후 MCP 클라이언트를 다시 시작해야 합니다.
확인 결과는 한 시간 캐시되며 네트워크 오류가 나면 도구는 그대로 동작합니다.
기존 구버전에서는 이 기능을 받기 위해 먼저 한 번 직접 업데이트하세요.

whoami의 generation_credits_unlimited는 일반 생성 크레딧의 면제 여부입니다.
모델 견적은 표준 가격이며 면제 계정의 실제 차감액은 아닙니다.
ComfyUI 실행 크레딧은 별도 잔액이므로 comfy_status와 실행 견적을 확인하세요.

CLI 0.4.11부터 estimate_credits와 생성 결과의 견적에 현재 계정 기준 예상 차감 상한 account_charge_credits_max가 함께 표시됩니다.
계정 역할을 확인하지 못하면 이 값은 비어 있으며, 실제 차감액은 완료 후 정산 결과로 확인하세요.

MCP 서버가 연결할 때 전달하는 지침과 같은 원본입니다. 새 CLI 판과 이 페이지를 함께 갱신합니다.

MCP 에이전트 지침
[기본 제작 규칙]
기본 제작 규칙: 선택 모델·입력 방식의 최신 공식 Markdown 가이드와 실제 공개 입력/참고 순서·길이·프레임 규격을 먼저 확인한다. 영상은 자연스러운 동작 효과음·환경음만 기본으로 하며 다음을 명시한다: Natural action Foley and quiet environmental ambience only. No background music, score, soundtrack, instruments, song or singing, including music from objects in the scene. 사용자가 명시한 대사 외 말소리를 만들지 않는다. 음악이 필요하면 영상과 별도 파일/트랙으로 제작하며 로컬 YuE2를 우선 검토하되 실제 설치·입력·가용성을 확인하고 없는 기능을 주장하지 않는다. 공간 참고는 인물·캐릭터·동물·손·반사된 인물 없는 빈 공간으로, 같은 구조를 유지한 정면·사선·필요한 상부/낮은 각도를 각각 계획한다. 필요한 근접 구도·시작/끝 상태·끝동작은 영상 안에서 생성한다. 공간 크롭·확대·팬 크롭으로 결함을 숨기지 않는다. 시간 자르기·전체 화면 비율 유지 리사이즈/패딩·오디오 연결은 가능하다. 특정 시리즈 전용 서사는 해당 프로젝트 계약에서 확인된 경우에만 적용한다. 실행 완료·실제 시각 검수·청취·최종 승인을 구분한다.
세부 안내: https://aimzlabs.com/skills/aimz-labs/references/video-authoring.md

[Labs standalone Comfy 모니터]
comfy_workflow_run 및 comfy_job의 monitor_url을 즉시 전달하고 같은 request_id로 이어 확인합니다. kind는 실제 결과 종류를 지정합니다. 기존 owner-checked /api/space/comfy/runs GET만 사용합니다. 브로커가 공개 기록에서 실행 그래프를 제거하므로 독립 작업의 제출 프롬프트·원본 참고는 미확인일 수 있습니다. 검증된 서버 계획의 허용 텍스트 입력만 복원하며 모델이 확장한 최종 글로 주장하지 않습니다. raw graph·개인 로더 파일명·secret URL을 표시하거나 새로운 기록 서비스를 만들지 않습니다. 직접 로컬 /prompt 작업은 별도 native-job Site이며 이 API에 자동 연결되었다고 주장하지 않습니다.

AIMZ LABS(aimzlabs.com) 생성 플랫폼을 조작하는 도구입니다. 사용자의 계정·크레딧으로 동작합니다.

[모든 이미지·영상 제작의 기본 모니터]
- 반환된 보드·일반 작업·Comfy URL과 native /production/live 별칭, 명시적인 읽기 전용 공유는 같은 AIMZ LABS 제작 뷰어를 사용합니다. 받은 컨텍스트 URL을 그대로 전달하고 특정 프로젝트 전용 주소로 대신하지 않습니다. 게시된 최종 영상은 위에, 참고·과정 표는 아래에 표시합니다. 최종본 기록이 없는 일반 작업은 생성 결과이며 최종 승인으로 부르지 않습니다. 이미 반환된 모니터 링크의 화면 변경에는 CLI 재설치가 필요하지 않습니다.
- 어떤 외부 CLI/MCP 또는 내부 채팅으로 이미지·영상 제작을 요청받아도, 이미 소유 워크스페이스가 있으면 생성 전 workspace_monitor(board_id)로 제작 현황 URL을 먼저 사용자에게 전달합니다. 없다면 워크스페이스가 필요한 제작만 workspace_flow_create로 만들고 반환된 monitor_url을 전달합니다. 단일 generate/generate_batch를 위해 새 보드를 강제 생성하지 않습니다. 직접 생성은 wait=false로 원래 접수 영수증을 받은 즉시 monitor_url을 전달하고 같은 job ID로 이어 조회합니다.
- canonical URL은 /production?bd=ID 또는 /production?job=ID, 묶음은 URL당 최대20개 jobs이며 21~50개 배치는 monitor_urls의 모든 그룹 링크를 전달합니다. Labs standalone Comfy는 /production?comfy=소문자UUID&kind=image|video|audio 및 workspace_monitor(comfy_request_id,kind)를 사용합니다. ordinary job ID로 바꾸지 않습니다. /space?bd=ID는 기존 캔버스이며 새 표 모니터와 같다고 말하지 않습니다. 모니터 URL에는 토큰·쿠키·승인값·원본 프롬프트를 넣지 않습니다. 소유자 로그인과 기존 읽기 API로만 열립니다. 설치된 구판에 이 페이지/도구가 없으면 없는 기능을 주장하지 말고 실제 버전 차이를 알립니다.
- 캐릭터·공간·소품 디테일·스타일/렌더 예시의 원본과 역할·순서, 컷별 프롬프트, 실제 결과를 한 표에서 보도록 기록합니다. 실제 제출 prompt와 전개 전 draft는 구분하며, 본문은 prompt_sha256와 prompt_offset/next_prompt_offset으로 빠짐없이 읽을 수 있습니다. 참고가 없거나 실제 제출 글이 보존되지 않았으면 없다고 표시하며 새 캐릭터·그림이나 추정 글로 채우지 않습니다.
- workspace_monitor는 기존 소유 보드/작업만 GET으로 읽으며 생성·취소·과금·품질 승인을 하지 않습니다. 진행 중에는 같은 URL과 원래 작업 ID를 계속 사용하고, 결과 연결·검수 기록은 원래 제작 계약·한도와 도구로 갱신합니다. 작업이 종료된 비율은 실제 task/결과 근거로 계산하고 검수·납품 승인은 별개로 표시합니다. ETA가 없으면 null/미정이며 경과 시간을 진행률로 만들지 않습니다. queued의 시작 ETA를 전체 완료 ETA처럼 말하지 않습니다.
- 로컬 native Comfy 작업처럼 Labs 소유 보드/작업 API에 기록되지 않은 외부 실행은 이 제품 화면에 자동 표시되지 않습니다. 그때는 실제 연결된 별도 실시간 모니터 URL을 쓰고, 제품 monitor_url의 현황이라고 꾸미지 않습니다. AIMZ LABS 화면은 밝은 #FAFAF8 바탕, #161619 본문, #505157 보조문자와 #EEEDEE 선의 간결한 표·전체 진행으로 표현합니다.

[예제 영상의 두 에이전트 경로 검증]
- 모든 새 예제 영상은 외부 공개 MCP/CLI만 쓰는 연결 에이전트와 내부 Labs 워크스페이스 채팅 에이전트에서 각각 실제 제작 경로를 검증합니다. 외부는 공개 배포된 도구만 사용하고 내부는 실제 채팅 요청·에이전트가 선택한 작업·결과를 확인합니다. 소스 import, SSH, 비공개 helper, 직접 DB/API 우회, 수동 캔버스 실행은 진단 근거이며 두 에이전트 경로의 통과를 대신하지 않습니다.
- 두 경로에 같은 요구·확정 참고 원본과 역할/순서·스타일·모델/입력 방식·길이·비율·소리 기준을 주고 필요한 차이는 사전에 기록합니다. 경로별 작업 공간·시도·증거를 분리합니다. 참고 재사용을 다른 경로의 실행으로 세지 않으며 생성 결과의 픽셀 동일성을 요구하지 않습니다.
- 경로별 기능/워크플로우 발견·실제 입력 설정 → 견적/권한/승인 → 실행/상태 확인 → 노드 연결/라이브러리 조회 → 원본/이력을 보존한 부분 수정 → 재연결 후 같은 요청 ID 복구 → 실제 시각/음향/최종 전달 검수를 확인합니다. 다른 사용자의 작업을 중단하거나 실패를 억지로 만들지 않습니다.
- 버전·시각, 비밀값을 뺀 대화/요청과 실제 도구/작업/요청 ID, 참고 지문, 견적/승인 상한/누적 표준 비용/실제 차감(일반·Comfy 구분), 결과 URL/SHA/라이브러리, 수정 전후/복구 근거·실제 관찰과 한계를 남깁니다. 두 경로와 재시도 비용은 기존 승인 범위에 합산하며 무제한 계정의 차감0을 표준 비용0으로 보지 않습니다.
- 각 경로·단계의 실제 관찰된 통과/실패, 미검증, 차단 사유를 구분합니다. 도구 목록·모의 검사·소스 확인·과거 성공으로 현재 동등성을 선언하지 않습니다. 청취하지 못한 음향은 미관찰입니다. 필요한 단계가 없으면 해당 제품 경로의 미구현으로 기록하고 구현·문서화 뒤 재검증해야 하며 비공개 우회나 존재하지 않는 도구로 대체하지 않습니다. 검토본은 한계를 밝히고 전달하되 전체 완료·품질 승인과 구분합니다. 이 지침은 기존 예제나 현재 기능이 이미 두 경로 검증을 통과했다는 뜻이 아닙니다. https://aimzlabs.com/docs/mcp/tools#example-acceptance

[단계별 제작 허용 범위와 자동 진행]
- 현재 스키마의 production_control/production_step과 production_control(action="status")를 먼저 읽습니다. 외부 MCP/CLI와 내부 채팅은 같은 보드별 단계 제어를 사용하지만 실제 두 경로의 검증 통과를 뜻하지 않습니다. configure/resume은 사용자 선택·승인과 최신 expected_updated_at을 요구합니다. 서버가 발급한 automation_id만 쓰고 모델이 설정·승인 토큰을 만들거나 범위를 늘리지 않습니다.
- config={mode,end_stage,limits:{general_credits,comfy_credits,max_steps,max_retries}}입니다. plan은 조회만, confirm은 변경마다 사용자 확인, bounded는 사용자가 정한 범위의 허용 도구 자동 진행입니다. end_stage 순서는 plan/reference/generate/review/edit/delivery입니다. 이미지·오디오 참고 생성은 reference, 영상 생성은 generate, 품질 검수 기록은 review, 수정·후처리·합본은 edit, 전달 준비 확인은 delivery입니다. 실제 도구의 최소 단계를 따르며 stage 이름을 낮춰 검사를 우회하지 않습니다. 별도 자산·3D 변경의 확인과 허용되지 않은 도구 제한은 유지합니다.
- max_steps는 기록되는 도구 단계 수(1~200, production_step 조회 포함), max_retries는 노드별 반복 생성 한도(0~50)입니다. 일반 생성은 production_step 안의 production_run, Comfy 생성은 workspace_comfy_run으로 실행해야 해당 자동화 누적 예산에 들어갑니다. 직접 생성·새 보드·설정으로 기존 지출을 숨기지 않습니다. 제작 계약과 현재 참고 검수 조건도 계속 적용됩니다.
- status의 usage.reserved_general_credits/reserved_comfy_credits와 actual_general_credits/actual_comfy_credits를 따로 읽습니다. 일반 표준 비용과 Comfy는 다른 단위이며 무제한 일반 계정의 실제 차감0도 표준 예약을 없애지 않습니다. actual_general_pending/actual_comfy_pending이 남으면 확인된 실제 차감 합계를 전체 정산액으로 보지 않습니다. 미확정은 0이 아닙니다. 설정 변경·실패·적은 실제 차감으로 누적 자동화 예약을 돌려받지 않으며 remaining/pending을 다음 변경 전에 확인합니다. 이 한도는 해당 자동화의 미디어 도구 실행 범위이고 채팅 모델 대화 요금까지 포함한 전체 비용 상한이 아니므로 대화 견적도 별도로 확인합니다.
- production_step의 외부 단계 UUID를 호출 전에 저장하고 arguments 안의 실제 생성 request_id·plan_hash 또는 plan_id도 별도로 보존합니다. 같은 단계 ID는 도구를 다시 실행하지 않고 저장 기록을 반환합니다. unknown이면 원래 내부 생성 ID로 복구하고 새 UUID로 재접수하지 않습니다. 단계 완료가 비동기 작업 접수만 뜻할 수 있으므로 실제 작업·결과 연결·라이브러리·정산을 확인합니다. CAS 충돌은 최신 보드와 설정을 다시 읽고 판단합니다.
- pause는 다음 변경만 막고 이미 접수된 작업은 취소하지 않습니다. 기존 ID로 작업을 확인하고 사용자 승인으로 resume하며 누적 예약·횟수를 유지합니다. 자동 진행 종료·done은 품질 승인이 아니며 실제 프레임·소리 검수가 필요합니다. 청취 불가능하면 audio uncertain/observed=false를 유지합니다. https://aimzlabs.com/docs/mcp/tools#staged-automation
- 비용 예약이 없는 비생성 단계의 unknown만 사용자가 현재 보드·라이브러리를 확인한 뒤 production_control(action="acknowledge", request_id=원래단계ID, note=확인내용, expected_updated_at=현재revision)으로 자동 대기를 끝낼 수 있습니다. 실제 사용자 확인이 필요하며 모델이 쓴 note는 승인이 아닙니다. outcome_unverified=true로 남고 서버 작업 취소·재실행·예약 환급·성공 판정을 하지 않습니다. 생성 요청의 미확정 결과를 이 방법으로 해제하지 않습니다.

- CLI 0.4.46과 호환 서버에서는 production_media_inspect, production_media_view, production_audio_sample, production_audio_listen을 reference 단계부터 사용할 수 있어 생성 전에 참고 원본을 관찰할 수 있습니다. production_update(review)의 품질 검수 기록은 review 단계이고 후처리는 edit 단계입니다. 관찰 도구 실행이 품질 승인이나 실제 청취 증명이 되지 않습니다.
- 내부 채팅이 도구 입력·단계의 실행 전 거절을 명시적으로 받으면 멈추고 사용자가 이어서 진행할 때 그 근거를 모델에 전달합니다. 일반400/409나 응답 유실을 미실행으로 단정하지 않으며, 복구 요청의 거절은 원래 unknown 요청을 지우거나 재접수를 허용하지 않습니다.

- CLI 0.4.46은 Comfy 접수 뒤 바깥 단계 진행 기록만 저장되지 않은 경우 같은 production_step ID 재조회 또는 production_step 안에서 원래 실행 ID의 workspace_comfy_job 호출로 복구합니다. 일반 workspace_comfy_job 조회만으로는 바깥 단계 기록을 복구하지 않습니다. 현재 입력·계획·한도와 일치하는 소유 작업의 queued/running 영수증을 확인한 뒤 진행 상태만 기록하며 예약액·단계 수·미정산을 유지합니다. 생성 재접수·acknowledge·품질 승인이 아니며 다음 독립 컷도 현재 여유 슬롯·참고·의존성 검사를 통과해야 합니다.

[제작 판단·검수·부분 수정 — CLI와 MCP 공통]
- 로컬 CLI는 `aimz tools production`으로 실제 도구·입력 JSON Schema를 읽고 `aimz call TOOL --data '@request.json'`으로 같은 MCP를 호출합니다. JSON은 result, 이미지·오디오는 content입니다. --out은 반환 미디어를 새 폴더에 저장하며 기존 파일을 덮어쓰지 않습니다. --yes는 사용자가 이미 승인한 범위의 확인에만 사용합니다. Hosted MCP는 같은 전용 도구를 직접 부르며 로컬 파일 경로를 요구하지 않습니다.
- production_commands → production_inspect → production_update(contract)로 제작 기준을 기록하세요: brief, 주체별 style, 참고 역할(character/space/prop/style), sound, 컷 timeline, budget_standard_credits. 새 요청은 custom으로 설계하고 명시 모델(spec.video_model), 컷별 shot_durations, 전체 길이·비율·소리를 유지합니다. 계약은 승인 범위를 기록하며 추가 지출 권한을 만들지 않습니다. 기존 사용액은 확인된 근거와 opening_reserved_standard_credits로 이관하고 실제 듣지 않은 옛 음향 검수를 새 approved로 바꾸지 않습니다.
- R2V 다중 참고·멀티컷 가능성을 먼저 검토하고 I2V 시작 이미지와 비교하세요. spec.pipe=r2v/frames 계획과 현재 model_info를 확인합니다. 구조화된 멀티샷 필드와 프롬프트만의 장면 전환은 다릅니다. edit/add_nodes로 후보 2~6개를 준비하고 production_compare로 실제 요청·견적을 비교합니다. 같은 캐릭터·공간·동작·길이의 실제 통제 비교 없이 품질 우열을 단정하지 말고 controlled_comparison=false와 한계를 decision에 적습니다.
- 장면 캔버스·캐릭터 정체성·공간·소품의 참고 역할과 순서를 명시합니다. 확정 장면을 첫 참고로 놓고 필요한 행동·소품만 짧게 바꾸세요. 시작 이미지는 동작 직전 상태입니다. 배경 참고가 캐릭터 재질을 바꾸면 충실한 장면을 먼저 만들고 workspace_mask_edit로 선택한 소품만 편집하는 대안도 검토합니다. 실제 표시 영역·대표 결과를 검수하고 입력 참고를 조용히 버리지 않습니다.
- production_update(decision) → production_plan(board_id,node_id)의 can_run/blockers·params·reserve_standard_credits·plan_hash를 확인한 뒤 승인 범위에서 production_run을 한 노드씩 실행합니다. 현재 참고 검수·방식 결정·예산 조건을 통과해야 합니다. 표준 예약은 보드에 먼저 영속 저장되며 재시도도 누적됩니다. 무제한 계정의 실제 차감 0과 표준 비용은 다릅니다. 진행 중/응답 유실은 같은 request_id·plan_hash와 recovery_only=true로 서버의 기존 작업을 조회·연결합니다. 이 모드는404에도 새 생성이나 후처리를 접수하지 않습니다. postprocessing_required이면 원본과 라이브러리 결과를 보존하고 필요한 후처리를 별도로 판단합니다. 결과 불명 상태에서 새 키로 재접수하지 않습니다.
- done은 품질 승인이 아닙니다. production_media_inspect(url,request_id,times?) → production_media_job → production_media_view로 실제 시작·중간·끝 프레임을 받아 승인한 캐릭터·공간과 비교하세요. 체형·의상·선·재질·소품·연속성을 보고 중요한 동작 전후는 times(최대12개)로 추가합니다. SHA·job·프레임 URL·시각·관찰·표본 한계를 evidence에 남깁니다. 지문은 URL/설정/재귀 입력을 묶으므로 실제 파일 SHA를 대신하지 않습니다.
- CLI 0.4.46과 호환 서버의 production_media_inspect는 내 순수 MP3/WAV 음원의 전체 길이·스트림·원본 SHA·디코딩·음량도 검사합니다. 오디오에는 times를 생략하거나 []로 주며 프레임은 없습니다. 음악·음성 유무나 청취 승인이 아니므로 필요한 구간은 별도로 실제 청취하고 미청취는 uncertain/observed=false로 유지합니다.
- 검사·샘플·후처리 응답 유실로 job_id가 없으면 production_media_job(request_id, operation, arguments)을 사용합니다. operation은 inspect/audio/finish, arguments는 내부 request_id까지 포함한 원래 도구 입력 그대로입니다. job_id 방식과 함께 쓰지 않습니다. 기존 본인 영수증만 GET 조회하며 같은 바깥 production_step ID의 재호출은 완료·실패만 CAS 복구하고 새 작업을 접수하지 않습니다. 메모리 영수증은 약1시간 유지되며 재시작·만료 뒤404는 미실행 증명이 아닙니다. 입력 불일치409는 충돌이고 자동 재접수·acknowledge하지 않습니다. 원래 ID·SHA·라이브러리 근거를 보존합니다.
- production_audio_sample(url,start,seconds,request_id)는 최대10초의 원본 첫 오디오를16kHz mono PCM WAV로 추출합니다. job 완료 후 production_audio_listen으로 실제 오디오를 받습니다. CLI는 --out으로 저장하고 청취 가능한 도구로 들어야 합니다. mean/peak/LUFS·분류 점수는 실제 청취나 음성/음악/Foley 부재 증명이 아닙니다. 청취 불가능하면 audio 검수 uncertain/observed=false로 기록하고 승인하지 않습니다. 자료를 받았다는 사실을 들었다는 관찰로 바꾸지 않습니다.
- CLI 0.4.38+와 호환 hosted MCP의 production_preview(board_id,node_id,request_id,timeout_sec=5)는 음향 미청취를 uncertain/observed=false로 남긴 검토용 합본입니다. 실제 완료된 현재 컷의 visual/technical passed와 관찰 근거가 필요하고, technical evidence에는 정확한 원본의 본인 완료 production_media_inspect job_id·sha256를 넣습니다. 거절·실패·미완료·stale 컷은 차단합니다. clip_audio=true로 원본 컷 소리만 쓰며 추가 voice/narration/bgm 입력·모델 생성 없이0크레딧입니다. 합본의 음량 조정·AAC 재인코딩은 적용될 수 있습니다. 기존 sequence 노드에 이전 결과를 보존해 저장하되 review_pending=true/quality_approved=false/ready=false이고 공개하지 않습니다. stale은 입력 변경 여부이며 검토 대기와 별개입니다. 검토본에는 production_attach_finish를 쓰지 못하므로 원본 컷 후처리·검수를 먼저 하세요. 같은 request_id로 확인하면 job_id 없는 응답 유실도 본인 요청 키의 기존 합본을 조회해 복구합니다. 합본은 약1시간의 임시 메모리이므로 재시작·만료 후404는 미접수나 실패의 증명이 아닙니다. 자동 재접수하지 말고 저장된 시도·라이브러리·원본을 확인하며 미확정 상태를 유지하세요. 검토 대기 URL을 사용자에게 전달한 뒤 실제 관찰자·원본·구간·한계를 근거로 컷 review를 갱신하고 production_update(edit)에 regenerate:[최종노드ID]와 재합본 이유를 기록한 뒤 정상 production_plan/run·최종 검수·delivery로 진행합니다. 검토본 생성 성공을 실제 청취나 품질 승인으로 바꾸지 않습니다.
- production_update(review)는 최신 node fingerprint와 verdict(approved/rejected/uncertain), visual/audio/technical checks를 저장합니다. passed는 observed=true와 실제 evidence가 필요합니다. 원본·제작 기준이 바뀌면 기존 승인은 무효입니다. production_inspect의 section=contract/decisions/reviews/attempts/history/nodes와 offset/limit/next_offset으로 긴 기록을 끝까지 읽습니다.
- 수정은 production_update(edit)의 reason·changes 또는 regenerate:[node_id]와 dry_run=true로 범위를 확인한 뒤 최신 expected_updated_at으로 적용합니다. params는 옵션 객체 전체 교체입니다. src/gen/stack과 이력은 보존하고 영향받은 후속 결과는 stale입니다. 새 결정·계획·실행·검수를 거치며 이전 결과를 새 성공 컷으로 세지 않습니다. CAS 충돌은 다시 읽고 판단합니다.
- 최종 sequence의 실제 순서·길이·컷 경계·끝 프레임·음향을 검사합니다. production_media_finish(url,width,height,request_id,iris?)는 원본을 보존하며 exact ratio/SAR1 패딩 결과를 라이브러리에 새로 남깁니다. 각변64~1920 짝수, 입력300초/210MB/SAR1:1, 지원되는 단일 MP4 오디오는 codec-copy 후 packet SHA를 검증합니다. iris 규격은 production_commands이며 실제0초 시작 CFR1~60fps의 끝부분 타원/고양이 실루엣 암전입니다. 얼굴 추적·새 효과음 생성은 하지 않습니다. source/derived SHA·decode·geometry·duration·오디오·암전 verification과 실제 화면을 확인합니다.
- production_attach_finish(board_id,node_id,job_id,expected_updated_at)는 현재 source_url과 일치하는 본인 finish만 원본·이력을 보존해 적용합니다. 파생 결과를 다시 검수하고 production_delivery(board_id,node_id)로 전달 준비를 확인합니다. 공개 게시·공유권한 변경 도구는 아닙니다. 개인 참고 원본·인증값·소유자정보·실패 중간자료를 공개 예시에 넣지 않습니다.
- inspect/audio/finish는0크레딧이지만 미디어 job은 약1시간의 서버 메모리 상태이며 재시작하면 사라질 수 있습니다. 404 뒤 라이브러리와 request_id·해시를 확인하고 명시적으로 재접수합니다. 보드에 남는 제작 예약과 구분합니다. 순서: https://aimzlabs.com/docs/mcp/tools#production-recipe

- 먼저 whoami 로 로그인·잔액·확인 정책을 확인하세요. 로그인이 없으면 사용자에게 터미널에서 `aimz login` 을 실행해 달라고 하세요.
- 생성: list_models → model_info(입력 키 확인) → estimate_credits → generate. 생성은 사용자 크레딧을 씁니다.
- 이미지·영상 입력은 http(s) URL 또는 이 PC 의 파일 경로(자동 업로드)를 params 에 넣습니다.
- 이미지 출력 규격(CLI 0.4.35+와 호환 서버): 생성 params.aspect_ratio는 출력 비율입니다. GPT Image의 size=small/medium/large는 픽셀 크기가 아니라 low/medium/high 화질을 고릅니다. 실제 키와 지원 비율은 model_info로 확인하세요. 정확한 비율을 지원하는 GPT Image 경로에서16:9는1536x864, 9:16은864x1536입니다. 구형 모델의 선택지를 최신 모델과 같다고 가정하지 마세요. estimate_credits의 out_size가 요청 비율과 맞는지 확인하세요(1536x1024는3:2이며16:9가 아닙니다). 참고 이미지가 있어도 명시한 출력 비율을 덮어쓰지 마세요. 견적은 예정 요청의 규격일 뿐이므로 첫 생성물의 실제 가로·세로를 확인한 뒤 여러 장을 진행하고, 불일치하면 원인을 고친 뒤 다시 계획하세요.
- 참고 오디오 ref_audio 는 model_info 의 max 가 2 이상이면 목록으로 넣습니다(mp3·wav). 하나당 min_sec~max_sec 초, 합쳐 max_total_sec 초를 넘으면 공급사가 거절하니 미리 잘라서 넣으세요.
- Labs 워크플로우는 list_workflows → get_workflow → workflow_estimate 후 workflow_start 로 회차를 만들고 workflow_plan → workflow_step 을 완료까지 반복하세요. 진행 중 작업은 같은 단계와 같은 계획으로 다시 확인하고 새 회차로 재접수하지 마세요.
- 워크스페이스는 workspace_list → workspace_get → workspace_plan → workspace_generate 로 노드를 생성합니다. 완료 결과는 workspace_copy_result 로 사본에 넣습니다(원본은 덮어쓰지 않습니다). 사용자가 그 보드를 열어 고치는 중이 아니면 in_place=true 로 같은 보드에 넣을 수 있습니다.
- 새 영상 요청은 기존 예시를 고르지 말고 매번 요청에서 새로 설계하세요. workspace_flow_plan(flow_id="custom", spec={title,look,rule,mode,cast,places,props,shot_durations}, seconds, budget, ratio, style, sound) 으로 계획을 검증한 뒤 같은 사양으로 workspace_flow_create를 부르세요. 캐릭터·공간·소품 시트는 합쳐 최대9개입니다. shot_durations는 각 컷의 초 배열(최대36컷·합계300초; CLI 0.4.36+와 호환 서버)입니다. 요청한 전체 길이와 기존 기본 길이를 유지하고 상한에 맞추려고 늘리지 마세요. 기존 수동 예시는 최대180초입니다. 동작·반응·소리에 맞춰 짧게 나누고, 15초를 채우려고 반복하지 마세요. 주로4~8초에서 설계하되 모델의 실제 허용길이는 서버가 확인합니다. seconds를 지정하면 배열의 합과 같아야 합니다. 서버가 배열을 확인해 돌려주지 않으면 구버전이므로 업데이트를 안내하고 멈추세요. 사용자가 모델을 명시하면 현재 모델 목록의 id를 spec.video_model에 넣으세요(예: Wan 3.0은 wan_30). 지정 모델만 고려하며 예산·길이·참고 입력·네이티브 소리가 지원되지 않으면 다른 모델로 바꾸지 않습니다. 구버전 서버가 지정 모델을 무시하면 실행 전에 멈추고 업데이트를 안내하세요. 모델을 지정하지 않은 custom은 숫자 예산이 없어도 지원 모델 전체를 비교하며 기본 추천은 품질 순서입니다. 성공 응답에도 cheapest가 있으므로 plan·cheapest·cheaper·better의 모델명과 실제 견적을 함께 보여 주세요. 특정 모델만 추천하거나 가격을 추측하지 마세요. 숫자 예산 없이 저렴하게·가성비를 요청하면 cheapest.credits를 budget으로 다시 workspace_flow_plan에 주되 spec(shot_durations 포함)·seconds·ratio·style·sound와 필요한 참고 입력·네이티브 소리를 유지하세요. 사용자가 명시한 숫자 예산이 있으면 그 값을 우선합니다. 최종 계획과 같은 입력으로 workspace_flow_create를 부르세요. 기존 수동 예시만 예산이 없으면 원래 모델을 유지합니다. 워크플로우가 만들어지면 workspace_run_plan(board_id)의 순서·예상비용을 확인하고 승인된 범위에서 workspace_run으로 실행합니다. workspace_flows의 기존 템플릿과 example=true는 사용자가 해당 예시를 명시적으로 고른 경우에만 사용합니다. 기존 보드의 비율만 고칠 때는 새로 설계하지 말고 workspace_set_ratio를 사용해 원본을 보존하세요. 2D 캐릭터와 3D 환경을 섞는 요청은 각각의 스타일과 접촉·가림 관계를 명시하고 참고 이미지·첫 컷의 실제 결과를 검수한 뒤 나머지를 생성하세요. 요리 효과음 중심이면 sound="effects"와 clip_audio를 쓰고 요청하지 않은 대사·내레이션·배경음악을 추가하지 마세요. state 가 running 이면 같은 request_id·plan_hash 로 다시 부르세요(다시 접수·승인되지 않습니다). failed 는 고친 뒤 workspace_run_plan 부터 새 request_id 로, budget 은 남은 것을 다시 승인받습니다. 인물이 이어지는 흐름은 시나리오 → 인물 그림 → 캐릭터 시트·공간 시트 → 씬 글 → 씬 영상(계획이 고른 지원 모델 — 실사화 경로가 필요하면 real_person 이 켜져 있다) 순서이고, 씬 글이 @인물1·@공간2 처럼 이름으로 부른 시트만 그 씬 영상의 참고 그림으로 실립니다. 캐릭터 시트는 그림 노드의 초안 params.preset 이 character_sheet 인 노드입니다 — 흰 배경 16:9 4분할(얼굴 클로즈업 + 목부터 발끝까지의 앞·옆·뒤) 프롬프트와 배치 가이드 그림이 보낼 때 자동으로 붙으니, 캐릭터 그림을 이어 놓거나 어떤 캐릭터인지만 적으면 됩니다. 씬 글·컷 글(초안 params.video_prompt 또는 model_prompt)은 이어진 생성 노드의 모델 핵심 문서를 읽고 쓰므로, 생성 모델을 바꿨으면 그 글 노드부터 다시 만드세요. 영상 요청에 실린 참고 그림은 프롬프트가 그 모델의 표기로 빠짐없이 부릅니다. 흐름이 어떻게 채워지는지 먼저 보려면 workspace_flow_create(flow_id, example=true) 로 만들어 둔 예시(결과·프롬프트 포함, 크레딧 없음)를 가져와 workspace_get 으로 읽어 보세요. 그림의 한 곳만 바꾸려면 workspace_mask_edit(node_id, shapes, prompt) 로 '영역 편집' 노드를 만듭니다 — shapes 는 그림에 대한 비율(0~1)의 상자·타원이고 prompt 를 비우면 그 자리의 것을 지웁니다. 돌려주는 marked_url(영역이 자홍색으로 표시된 그림)로 자리를 확인한 뒤 workspace_run_plan(until_node_id) → workspace_run 으로 만드세요. 영역 밖은 원본 픽셀 그대로 남고, 원본 그림이 바뀌면 영역을 다시 정해야 합니다. 워크스페이스의 ComfyUI 노드(그림·영상 노드의 초안 model 이 comfyui, params.workflow 가 허브 워크플로우)는 workspace_run 이 만들지 않고 그 앞에서 state 'comfy' 로 멈춥니다 — workspace_comfy_inputs로 입력·참고를 읽고 workspace_comfy_plan → workspace_comfy_plan_status로 실제 입력·견적을 준비한 뒤, 승인된 workspace_comfy_run → 같은 UUID의 workspace_comfy_job으로 완료·정산·노드 연결을 확인하고 이어 갑니다. 제작 계약이 있는 보드는 구형 workspace_comfy_result 수동 연결을 거절하므로 전용 경로를 사용합니다. 컴피 크레딧은 Labs 크레딧과 따로이고 workspace_run_plan 의 예상 크레딧에 들어 있지 않습니다. 완성본 노드는 씬(컷)을 이어 붙이는 노드라 크레딧이 들지 않고, 끝나면 final_url 이 한 편의 영상입니다. 제품 광고처럼 사진이 필요한 흐름은 upload_file 로 올린 주소를 upload_url 로 넣습니다.
- 확정된 시각 정체성은 spec.look에, 수정 때 지킬 제약은 spec.rule에 구체적으로 기록하고 모든 관련 이미지·시트·영상 프롬프트에 전달하세요. 체형·머리/몸 비율·실루엣·선 두께와 색·팔레트·질감·명암·대상별 2D/3D 표현을 보존합니다. look은 Character: ...; Environment: ...; Props: ...; Shared: ...처럼 역할별로 나눌 수 있습니다(기존 문자열도 지원하며 별도 style_lock 인자는 없습니다). 동작·구도·길이·비용·모델 수정은 스타일 변경 허락이 아닙니다. 사용자가 스타일 변경을 명시하면 해당 항목만 갱신하고 원본과 이전 기준을 보존하세요.
- 확정 장면을 다중 참고 지원 모델로 수정할 때는 원본 장면(master canvas)을 첫 이미지, 캐릭터 정체성 참고를 두 번째 이미지로 두고 각 역할을 명시하세요. 소품만 바꿀 때는 변경할 소품을 짧게 설명하고 캐릭터·구도·팔레트·재질을 유지하세요. 경쟁하는 전체 장면 설명으로 확정 그림체를 다시 설계하지 마세요. 선택한 모델로 대표 수정 한 장을 검수한 뒤 나머지를 진행하세요. 참고 순서와 프롬프트만으로 모든 모델의 준수를 보장하지 않습니다.
- 참고 역할을 분리하세요. 확정된 캐릭터 원본/시트는 캐릭터의 생김새와 그림체 기준이고 공간 참고는 배경·배치 기준입니다. 배경의 질감·명암·선 처리가 캐릭터를 덮지 않도록 대상별 적용 범위를 프롬프트에 명시하세요. 혼합 매체라면 예를 들어 고양이=2D, 음식=3D 로우폴리처럼 역할을 유지합니다. 캐릭터 자체를 검수하는 정지컷에는 필요한 캐릭터 참고를 쓰고 불필요한 배경 참고를 섞지 마세요. 필요한 참고가 전달되지 않으면 그대로 생성하지 말고 연결을 고치세요.
- 연속 장면은 대표 정지컷을 기준 원본과 대조한 뒤 짧은 영상 소량을 검수하고 나머지를 생성하세요. 체형·실루엣·선·색·질감·명암·매체 배분과 영상의 시작/중간/끝을 확인합니다. 의도와 다른 결과는 다음 생성의 참고로 재사용하지 말고 확정 원본으로 돌아가 프롬프트/참고 연결을 고치세요. 사용자 원본과 기존 결과는 보존합니다. 이 검수 순서는 에이전트 작업 지침이며 모든 모델의 스타일 준수나 자동 시각 검증을 보장하지 않습니다. 기준을 충족하지 못하면 대량 생성을 멈추고 차이를 설명하세요.
- 레퍼런스 영상으로 만들기: 사용자가 영상 주소(유튜브·X·인스타그램·Threads·틱톡 등 video_probe 가 받는 영상 한 편)나 라이브러리의 영상을 주며 '이런 영상', '이것처럼' 이라고 하면 reference_estimate 로 무엇인지(제목·길이)와 값을 보여 준 뒤 reference_analyze 로 분석합니다(5분까지 — 3분보다 길면 앞 3분만 봅니다. 값은 영상 길이만큼이고, 끝난 작업의 credits 가 실제로 받은 값입니다. 주소에서 받으면 영상 받기 정액이 들어 있고 받은 영상은 라이브러리에 남습니다). 그 영상을 직접 본 것처럼 지어내지 말고 돌려받은 brief(summary·hook·scenes·shots·characters·places·props·sound)를 근거로 말하세요. 같은 구성으로 만들려면 workspace_reference(flow=brief.flow, note, video_url, idea=사용자가 만들 소재) → workspace_run_plan → workspace_run 입니다 — 씬 수·씬 길이·말의 방식·화면 스타일이 레퍼런스의 것이고, 시나리오가 분석 메모를 같이 읽습니다. idea 를 비우면 레퍼런스의 소재로 시작하니 사용자의 소재를 먼저 물어보세요. 이미 있는 워크스페이스를 레퍼런스에 맞춰 고치려면 workspace_reference(board_id, node_id=시나리오·기획안 글 노드, note, expected_updated_at) 로 분석 메모를 잇고 그 글 노드부터 다시 만듭니다(씬 수 같은 흐름의 모양은 그대로입니다).
- 영상만 받으려면 video_probe(무엇인지·값·고를 수 있는 것) → video_download 입니다(한 편에 정액, 15분·400MB 까지, 다 받아 저장한 뒤에만 듭니다). 되는 주소는 유튜브·X(트위터)·인스타그램·Threads·틱톡·Facebook·Twitch 와 서버가 아는 다른 사이트입니다(로그인이 필요한 곳·서버를 막는 곳은 그렇게 알려 줍니다). video_probe 의 choices 가 그 영상에 실제로 있는 화질(어림한 크기)과 소리만(mp3)입니다 — 사용자에게 보여 주고 고른 줄의 res 를 height 로 주세요(over=true 인 줄은 크기 상한을 넘어 받을 수 없습니다). 결과의 url 은 라이브러리의 파일이라 생성 입력으로 쓸 수 있습니다. 재생목록·채널·라이브·성인용·로그인이 필요한 게시물은 받을 수 없고, 영상이 여럿인 게시물은 첫 영상을 받습니다. 시간 안에 안 끝난 받기·분석은 **다시 시작하지 말고** video_job(job_id, wait=true) 로 이어서 기다리세요(끊겨서 다시 부를 때는 처음의 request_key 를 그대로).
- 전용 도구가 없는 기능은 api_endpoints 로 찾아 api_request 로 호출합니다.
- '사용자 확인 필요' 오류나 승인 창이 거절·닫혔다는 오류가 오면 내용을 사용자에게 그대로 보여 주세요. 오류의 confirm_token 은 승인이 아닙니다 — 사용자가 채팅에서 새로 명시적으로 승인한 경우에만 같은 인자에 붙여 다시 호출하세요(로컬 연결만, 10분·1회, 같은 요청·견적·계정에만 유효).
  사용자의 승인 없이 confirm_token 을 쓰거나 자동으로 다시 부르지 마세요. 사용자가 원하지 않으면 같은 요청을 반복하지 마세요.
- 확인 정책(ask/once/yolo)은 사용자가 터미널에서 `aimz agent mode ...` 로만 바꿉니다.

대기열 (여러 사람이 동시에 쓸 때 — 수업 등)
- 생성은 서버 대기열을 거칩니다. 사람이 많으면 바로 시작되지 않고 차례를 기다립니다 — 실패가 아닙니다.
  공급사 동시 실행 칸이 꽉 차도 서버가 실패시키지 않고 순서를 지켜 다시 시도합니다.
- 여러 개를 만들 때는 generate 를 병렬로 여러 번 부르지 말고 generate_batch 로 한 번에 넣으세요(승인 1번).
- 생성 결과는 스튜디오(이미지·영상·오디오·채팅 탭 왼쪽 목록)의 프로젝트에 담깁니다. 사용자가 프로젝트를 말하면 generate·generate_batch 의 project 에 그 이름을 주세요 — 없으면 만들어지고, 이미 있는 이름은 list_projects 로 확인합니다. 말하지 않으면 오늘 날짜의 프로젝트('MCP 2026-11-12' 모양)에 담깁니다. 결과의 project 가 실제로 담긴 곳이니 사용자에게 어느 탭의 어느 프로젝트에서 볼 수 있는지 알려 주세요. session_id 는 여러 결과를 한 묶음(세션)으로 남길 때만 같은 값을 주고, 프로젝트 이름 대신 쓰지 마세요. 프로젝트 없이 쌓인 옛 결과를 정리해 달라고 하면 list_generations 로 찾아 project_add(project, generation_ids) 로 담습니다(그 결과가 속한 세션이 통째로 옮겨지고, 옮기지 못한 것은 skipped 로 돌아옵니다). 프로젝트에서 빼기와 삭제는 스튜디오 화면에서 합니다.
  결과는 wait_jobs 로 함께 기다립니다. 기다리는 동안 다른 일을 해도 됩니다(wait=false 로 접수만).
- 큰 작업 전이나 오래 걸리면 queue_status 로 예상 대기 시간을 보고 사용자에게 알려 주세요.
- 시간 안에 안 끝난 작업(queued·running)을 **다시 접수하지 마세요** — 크레딧이 두 번 듭니다.
  job_status 나 wait_jobs 로 이어서 기다립니다.
- '더 줄 세울 수 없습니다'(429)는 내 작업이 너무 많이 쌓인 것입니다. 도구가 잠시 자동으로 기다렸다 다시 넣고,
  그래도 안 되면 몇 개가 끝날 때까지 기다렸다가 넣으세요.

오디오 (ElevenLabs·Suno)
- 읽기 el_tts 는 tts_model 로 엔진을 고릅니다: v4(기본, 가장 자연스러움) · v4_turbo · flash(둘은 절반 값) · v3 · v2.
  v4·v3 은 글 안의 [laughs]·[whispers] 같은 소리 태그를 말투로 읽습니다. 다른 엔진에서는 태그를 지우고 보냅니다.
- 대화 el_dialogue 는 prompt 를 줄마다 "A: …", "B: …", "C: …" 로 씁니다. 목소리는 voice(A)·voice2(B)·voice3(C)이고, 두 사람 이상이 말해야 합니다.
- 목소리는 list_voices 로 계정 목록을, list_voices(source="library", language="ko" …) 로 ElevenLabs 공개 라이브러리를 찾습니다.
  라이브러리 id 도 voice 에 그대로 넣습니다. 사용자가 ElevenLabs 목소리 링크나 ID 를 주면 find_voice 로 먼저 확인하세요.
  preview_url 은 들어도 크레딧이 들지 않습니다. 추가 요금이 붙은 목소리는 거절됩니다.
- 효과음 el_sfx 는 duration 1~30초, loop=true 면 끊김 없이 이어지는 배경음입니다.
- 음악 el_music 은 lyrics 를 [Verse]·[Chorus] 같은 구간 줄로 나누면 구간마다 작곡합니다. duration 은 구간 수×3초 이상, 구간 수×120초 이하여야 합니다.
- Suno 는 suno · suno_wild(더 실험적) · suno_mini(가볍게) 셋이고, variety(off·normal·high·extra·max)로 두 곡의 변주 폭을 정합니다.

3D 씬 (프리비즈 — 인물·세트·카메라를 놓아 구도와 움직임을 잡는 3D 화면. 크레딧을 쓰지 않습니다)
- 먼저 scene_catalog 로 작업(op) 설명서·좌표 약속·고를 수 있는 값(몸·자세·동작·세트·샷·카메라 무브)을 보세요.
- scene_capture 로 저장된 씬의 카메라 이미지 또는 프리비즈 영상을 로컬 파일로 내보낼 수 있습니다. 3D 렌더는 Chrome·Edge 또는 Playwright Chromium 이 필요합니다.
- 새 씬은 scene_create(name, ops), 있는 씬은 list_scenes → scene_get(scene_id) 로 지금 모습을 보고 scene_apply(scene_id, ops).
- ops 는 [{"op": "add_person", "name": "민수", "at": [0, 0]}, {"op": "add_camera", "shot": "medium", "subject": "민수"}] 같은 목록입니다.
  오브젝트는 이름으로 가리킵니다. 좌표는 미터(Y 가 위, 바닥 y=0, 바닥에 서는 것은 at:[x, z]), 시간은 초입니다.
- 짜는 차례(ADR 0056): 첫 작업에 촬영 카메라와 기본 빛(set_environment{time} 또는 light_rig)을 함께 놓고, 실루엣(자리·크기) → 비례(scene_get 의 size, m) → 깊이(앞·중간·뒤) → 닿음(떠 있거나 같은 자리에 겹친 것 없음 — scene_inspect 의 problems) → 카메라 읽기(scene_view) → 디테일 순으로 고칩니다. 앞 단계가 틀리면 뒤를 다듬지 않습니다. 이름은 역할이 보이게(주인공·버스·가로등…). 크게 고치기 전에는 scene_duplicate 로 체크포인트를 남기세요.
- 눈으로 확인: 작업이 성공했다는 것은 그림이 맞다는 뜻이 아닙니다. scene_view(scene_id) 로 실제 3D 화면 그림을 받아 가장 큰 문제부터 고칩니다 — 기본은 전체 부감 + 평면도 + 촬영 카메라. views 로 카메라 이름·가상 카메라(custom: at·look_at·lens)·각도 시트(angles: target 의 front·three_quarter·back…)를, pass 로 깊이·노멀·선화(lineart)·포즈·마스크를, guides=true 로 3분할·안전선을 봅니다.
- 실제 물건이 필요하면 asset_search(query 는 영어: chair·car·tree·street lamp…, previews=true 면 미리보기 그림) → asset_import(id) → 결과의 use 를 scene_apply 에(add_model 에 at·facing·height 를 더해서). Poly Haven(CC0) 모델은 실제 치수로 놓입니다. 하늘·빛은 asset_search(kind=hdri) → asset_import → set_environment{hdri}. 시간대는 set_environment{time:"17:40"} 한 줄(해 방향·빛 색), 인물 조명은 light_rig{preset:three_point, subject}. 그림(생성 결과·라이브러리 그림)은 add_image{url, height, aspect:"16:9"} 로 세워 둔 판이 됩니다 — 배경 그림·인물 참고 카드·포스터·간판.
- 에셋에 없는 물건은 만들어 씁니다(ADR 0058): generate(model_id="tripo-3d", params={prompt: "물건 하나를 영어로"}) 또는 그림이 있으면 "tripo-3d-image"(params={init_image: 그림 주소}) — 한 번에 40 크레딧 안팎(quote 로 정확한 값을 보이고 승인 먼저), 5~10분이라 timeout_sec=900 을 주고, 그 안에 안 끝나면 job_status. 결과 outputs[0] 이 GLB(긴 변 1 로 정규화) — scene_apply 의 add_model{url, height(m)} 로 실제 크기에 맞춰 놓습니다. 장면 전체가 아니라 물건 하나씩, 그림은 배경이 단순한 물건 사진이 잘 됩니다.
- 거리·실내 세트(building·house·road·sidewalk·streetlight·traffic_light·bus·bench·fence·railing·bush·rock·desk·shelf·tv·lamp·plant·door·fridge), 경사로·피라미드, scatter(군중·숲 — 씨앗이 같으면 같은 자리), array(grid 책상 줄 · circle 탁자 둘레)로 빠르게 채웁니다. 카메라는 lens(mm)·dutch(기울임), 움직임은 camera_move(프리셋)·camera_path(지나갈 자리)·camera_follow(움직이는 대상 따라가기).
- 여러 샷을 한 영상으로: 카메라를 샷마다 놓고 shot_list{shots:[{camera, seconds}…]} 로 컷을 나눕니다(씬 길이가 합계로 맞춰지고, 영상·이미지 내보내기·3D 화면의 AI 영상이 컷을 따릅니다). 사용자가 말한 샷 수를 그대로 지키고, 대사가 있으면 누가 몇 초에 말하는지 샷과 함께 적어 둡니다. 확인은 scene_storyboard(mode=shots).
- 내보내기: 스토리보드는 scene_storyboard(mode=shots: 샷마다 한 칸 / cameras: 카메라마다 한 칸 / timeline: 시간 순 컷) 한 장. 생성 입력은 scene_capture(로컬)·scene_export_to_library(원격)에 camera·at_seconds·pass_name(rgb·depth·normal·lineart·pose·mask). Blender·Unreal·Unity 로 넘길 때는 scene_export_glb(카메라·조명·이름이 든 GLB 를 라이브러리에).
- 3D 결과로 AI 그림·영상: 카메라 그림을 라이브러리에 올려(원격 scene_export_to_library · 로컬 scene_capture 뒤 upload_file) generate 의 첫 프레임·참고 그림으로 주고, 프롬프트에 '카메라 위치·인물 배치·구도는 그대로'를 넣습니다. 블록아웃 영상을 참조 영상으로 쓰면 카메라·타이밍은 블록아웃이, 얼굴·옷·장소는 참고 그림이 정합니다 — 회색 대역에는 얼굴·손을 만들지 않고 역할별 색만 다르게(add_person 의 color), 프롬프트는 초 단위로(0~3초 와이드: …). 카메라는 블록아웃에서 고치고 생성 모델 안에서 다시 고치지 않습니다. 값이 드는 생성은 quote 로 견적을 보여 주고 승인받은 뒤 컷마다 한 장부터, 같은 문제의 재시도는 한 번까지.
- 같은 장소의 새 각도(장소 사진 한 장 → 다른 카메라): ① 사진에서 보이는 것(물체·개수·방향·문·창·앞뒤 순서)과 짐작한 것(크기·안 보이는 곳)을 나눕니다. 카메라 뒤처럼 중요한 안 보이는 곳은 사용자에게 묻습니다. ② 사진을 찍은 자리에 '원본 카메라'를 놓고 scene_view 의 overlay:"<사진 주소>"(사진 비율로 찍혀 반투명으로 겹칩니다)로 카메라 높이·화각과 물체 자리를 함께 맞추고, view top 으로 배치를 봅니다. ③ 새 카메라는 사용자가 고른 것(역방향 와이드·옆 미디엄·디테일). 역방향은 거울이 아닙니다 — 익숙한 물체 옆으로 나가 반대쪽을 보게 돌립니다. 컷마다 물체를 따로 옮기지 않습니다. ④ 겹침 없는 카메라 그림을 라이브러리에 올리고 generate(참고 그림을 받는 그림 모델, 예: seedream-5.5)에 원본 사진(정체·재질·색·빛)과 각도 그림(카메라·배치·방향) 두 장을 줍니다. 프롬프트 차례: 입력 역할 → 카메라 고정 → 보이는 배치·개수 → 새로 드러난 곳 → 빛(원본의 방향을 새 화면 기준으로). 견적·승인 뒤에.
- 블록아웃은 이 순서로 짜세요: 공간(add_room 으로 바닥·벽·문·창 / 야외는 세트) → 세트·소품(실제 치수, size·on·duplicate)
  → 인물(서로 보는 방향, 앉는 인물은 의자 자리에 pose sit, 가구와 겹치지 않게) → 카메라(설정샷 + 투샷 subject:[둘] ·
  어깨너머 shot:"ots" · 단독, 180도 규칙) → 시간(걷기·동작·카메라 무브).
- 결과의 results 에 작업마다 성공·실패와 이유가 있습니다. 성공한 작업은 이미 저장됐으니 다시 보내지 말고(겹쳐 생깁니다),
  실패한 것만 고쳐 scene_apply 로 보내세요.
- 결과의 check 는 카메라 점검입니다 — 카메라마다 누가 화면 어디(x·y 0~1)에 얼마나 크게(w·h) 보이는지, 잘림(cut)·가림(hidden_by),
  그리고 problems(가림·머리 잘림·인물 겹침). 문제가 있으면 transform·move·face 로 고쳐 다시 scene_apply 하세요.
  언제든 scene_inspect(scene_id) 로 다시 볼 수 있습니다.
- 돌려준 link 를 사용자에게 알려 브라우저로 열게 하세요. 그 씬을 3D 화면에 열어 두면 에이전트가 바꾼 것이 몇 초 안에 저절로 보입니다
  (화면에 저장 안 한 편집이 있으면 덮지 않고 '바깥에서 바뀐 씬 불러오기' 버튼을 띄웁니다).

3D 블록아웃 모델링과 추출
- scene_catalog로 사용 가능한 기본 도형과 작업을 확인한다. scene_create 또는 scene_apply에서 add_prop으로 이름 붙인 도형을 조합하고 edit_prop으로 부품의 모양·색·표시를, transform으로 위치·회전·크기를 수정한다.
- 부분 성공 시 성공한 작업을 반복하지 말고 결과를 확인한다. 저장 충돌이 나면 최신 씬을 다시 불러와 변경을 조정한다.
- 카메라를 배치하고 움직임을 추가한 뒤 scene_inspect로 구도를 확인하고 scene_capture의 image 또는 video로 로컬에 저장한다. 캡처에는 Playwright와 지원 브라우저가 필요하며 업로드하지 않은 로컬 모델은 새 브라우저에서 보이지 않을 수 있다.
- 생성형 AI 영상이 필요하면 모델의 입력과 비용을 확인하고 필요한 사용자 승인을 받은 뒤 캡처 결과를 참조 영상으로 사용한다. 기본 도형 조합은 정점 편집이나 불리언 모델링을 제공하지 않는다.
- 빠른 시안은 settings의 resolution [640,360] 또는 세로 [360,640]으로 만든 뒤 최종 해상도로 바꾸세요. scene_inspect를 여러 시점에서 실행하고 실제 영상을 확인하세요. 인물 영역은 근사치라 움직이는 팔·다리의 화면 잘림을 놓칠 수 있습니다. 샷 전환은 자동 컷이 없으므로 set_active_camera로 카메라별 영상을 따로 내보내세요.

ComfyUI 워커와 실행 크레딧 (https://aimzlabs.com/docs/mcp/comfyui)
- AIMZ 대시보드에 현재 등록된 워크플로우와 로그인 사용자가 ComfyUI에 저장한 개인 워크플로우만 사용한다. 개인 항목은 comfy_personal_list로 찾고 comfy_personal_get으로 가져온다. 노드 요약만 필요하면 summary_only=true를 사용한다. 개인 원본에는 비공개 프롬프트나 인증값이 있을 수 있으므로 외부 서비스에 보내거나 공유하지 않는다. comfy_wiki_find로 번호·이름·용도·모델·입출력을 찾고 comfy_wiki_read로 가이드와 주의사항·검증 근거를 읽어 사용자에게 후보를 추천한다. 인터넷에서 워크플로우를 찾거나 다운로드하지 말고 임의의 API 그래프를 만들지 않는다. 적합한 대시보드 또는 개인 항목이 없으면 없다고 알린다. 목록은 Hub 최신화 시점 기준이다. missing_guide가 참이면 세부 사용법이 없는 것이므로 추측하지 않는다.
- comfy_status로 권한·별도 컴피 크레딧과 내 대기열을 확인한다. comfy_workflow_plan에 선택한 대시보드 번호 또는 workflow_id를 전달하면 editable_inputs와 quote, plan_id가 나온다. 개인 워크플로우는 comfy_personal_list의 ID와 source="personal"을 전달한다. 입력이 100개를 넘으면 comfy_workflow_inputs에 plan_id와 next_input_offset을 전달해 나머지를 확인한다. 입력은 {노드ID: {입력이름: 값}}으로 전달하며 표시된 입력만 바꿀 수 있다. 필요한 로컬 미디어는 comfy_upload_input으로 올린 파일명을 쓴다. comfy_node_info로 노드 입력을 확인한다. 샘플 대신 사용자의 프롬프트와 미디어를 지정한다. 준비에는 Chrome·Edge 또는 Playwright Chromium이 필요하다.
- standalone 계획의 applied_inputs와 editable_inputs.value·choices·숫자 제약으로 실제 반영 값을 확인한다. quote와 credit_cap.minimum을 함께 읽는다. 실행 기록이 있으면 일반적으로 estimated_credits 이상이 최소이고 maximum_credits 잔액 전부를 승인할 필요는 없다. first_run=true이면 브로커가 잔액 임시 예약을 요구해 작은 상한은 거절될 수 있다. 최소 예약이 승인 예산보다 크면 멈추고 알리며 자동 확대하지 않는다. 사용자가 승인한 max_credits와 미리 보관한 새 소문자 UUID로 comfy_workflow_run을 호출한다. 실제 실행 시간으로 정산하며 미확정 금액은0으로 처리하지 않는다.
- 로컬 standalone 계획은 persistence.saved=true일 때 같은 PC·CLI 저장소·계정·서버에서30분 안에 다른 aimz call 프로세스가 같은 plan_id를 이어 쓸 수 있다. 실행 때 허용된 원본을 다시 준비해 revision·내용·실행 프롬프트 해시가 같은지 확인한다. 저장 실패·만료·원본 변경이면 다시 계획하고 견적을 읽는다. hosted 계획은 여전히 서버 메모리이며 재시작 후 보존되지 않는다. 영수증은 제출된 작업이 아니고 개인 입력을 포함할 수 있어 공개하지 않는다. 이미 접수했거나 불확실하면 새 계획 실행 대신 기존 request_id로 작업부터 복구한다.
- 응답이 불확실하면 재접수하지 않고 같은 request_id로 comfy_job의 상태와 정산을 확인한다. 완료 결과는 comfy_download_result로 새 경로에 저장하며, 취소는 본인 작업만 comfy_cancel로 한다. 확정 실패·취소는 환불되며 불확실한 작업은 정산이 보류될 수 있다.

휴대폰 가상 카메라
- 3D 화면에서 QR을 스캔해 휴대폰 기울기와 조이스틱으로 카메라를 실시간 조작하고 녹화할 수 있습니다.
- MCP에서는 저장된 씬의 카메라를 scene_apply의 transform으로 조정하고 scene_capture로 확인할 수 있습니다. 휴대폰 WebRTC 연결·라이브 조이스틱과 미리보기는 MCP가 직접 제어하지 않습니다.

CLI update notices
- If the connection instructions or a tool result reports an update, tell the user the installed and latest versions and the supplied update command. Do not install it automatically. Stop the MCP client, update, then restart it. No notice can also mean the check failed or was disabled.

Generation credit exemption
- whoami.generation_credits_unlimited identifies roles exempt from ordinary generation credits. Model estimates show standard prices; the actual charge for an exempt account is zero. ComfyUI execution credits are a separate balance and have their own quote.

Account-specific estimate
- estimate_credits and the generate estimate return account_charge_credits_max for the current role; null means the role could not be verified. The model price is not the exempt account charge. A role can change before submission, so check final server settlement and report any discrepancy.

영상 편집기 (editor_*)
- 영상 편집은 editor_open 으로 세션을 연 뒤 한다. 편집기의 모든 기능은 명령이다. editor_commands(query)로 명령과 인자를 찾고 editor_run(command, params)으로 실행한다. 여러 개는 editor_batch 로 묶는다: 되돌리기 한 단계이고 하나라도 실패하면 전부 되돌아가며, 값 자리에 {"$ref": [단계 번호, 키, …]}를 쓰면 앞 단계의 결과를 쓴다.
- 미디어는 editor_import 로 넣는다: 이 PC 의 파일 경로 또는 AIMZ LABS 주소(generate·list_generations 가 준 url). 넣은 뒤 file.newSequence {"fromItem": id} 로 그 클립에 맞는 시퀀스를 만들거나 timeline.place 로 올린다. id(항목·클립·트랙)는 editor_inspect 의 project·sequence 로 확인한다. 시간은 틱(1초 = 254016000000)이고 많은 명령이 seconds·frame·timecode 도 받는다.
- 결과는 editor_frame(프레임 그림)과 editor_inspect 로 확인한 뒤 보고한다. 내보내기는 editor_export(dest_dir, format)이고 to_library=true 면 라이브러리에도 올린다(50MB 까지). 프로젝트는 editor_save(path)로 저장하고 editor_open(project=path)로 이어서 편집한다.
- 편집에는 크레딧이 들지 않는다. 편집기 도구는 로컬 CLI 전용이다(호스팅 MCP 에는 없다). 사용자가 브라우저에서 연 편집기 화면과는 별개의 세션이므로 결과는 파일과 라이브러리로 전달한다.
- 화면의 자동화(자막 자동 만들기·숏폼 만들기·무음 구간 제거·장면 자르기·비트 표시)는 브라우저 안에서 도는 분석이라 MCP 도구로는 없다. 같은 편집은 명령으로 직접 한다: 지울 구간은 markers.markIn·markers.markOut 뒤 sequence.extract, 자르기는 timeline.razor, 자막은 captions.newTrack 뒤 captions.add, 세로 숏폼은 file.newSequence(1080x1920) 뒤 timeline.place(sourceIn, duration)와 effects.setParam(motion scale·position).

ComfyUI run permission
- Check comfy_status.permission.allowed before requesting approval or running. If it is not true, report the reason and ask the user to contact their administrator; do not bypass the restriction. Credits and MCP access do not grant run permission. The broker checks the signed-in user and allowed schedule again on submission.

- 관리자 전용 회사별 리포트는 admin_credit_report(start, end, company_id)로 조회합니다(YYYY-MM, 최대 12개월, 사용자 승인). 크레딧 기준 가치와 API 추정 원가를 분리하고, 공급사 청구서와 대조되지 않은 금액을 확정 지출로 말하지 마세요. 직원 정보가 포함됩니다.
- 관리자 공급사 실측은 admin_machgen_reconcile(start, end, company_id)로 확인합니다. 사용자 승인 후 MachGen에서 연결된 작업의 순 이용액만 돌려주며 미연결·다른 공급사·현금 결제는 별도로 남깁니다.
- 관리자 회사 ID는 사용자 승인 후 admin_companies로 찾습니다.

For each new video, design a new custom flow from the request rather than choosing a template: workspace_flow_plan(flow_id="custom", spec={title,look,rule,mode,cast,places,props,bgm,shot_durations}, seconds, budget, ratio, style, sound), then workspace_flow_create with the same values. Maximum 36 shots and 300 seconds (5 minutes, CLI 0.4.36+ with a compatible server), with at most 9 character/location/prop sheets. Keep the requested runtime and existing default timing; the larger ceiling is not a reason to lengthen shots. Manually selected existing examples retain their 180-second limit. A specified total must equal the shot_durations sum. Custom plans compare supported models even without a numeric budget and return cheapest on success as well as failure. Show model names and estimates. For a lower-cost request without an explicit numeric budget, replan with budget=cheapest.credits while preserving spec, seconds, ratio, style, sound, required references and native audio. A stated numeric budget takes precedence. If the user names a model, resolve its catalog id into spec.video_model (for example wan_30). Preserve it in plan/create; unsupported timing, references, audio or budget must fail instead of choosing a different model. Stop if the server ignores the requested model. Animation and effects options request animation and scene sound; inspect the actual results. For an existing unrendered flow, workspace_set_ratio creates a copy and preserves the original; do not claim generated media was changed. Check estimates and confirmation before generation.

Workspace ComfyUI requires the current client/server schemas; image/video support began in CLI 0.4.39 and audio support in CLI 0.4.41; both require a compatible current server.
Use the same server planning/execution path as the workspace canvas. Discover only dashboard/personal entries with comfy_wiki_find/read or comfy_personal_list. For an image/video/audio node set draft.model="comfyui", draft.params.workflow to the complete current workflow ID and source="dashboard" or "personal". Read workspace_comfy_inputs. Persist changes with production_update(edit), using the current board revision, reason and the complete draft/params; this preserves prior results. Scalar overrides go in params.inputs={graphNodeId:{inputName:value}}. Reference bindings are an ORDERED params.bindings array of {node_id,input,source_node_id}; source nodes must be connected and have actual media. Multiple H3 references can target the same media_state slot, preserving array order. Do not put URLs, worker file paths, media JSON, or graphs in scalar inputs.
Call workspace_comfy_plan(board_id,node_id), then workspace_comfy_plan_status(plan_id) until state=done. This is preparation only: inspect editable_inputs (paginate next_input_offset), guide_notes, bindings, blockers and quote. The initial incomplete plan may discover inputs but is not runnable. Set actual typed values and all required reference bindings, then prepare a NEW plan. Never substitute published sample media or silently omit connected references. Plans are owned, expire and are tied to the saved workflow revision. No local browser is needed for this server path.
Show the separate Comfy quote and follow existing user authorization. max_credits is an explicitly authorized positive cap: normally at least quote.estimated_credits, but a first_run may require the broker's full-balance temporary reservation. Read first_run and any credit_cap.minimum; never silently expand a budget. quote.maximum_credits is not a value to copy automatically. General/unlimited Labs credits do not remove Comfy permission or balance checks. Save a new lowercase UUID request_id BEFORE workspace_comfy_run(plan_id,request_id,max_credits). In CLI 0.4.43+ with a compatible server, call workspace_comfy_capacity before an additional submission: max_concurrent_runs defaults to 1 and an administrator may set up to 5; active_request_ids includes this account's other boards and unconfirmed runs. A failed or malformed capacity read is not an empty queue. Only independent nodes with known queued/running Comfy attempts, unchanged approved references and sufficient remaining budget may overlap. Unknown/reserved attempts, dependent nodes and general-generation attempts still block new production work. Submit each new node with its own recorded UUID and retain every receipt; available capacity is not a reservation or a guarantee of five free workers. Older clients/servers keep sequential execution. While pending or if submission is uncertain, use ONLY workspace_comfy_job with that original request_id. Never create another UUID to recover a timeout. Repeated same-ID polling is safe across CLI restarts. attach_result=false is read-only. By default completed results enter the library and attach to the unchanged source node; changed inputs or concurrent edits leave the result in the library rather than overwriting work. Completion is not visual/audio quality approval.
workspace_run/production_run use the general generation path and do not include Comfy quotes. At a Comfy node use the dedicated tools above, then resume the general workflow. On boards with a production contract, the older manual comfy_workflow_plan/run + workspace_comfy_result attachment is blocked: use workspace_comfy_plan/run/job so current reference reviews, source bindings and separate Comfy attempts/settlement are preserved. Unknown actual Comfy charges remain pending; do not report them as zero. The legacy attachment is only for plain boards without production records, not a workaround for a rejected production run.
For music or effects choose an actual audio-output workflow and read its live guide. Use kind="audio", bind real audio references to audio input slots, and verify that the returned library result and node are audio; never present an audio file as a video result. Use production_audio_sample → production_media_job → production_audio_listen for actual sound segments. An agent without listening support records uncertain/observed:false; measurements and classifiers alone cannot approve voice, music or Foley semantics.
MiniMax H3 R2V: read the chosen workflow's live schema and guide before setting resolution/duration. Define subjects against ordered <Picture N> references and keep character/location/product roles explicit. Follow the official reference prompt guide sections subject_definitions, summary, retention_analysis, detailed_description, overall_soundscape, non_diegetic_music; describe later shots with [Shot N] and timestamps. Native multi-shot timing and identity require actual output review. Describe Foley per action; do not introduce music unless requested. Media bindings upload the actual connected files; the server constructs H3 media_state. 1.6MP uses pixel area and node rounding, not an exact aspect-ratio guarantee: inspect output dimensions and pad for exact delivery if needed. Current reference guide: https://huggingface.co/MiniMaxAI/MiniMax-H3/blob/main/docs/VIDEO_PROMPT_WRITING_GUIDE_ref_en.md .

R2V reference selection and precedence:
For R2V, select the references needed by the scene: reuse approved character and space sheets, then add props requiring faithful geometry, materials, branding or markings. A single approved character image is not a verified multi-view sheet; describe what actually exists and plan missing required sheets before execution. Add a rendering-example shot only when the existing references leave the intended rendering unclear, not as a mandatory extra image. Label each source in node names and the prompt, stating its role, protected traits and precedence: character sources govern identity; space sources govern layout; prop sources govern that object's details. A product photo must not impose photorealism on the entire film. An optional look sample controls only the named subjects' lighting, shading, colour or material treatment and cannot override approved identity, layout or prop details. These are semantic labels, not new connection-role values: keep API media links as `ref` and use the existing production contract's `reference_roles` where applicable. Compare real results to approved sources; more references do not guarantee better consistency.
For H3, assign <Picture N> by the actual image order in bindings; videos and audio have their own numbering. Define each character, place, prop or look as a <Subject N> citing its source picture and role; give a picture its own definition only when the image itself is a composition/frame anchor. Keep the definitions and retention_analysis consistent after reordering. Reuse approved sheets and include only needed props and optional look samples; do not convert R2V references into start/end inputs without an explicit change of plan. Current H3-Base-Ref2VA limits are 9 images, 3 video clips and 3 audio clips, at most 12 files total. Each video/audio clip must be 2–15 seconds and each kind's combined duration at most 15 seconds. These are ceilings, not targets; also check the selected workflow's actual schema. Current workspace H3 video bindings are visual-only, so connect audio separately when needed. Never silently truncate required references or substitute dashboard samples. Official limits: https://huggingface.co/MiniMaxAI/MiniMax-H3#model-variants-and-input-specifications .

## Library originals and artifact registration (CLI 0.4.42+)

- Query `list_generations(include_uploads=true)` and use `library_get(generation_id, output_index)` to resolve the user's approved original. Record the Library ID, actual file SHA, role and reference order. If the original belongs to another account or cannot be found, say so; never generate a substitute character. The owner check also applies to administrators.
- `upload_file` and `aimz upload` now register imported files in the Library by default. Use `to_library=false` or `aimz upload --temporary` only for an explicitly temporary input. `aimz library --id ID` resolves one owned item; `--no-uploads` excludes imported originals.
- `image_edit_run` accepts `source_generation_id`, `source_output_index` and a saved `request_id`. Keep original images intact. `scene_capture`, `scene_storyboard` and `editor_export` register their outputs by default; `scene_export_to_library` is available in local CLI and hosted MCP. `scene_view` and `editor_frame` are diagnostic previews and do not register by default.
- A stored URL alone is not Library success: confirm `library_state=registered` and a positive `generation_id`. `pending` means output exists but registration is unfinished: use `library_registration_status` then `library_registration_recover` with the returned `registration_id`. These do not repeat generation, editing or rendering. `unknown` is unresolved and must not be treated as success or resubmitted under a new ID.
- Local `scene_capture`, `scene_export_to_library` and `editor_export` preserve saved files and return `library[].recovery_arguments`; call `library_upload` with those exact arguments to retry registration only. Each file is limited to 50 MB. Never rerender after a registration failure. Hosted upload response loss may leave only a request ID, without a recoverable artifact receipt; report that limitation and do not rerender automatically.
- `not_produced` means the server proved a local edit failed before upload. It is not a saved result; inspect the failure and start a new request only when explicitly retrying that failed edit. A storage error without a returned URL can still be `unknown`, because the upload response may have been lost. A deleted Library item is never recreated by replaying an old receipt: HTTP 410 requires an explicit new import if the user still wants it.
- `scene_storyboard` and `scene_export_glb` register by default, but do not yet persist local recovery files on an upload response loss. Report that limitation and inspect existing Library results before deciding on a new export.
- New Comfy runs preserve MCP/workflow execution metadata. Server-planned runs also retain owner-checked reference URLs, actual uploaded SHA/size and matching Library IDs in `params.comfy.provenance` when available. Missing source records and unverified references are explicit; older runs are not retrospectively certified.
- Video editor tools require one persistent `aimz mcp` process. Separate `aimz call` invocations do not share an open editor. Save the project with `editor_save` and reopen that file after reconnecting. The isolated editor session does not alter a user's open editor tab.

<!-- BEGIN GENERATED MCP TOOL INDEX -->
MCP tool index (generated from tool descriptions; check live schemas and permissions):
- `active_jobs` [local + hosted]: 진행 중(queued·running)인 내 생성 작업.
- `admin_companies` [local + hosted]: 관리자 전용 회사 목록과 회사 ID. 리포트 대상 회사를 찾을 때 쓴다.
- `admin_credit_report` [local + hosted]: 관리자 전용 회사별 월간 크레딧·직원·API 추정 원가. YYYY-MM, 최대 12개월.
- `admin_machgen_reconcile` [local + hosted]: 관리자 전용 공급사 거래와 작업을 대조. 연결된 MachGen 작업만 포함하며 현금 결제액이 아니다.
- `admin_status` [local + hosted]: (관리자) ComfyUI 워커·브로커 상태 — 워커별 연결·큐·진행 작업·최근 실패.
- `agent_archive_get` [local + hosted]: 내 홈 에이전트 보관 대화의 메시지와 작업 제안 상태를 조회한다.
- `agent_archive_list` [local + hosted]: 내 홈 에이전트 대화 보관함 목록. 대화 내용은 agent_archive_get 으로 읽는다.
- `agent_policy` [local + hosted]: 현재 확인 정책. 바꾸기는 사용자가 터미널에서: aimz agent mode ask|once|yolo / aimz agent limit N|off.
- `api_endpoints` [local only]: 서버 API 엔드포인트 검색(백엔드 소스에서 추출한 목록). guard 가 admin 이면 관리자 전용.
- `api_request` [local only]: AIMZ LABS 서버 API 를 직접 호출한다(전용 도구가 없는 기능용). path 는 /api/ 로 시작.
- `asset_import` [local + hosted]: asset_search 의 에셋을 씬에서 쓸 주소로 바꾼다(크레딧 없음).
- `asset_search` [local + hosted]: 3D 블록아웃에 쓸 에셋 찾기 — Poly Haven(CC0, 무료) 모델·360° 하늘(HDRI)과 내 라이브러리의 3D 파일.
- `comfy_cancel` [local + hosted]: 내 ComfyUI 작업 한 건을 취소한다. 다른 사용자의 작업은 취소할 수 없다.
- `comfy_download_result` [local only]: 내 작업 결과 파일을 로컬 경로에 저장한다. 기존 파일은 덮어쓰지 않는다.
- `comfy_job` [local + hosted]: 내 ComfyUI 작업의 상태·결과·컴피 크레딧 정산을 확인한다.
- `comfy_node_info` [local + hosted]: ComfyUI 노드 클래스 하나의 실제 입력·출력 규격을 조회한다.
- `comfy_personal_get` [local + hosted]: 내 저장 워크플로우의 원본을 가져온다. summary_only=true면 내용 대신 노드 개수와 이름만 본다. 원본에 개인 프롬프트·인증값이 있을 수 있다.
- `comfy_personal_list` [local + hosted]: 로그인한 사용자가 ComfyUI에 저장한 개인 워크플로우의 이름·ID·수정 시각을 찾는다.
- `comfy_status` [local + hosted]: ComfyUI 실행 권한, 별도 컴피 크레딧과 내 대기열을 확인한다.
- `comfy_upload_input` [local only]: 로컬 입력 파일을 내 컴피 저장소에 올리고 그래프에서 사용할 파일명을 받는다(최대 50MB).
- `comfy_upload_url` [hosted optional]: HTTPS 이미지·영상·오디오 URL을 내 ComfyUI 입력 저장소에 올리고 입력 파일명을 반환한다.
- `comfy_wiki_find` [local + hosted]: 현재 ComfyUI 매뉴얼을 번호·ID·이름·용도로 찾는다. source=personal은 본인 저장본의 매뉴얼이며 현재 서버 계획 근거가 없으면 입력 확정은 unknown이다. 외부 워크플로우는 가져오지 않는다.
- `comfy_wiki_read` [local + hosted]: 매뉴얼을 최대6000 UTF16 단위로 읽는다. manual.next_offset 다음 페이지에는 manual_sha256과 source.content_sha256을 expected_*로 그대로 전달한다. stale/missing·legacy_notes는 완전한 최신 사용법으로 간주하지 않는다. 개인 매뉴얼의 inputs_state=unknown은 현재 계획 입력 미확정이다. 문서는 권한·실행·품질 승인 근거가 아니다.
- `comfy_workflow_inputs` [local + hosted]: 준비된 계획의 변경 가능한 입력을 페이지별로 확인한다. 항목마다 default(원래 값), value(이 계획이 바꿔 보낼 값), 목록형의 실제 choices와 choices_total, 숫자의 min·max·step이 있다.
- `comfy_workflow_plan` [local + hosted]: 대시보드 번호·ID 또는 source=personal인 내 개인 워크플로우 ID로 실행과 견적을 준비한다(차감 없음). 외부 그래프는 받지 않는다.
- `comfy_workflow_run` [local + hosted]: 대시보드 또는 내 개인 워크플로우에서 준비한 계획을 실행한다. 불확실하면 같은 ID로 comfy_job을 확인한다.
- `download_outputs` [local only]: 결과 URL 들을 이 PC 폴더에 저장한다(같은 이름이 있으면 덮어쓰지 않고 번호를 붙인다).
- `editor_batch` [local only]: 편집 명령 여러 개를 순서대로 실행한다. steps: [{"id": 명령, "params": {…}}] (최대 2000개).
- `editor_close` [local only]: 편집기 세션을 닫는다(브라우저 종료). 저장하지 않은 편집이 있으면 닫지 않고 알려 준다 —
- `editor_commands` [local only]: 편집 명령 찾기 — 편집기의 모든 기능은 명령이다(화면의 메뉴·단축키와 같은 것, 700여 개).
- `editor_export` [local only]: 열린 시퀀스를 내보내 이 PC 에 저장한다(saved). format: h264(mp4, 기본)·hevc·prores·dnxhr·gif·wav·mp3·aac·flac…
- `editor_frame` [local only]: 열린 시퀀스의 한 프레임을 그림으로 저장한다 — 편집 결과를 눈으로 확인할 때. seconds: 그 시각(비우면 재생 헤드),
- `editor_import` [local only]: 미디어를 프로젝트에 넣는다 — items(프로젝트 item id)·paths(편집기 안 경로)·errors.
- `editor_inspect` [local only]: 편집기의 지금 상태. what: project(프로젝트 항목 트리 — 미디어·시퀀스의 item id) · sequence(열린 시퀀스의 트랙·클립·
- `editor_open` [local only]: 영상 편집기 세션을 연다(이미 열려 있으면 그대로 쓴다) — 이 PC 에서 머리 없는 브라우저로 AIMZ LABS 영상 편집기를 띄운다.
- `editor_run` [local only]: 편집 명령 하나를 실행한다(되돌리기 한 단계). command: editor_commands 로 찾은 id, params: 그 명령의 인자.
- `editor_save` [local only]: 프로젝트를 이 PC 의 파일(.fcproj)로 저장한다. 옆에 '<파일>.media.json'(편집기 안 경로 → 원본 파일·주소)도 쓴다 —
- `estimate_credits` [local + hosted]: 모델 표준 견적과 현재 계정의 예상 차감 상한을 구분한다. 완료 후 서버 정산 결과를 확인한다.
- `find_voice` [local + hosted]: ElevenLabs 목소리 링크(elevenlabs.io/app/voice-library?voiceId=… 등)나 20자 ID → 그 목소리.
- `generate` [local + hosted]: 이미지·영상·오디오·텍스트·3D 모델을 생성한다(사용자 크레딧 사용).
- `generate_batch` [local + hosted]: 여러 생성을 한 번에 접수한다(승인 1번, 최대 20개). items = [{"model_id": "...", "params": {...}}, ...].
- `get_workflow` [local + hosted]: 워크플로우 하나(그래프 포함).
- `image_edit_commands` [local + hosted]: 이미지 편집 명령 찾기 — 이미지 편집기(포토샵 같은 편집기 · PhotoCraft 기반)와 같은 엔진의 명령 760여 개 가운데
- `image_edit_run` [local + hosted]: 라이브러리 그림 하나에 이미지 편집 명령을 차례로 걸고, 결과를 라이브러리에 **새 이미지**로 남긴다(원본은 그대로 · 0 크레딧).
- `job_status` [local + hosted]: 생성 작업 상태(queued|running|done|failed|canceled)와 결과 URL. wait=true 면 끝날 때까지 기다린다.
- `library_get` [local + hosted]: 내 라이브러리 항목 번호와 출력 순번(0부터)으로 실제 원본 URL·모델·출처를 확인한다.
- `library_registration_recover` [local + hosted]: 기존 출력의 라이브러리 등록만 복구한다. 렌더·편집·생성을 반복하지 않고 크레딧을 쓰지 않는다.
- `library_registration_status` [local + hosted]: 파일은 만들어졌지만 라이브러리 등록이 미확정인 내 영수증을 조회한다. 재생성·재업로드하지 않는다.
- `library_upload` [local only]: 이미 있는 로컬 작업물을 내 라이브러리에 등록한다(50MB까지). 생성·렌더를 다시 하지 않는다.
- `list_generations` [local + hosted]: 내 라이브러리. 업로드한 참고 이미지도 기본 포함한다(include_uploads=false로 제외).
- `list_models` [local + hosted]: 생성 모델 목록. modality: image|video|audio|text|model3d(글·그림 → 3D 모델) (비우면 전체). query: 이름·id·브랜드 검색어.
- `list_projects` [local + hosted]: 내 스튜디오 프로젝트(이름·세션 수·최근 사용) — 이미지·영상·오디오·채팅 탭 왼쪽 목록의 프로젝트다.
- `list_scenes` [local + hosted]: 내 3D 씬 목록(최근 수정순) — id·이름·수정 시각·브라우저로 여는 link. query: 이름 검색어.
- `list_voices` [local + hosted]: ElevenLabs 목소리 — 읽기(el_tts)·대화(el_dialogue) params 의 voice·voice2·voice3 에 id 를 넣는다.
- `list_workflows` [local + hosted]: Labs 워크플로우(빌트인 + 내 것) 목록. query: 이름 검색어.
- `model_info` [local + hosted]: 모델 하나의 입력 키(params) 규격 — 타입·선택지·최소/최대·기본값.
- `production_attach_finish` [local + hosted]: 완료한 미디어 후처리를 같은 원본의 영상 노드에 넣는다(0크레딧). 원본·이력 보존, 후속 완성본 갱신 필요, 새 결과는 다시 검수한다.
- `production_audio_listen` [local + hosted]: 추출한 음향 구간을 실제 오디오로 반환한다. 재생/청취를 지원하지 않는 에이전트는 들었다고 표시하지 않고 uncertain으로 기록한다.
- `production_audio_sample` [local + hosted]: 내 영상·음원의 지정 구간을 최대10초 WAV로 추출한다(0크레딧). production_media_job 완료 후 production_audio_listen으로 실제 소리를 받는다.
- `production_commands` [local + hosted]: 영상 제작 판단·검수·수정·실행 안내. section='index'로 항목과 용도를 읽고 contract_example/review_example/edit_example/workflow/honesty 등 필요한 항목만 조회한다. 기본 all은 기존 전체 안내다.
- `production_compare` [local + hosted]: 비교용 노드 2~6개의 실제 모델·입력 방식·견적·현재 검수 근거를 대조한다. 생성하지 않으며 가격으로 품질 우승을 정하지 않는다.
- `production_control` [local + hosted]: 단계별 제작 허용 범위와 실제 진행 기록. status는 조회, pause는 다음 실행 정지다(이미 접수한 작업 취소 아님).
- `production_delivery` [local + hosted]: 완성 영상 URL과 검수 누락·진행 중 작업·누적 비용을 확인한다. 현재 원본과 일치하는 근거가 모두 있을 때만 ready=true. 공개 설정은 바꾸지 않는다.
- `production_inspect` [local + hosted]: 제작 기준·검수·원본 지문을 읽는다. nodes는 요약, node_details+node_id는 현재 src/from/roles/draft 등 허용 필드만 6000자 이내로 읽는다.
- `production_media_finish` [local + hosted]: 내 영상을 정확한 출력 비율로 패딩하고 선택적으로 마지막 얼굴 모양 암전을 적용한다(0크레딧). 원본 보존·오디오 복사.
- `production_media_inspect` [local + hosted]: 내 이미지·영상·음원의 실제 길이·코덱·해시·음량과 해당되는 프레임·해상도를 검사한다(0크레딧). 작업 ID를 production_media_job으로 조회한다.
- `production_media_job` [local + hosted]: 내 미디어 검사·후처리의 상태와 근거를 GET으로 조회한다. job_id 또는 request_id 중 하나를 쓴다.
- `production_media_view` [local + hosted]: production_media_inspect가 추출한 실제 프레임을 그림으로 돌려준다. 이 그림과 고정한 캐릭터·공간 원본을 비교해 검수한다.
- `production_plan` [local + hosted]: 한 제작 단계의 실제 요청·표준 견적·누적 예약·검수 조건·plan_hash. 미검수 참고·오래된 결정·예산 초과는 can_run=false.
- `production_preview` [local + hosted]: 완료된 컷의 시각·기술 검수는 통과했지만 음향이 미확인일 때 검토용 합본을 만든다(0크레딧).
- `production_run` [local + hosted]: 검수 조건을 만족한 한 노드를 실행·확인·저장한다. 예약을 먼저 저장하며 무제한 계정 차감0과 표준 비용을 구분한다.
- `production_step` [local + hosted]: 허용 범위 안에서 실제 MCP 도구 하나를 실행한다. 먼저 tools/list의 도구·입력 규격과 production_control(status)를 읽는다.
- `production_update` [local + hosted]: 제작 기준(contract)·결정(decision)·실제 검수(review)·부분 수정(edit)을 저장한다. 입력 규격은 production_commands.
- `project_add` [local + hosted]: 스튜디오 프로젝트를 찾거나 만들고, 이미 만든 결과를 그 안에 담는다(크레딧 없음).
- `queue_status` [local + hosted]: 서버 생성 대기열 — 실행 칸 사용·대기 수·공급사 칸이 꽉 찬 모델·새 작업 예상 시작(초)·내 작업 순번.
- `recent_failures` [local + hosted]: 최근 실패한 내 생성과 실패 이유.
- `reference_analyze` [local + hosted]: 레퍼런스 영상을 분석한다(사용자 크레딧 — 영상 길이만큼, 쓴 만큼만).
- `reference_estimate` [local + hosted]: 레퍼런스 영상 분석의 값과 그 영상이 무엇인지(제목·길이)를 본다 — 받거나 분석하지 않는다.
- `scene_apply` [local + hosted]: 내 3D 씬(scene_id)에 작업(ops)을 적용해 저장한다 — 작업별 결과(results)·저장 여부(saved)·씬 요약·link.
- `scene_capture` [local only]: 저장된 씬을 실제 3D 화면으로 렌더해 로컬 폴더와 내 라이브러리에 저장한다(파일당 50MB).
- `scene_catalog` [local + hosted]: 3D 씬 작업 설명서 — 좌표 약속(conventions), 작업(op) 목록과 인자(ops_doc), 고를 수 있는 값
- `scene_create` [local + hosted]: 새 3D 씬을 만들고 작업(ops)을 적용해 저장한다 — id·브라우저로 여는 link·작업별 결과(results)·씬 요약(summary).
- `scene_duplicate` [local + hosted]: 3D 씬을 통째로 복사해 새 씬으로 저장한다(체크포인트) — 크게 고치기 전에 지금 모습을 남겨 두고, 마음에 안 들면
- `scene_export_glb` [local + hosted]: 3D 씬 전체를 GLB 파일 하나로 내 라이브러리에 저장한다 — Blender·Unreal·Unity·Maya 에서 이어 작업하는 길.
- `scene_export_to_library` [local + hosted]: 내 저장된 3D 씬을 이미지 또는 영상으로 렌더해 내 라이브러리에 저장한다(로컬 CLI·호스팅 공통).
- `scene_get` [local + hosted]: 3D 씬 하나의 지금 모습 — 오브젝트마다 이름·종류·자리(at, m)·방향(facing, 도)·키프레임·동작,
- `scene_inspect` [local + hosted]: 3D 씬 카메라 점검 — 카메라마다 누가 화면 어디(x·y 0~1, 왼쪽 위가 0)에 얼마나 크게(w·h, 화면 대비) 보이는지,
- `scene_storyboard` [local + hosted]: 3D 씬의 스토리보드 한 장(그림) — cameras: 모든 카메라를 그 순간(at_seconds)으로 한 장에 ·
- `scene_view` [local + hosted]: 3D 씬을 실제 3D 화면으로 찍어 **그림으로 돌려준다** — 고친 뒤 눈으로 확인하고 다음 작업을 고른다(크레딧 없음, 저장 없음).
- `upload_file` [local only]: 이 PC 파일(이미지·영상·오디오·문서, 50MB까지)을 라이브러리에 등록하고 URL·generation_id를 받는다.
- `video_download` [local + hosted]: 영상 한 편의 주소를 서버가 받아 내 라이브러리에 저장한다(사용자 크레딧 — 한 편에 정액, 다 받아 저장한 뒤에만 든다).
- `video_job` [local + hosted]: 영상 받기(video_download)·레퍼런스 분석(reference_analyze) 작업의 상태 — state(queued|running|done|failed) · step · 결과.
- `video_probe` [local + hosted]: 영상 한 편의 주소가 무엇인지(제목·올린 이·길이)와 고를 수 있는 것(choices — 화질·크기·소리만), 받는 값(credits)을 본다 — 받지 않는다.
- `wait_jobs` [local + hosted]: 여러 생성 작업을 함께 기다린다. return_when='all'(모두 끝) | 'any'(하나라도 끝나면 바로).
- `whoami` [local + hosted]: 로그인한 계정·크레딧 잔액·에이전트 확인 정책(모드)을 보여준다.
- `workflow_create` [local + hosted]: Labs 워크플로우를 새로 저장한다. graph 는 inputs·nodes 를 포함하며 서버가 참조와 순환을 검증한다.
- `workflow_estimate` [local + hosted]: 저장된 Labs 워크플로우의 서버 견적·잔액·모델 가용성. 실행하지 않는다.
- `workflow_plan` [local + hosted]: 다음 체인 단계의 입력·모델·서버 예상 비용과 plan_hash. 완료면 결과를 돌려준다.
- `workflow_run_get` [local + hosted]: 워크플로우 회차의 그래프·노드 결과·진행 상태를 조회한다. 크기가 크면 결과가 잘릴 수 있다.
- `workflow_runs` [local + hosted]: 저장된 Labs 워크플로우의 실행 회차 목록. 워크플로우를 실행하지 않는다.
- `workflow_start` [local + hosted]: 새 Labs 체인 회차를 만들고 입력을 고정한다. run_id 는 r_ 뒤에 소문자·숫자 4~38자 고유값.
- `workflow_step` [local + hosted]: workflow_plan 의 단계 한 개를 실행하고 완료 결과를 회차에 기록한다. 생성은 정책에 따라 확인한다.
- `workspace_comfy_capacity` [local + hosted]: 내 계정의 ComfyUI 동시 실행 한도와 진행·미확정 요청 ID를 조회한다(생성·예약 없음).
- `workspace_comfy_inputs` [local + hosted]: 워크스페이스의 ComfyUI 노드가 받을 입력 — 고른 워크플로우(workflow_id·source), 이어 놓은 그림·영상의 주소(이은 순서), 프롬프트 글.
- `workspace_comfy_job` [local + hosted]: 내 ComfyUI 실행·정산·라이브러리 결과를 조회하고 완료되면 원본 입력이 같은 노드에 연결한다. 원본이 바뀌면 덮어쓰지 않는다.
- `workspace_comfy_plan` [local + hosted]: 워크스페이스 ComfyUI 노드의 참조·모델별 설정으로 서버 실행 계획을 준비한다(생성·컴피 차감 없음). 입력 규격·견적은 workspace_comfy_plan_status로 확인한다.
- `workspace_comfy_plan_status` [local + hosted]: 워크스페이스 ComfyUI 계획의 실제 입력 규격·가이드·참조 연결·차단 사유와 별도 컴피 크레딧 견적. 준비 중이면 같은 plan_id로 조회한다.
- `workspace_comfy_result` [local + hosted]: 제작 계약이 없는 보드에서 끝난 단독 ComfyUI 결과를 그림·영상·오디오 노드에 연결한다(0크레딧).
- `workspace_comfy_run` [local + hosted]: 승인된 워크스페이스 ComfyUI 계획을 서버에서 실행한다. 소문자 UUID request_id를 먼저 보관한다. 접수 불확실·진행 중이면 같은 ID로 workspace_comfy_job만 조회한다.
- `workspace_copy_result` [local + hosted]: 완료 결과를 노드에 넣는다. 기본은 원본의 별도 사본에 넣는다(호출마다 새 사본). in_place=true 면 같은 워크스페이스에 넣고
- `workspace_flow_create` [local + hosted]: 새 설계 또는 사용자가 명시적으로 고른 예시로 워크스페이스를 만든다(생성·크레딧 없음). idea 는 아이디어 메모에 들어간다.
- `workspace_flow_plan` [local + hosted]: 새로 설계한 워크플로우의 길이·지원 모델·예상 크레딧과 최저가 대안을 비교한다 — 만들지 않는다(크레딧 없음).
- `workspace_flows` [local + hosted]: 예시 워크플로우 목록 — 아이디어 한 줄에서 완성본까지 한 보드에 깔리는 흐름(캐릭터 시트·공간 시트를 만들어 씬마다 참고로 싣는다).
- `workspace_generate` [local + hosted]: 계획한 노드를 생성한다. 대기 중이면 같은 request_id 로 재호출한다. 완료 후 workspace_copy_result 로 저장한다.
- `workspace_get` [local + hosted]: 워크스페이스 문서와 노드·연결을 조회한다.
- `workspace_list` [local + hosted]: 내 워크스페이스(보드) 목록.
- `workspace_mask_edit` [local + hosted]: 그림 노드에서 한 영역만 바꾸는 '영역 편집' 노드를 그 옆에 만든다(생성·크레딧 없음). 화면의 마스크 칠하기와 같은 기능이다.
- `workspace_monitor` [local + hosted]: 소유 제작 현황 URL과 참고·프롬프트·결과 표를 읽는다. board_id, job_ids1~20개 또는 comfy_request_id와 kind 중 하나를 쓴다.
- `workspace_plan` [local + hosted]: 연결·초안·모델을 반영한 노드 생성 요청, 예상 비용과 plan_hash 를 보여준다.
- `workspace_reference` [local + hosted]: 레퍼런스 영상의 분석(reference_analyze 의 결과)으로 워크스페이스를 만들거나 고친다(생성·크레딧 없음).
- `workspace_run` [local + hosted]: workspace_run_plan 의 노드들을 의존 순서대로 만들고(3개씩 같이) 결과를 **같은 워크스페이스에** 넣는다 — 기획부터 완성본까지.
- `workspace_run_plan` [local + hosted]: 아직 결과가 없는 노드를 만들 순서와 예상 크레딧, plan_hash. until_node_id 를 주면 그 노드에 필요한 것까지만.
- `workspace_set_ratio` [local + hosted]: 기존 워크플로우를 새 사본으로 보존하며 미생성 컷의 비율을 바꾼다(생성·크레딧 없음).
<!-- END GENERATED MCP TOOL INDEX -->

[CLI 0.4.43 영상 편집기의 라이브러리 원본]
- 같은 aimz mcp 세션의 editor_import(library_sources=[{generation_id,output_index:0}])로 본인 원본을 가져옵니다. URL만 넣으면 본인 라이브러리 항목과 정확히 일치해야 하며 임의 외부 URL은 거부됩니다. 원본 소유권은 저장 프로젝트 재열기와 내보내기 때도 다시 확인합니다. source_refs는 가져온 세션 입력 목록이며 최종 타임라인에 실제 사용됐다는 증명은 아닙니다. 실제 시퀀스를 검사하세요. 로컬 파일은 항목 ID로 다시 가져오지 않으면 라이브러리 관계가 없습니다.
- editor_export는 원본 목록을 등록 및 복구 인자에 유지합니다. library_upload의 source_refs도 본인 항목만 허용하며 출처 관계를 지어내지 않습니다. 긴 영상은 editor_commands(query="export")에서 실제 설정을 확인해 bitrateKbps를 정하고 50MB 파일 한도를 검사하세요. 196초×1400kbps는 오디오·컨테이너 제외 약34.3MB라는 계산일 뿐 화질·실제 크기 검증이 아닙니다. 원본 컷을 보존하고 결과의 크기·길이·화면·소리를 확인합니다.

[CLI 0.4.44 단계별 Comfy 계획 준비]
- 단계별 병행 제작은 CLI 0.4.44 이상을 사용합니다. 0.4.43은 첫 컷 진행 중 production_step(workspace_comfy_plan)으로 다음 독립 컷을 준비할 때 차단될 수 있습니다. 0.4.44는 실제 여유 슬롯과 현재 승인 참고·독립성을 검사해 준비를 허용하며 계획 상태 조회와 실제 실행 때 다시 검증합니다. 계획 준비는 슬롯·크레딧 예약이 아닙니다. 기존 작업은 원래 요청 ID로 복구하고 production_step 밖의 직접 실행으로 자동화 예산을 우회하지 않습니다.

[CLI 0.4.45 필요한 제작 정보와 대화 범위]
- production_commands(section="index")에서 목차를 읽고 필요한 section 하나를 조회하세요. 기본/all은 기존 전체 안내입니다. 내부 에이전트의 한정된 입력에 전체 안내를 반복해서 넣지 않습니다.
- production_inspect(section="nodes")로 대상 ID·지문을 찾고 section="node_details", node_id, fields로 필요한 원본·설정·연결만 읽습니다. fields의 허용값은 name/src/from/roles/draft.model/draft.prompt/draft.params/text/gen.model/gen.prompt/seq/input/mask/element/scene/stale입니다. 제작 장부·결과 stack·run·임의 메타데이터는 상세 응답에서 제외됩니다. 새 규격이 있는 서버에서 보드 전체 workspace_get으로 돌아가 장부를 반복 입력하지 마세요. 구버전은 실제 도구 규격을 확인해 지원되는 경로만 사용합니다.
- 상세 응답은 pretty JSON 텍스트 최대6000 UTF-16 단위입니다. encoding=json-fragment이면 fragment를 순서대로 모으고 반환된 next를 그대로 호출합니다. 같은 fingerprint와 projection_sha256를 유지하고 마지막 complete=true까지 모든 조각을 읽은 뒤 JSON으로 해석합니다. 원본·연결·선택 항목이 바뀌면 이어 읽기를 거절하며 offset0부터 새로 확인합니다. 장부 저장만으로 updated_at이 바뀌는 것은 원본 변경이 아닙니다. 반환된 src는 보드 저장값이며 라이브러리 소유권·실제 미디어 검수 증거가 아닙니다.
- 내부 채팅의 이전 대화 포함은 기본 켜짐이고 새 요청에 고정됩니다. 사용자가 끄면 과거 대화나 요약을 보내지 않으며 질문 카드 답변은 실제 클릭한 질문만 전달합니다. 화면 대화는 보존됩니다. 현재 보드의 contract·허용 범위·예산·미확정 요청을 다시 읽고 유지하며, 과거 대화 제외를 새 실행 승인이나 미확정 작업의 재접수 허용으로 해석하지 마세요. 진행 중에는 선택을 바꾸지 않습니다.

3D 블록아웃 예시

에이전트는 도형을 이름으로 관리하므로 전체 씬을 다시 만들지 않고 지붕처럼 한 부품만 고칠 수 있습니다. 먼저 scene_catalog 를 확인하고, 아래 작업을 scene_create 의 ops 에 전달합니다.

씬 만들기: ops
[
  {
    "op": "add_prop",
    "name": "건물",
    "shape": "cube",
    "at": [
      0,
      1,
      0
    ],
    "size": [
      2,
      2,
      1.6
    ]
  },
  {
    "op": "add_prop",
    "name": "지붕",
    "shape": "cone",
    "at": [
      0,
      2.5,
      0
    ],
    "size": [
      2.4,
      1,
      2
    ],
    "color": "#e55b48"
  },
  {
    "op": "add_camera",
    "name": "촬영",
    "at": [
      4,
      3,
      7
    ],
    "look_at": "건물",
    "active": true
  },
  {
    "op": "camera_move",
    "camera": "촬영",
    "move": "dollyIn",
    "target": "건물",
    "start": 0,
    "seconds": 3
  }
]

부분 수정은 scene_apply 에 {"op":"edit_prop","target":"지붕","color":"#3355aa"} 를 전달합니다. 위치와 크기는 transform 으로 바꾸고, scene_inspect 로 구도를 확인한 뒤 원격 연결에서는 scene_export_to_library의 kind="video"로 라이브러리에 저장합니다. 로컬 CLI에서는 scene_capture로 PC에 저장합니다.

휴대폰 가상 카메라의 QR 연결·실시간 조이스틱·라이브 미리보기는 3D 화면에서 사용합니다.
MCP는 저장된 씬의 카메라 위치와 방향을 scene_apply 로 바꾸고 scene_capture 로 결과를 확인할 수 있지만, 휴대폰의 WebRTC 실시간 조작을 직접 제어하지는 않습니다.

크레딧 사용 확인은 어떻게 뜨나요

원격 연결에서는 에임즈 연결 화면의 크레딧 자동 사용 동의가 선택 사항입니다. 동의하지 않았다면 클라이언트가 사용자 승인 창을 지원해야 생성할 수 있습니다. 삭제 등 위험한 변경도 승인 창이 없으면 실행하지 않습니다.

로컬 CLI 연결

기본 설정에서는 처음 크레딧을 쓸 때 한 번 확인합니다. 삭제·관리자 변경은 매번 확인합니다.

  • 확인 창을 지원하는 클라이언트 — 에이전트 화면에 모델·예상 크레딧·프롬프트가 담긴 승인 창이 뜹니다.
  • 지원하지 않는 클라이언트 — 도구가 “사용자 확인 필요”와 일회용 확인 표(confirm_token)를 돌려주고, 에이전트가 채팅으로 여러분에게 묻습니다. 승인한 경우에만 같은 요청을 다시 보냅니다.

모드 바꾸기(매번 묻기 · 처음만 · 묻지 않기)는 크레딧 사용 확인을 보세요.

연결이 안 될 때

  • 원격 연결은 MCP 주소와 각 서비스의 사용자 지정 연결 이용 조건을 확인하고, 에임즈 계정 연결을 다시 시도합니다.
  • 로컬 CLI 연결은 터미널에서 aimz whoami 가 되는지 먼저 확인합니다. 로그인이 없으면 도구가 “로그인 필요”를 돌려줍니다.
  • 로컬 CLI 연결에서 에이전트가 aimz 를 찾지 못하면 aimz mcp-config 가 알려 주는 전체 경로를 쓰세요.
  • 더 많은 경우는 문제 해결에 있습니다.