Communitygithub.com

hadimoti/joy-media-windows-mcp

Windows-MCP 도구를 사용하여 Windows에서 JOY Media (JOY Studio) Electron 데스크톱 앱을 제어합니다. 분리된 테스트 복사본을 실행하고, 프로젝트를 만들고, 미디어를 가져오고, MP4 내보내기를 클릭하고, Windows 저장 대화상자를 처리한 다음 결과를 확인합니다(ffprobe, 전체 디코딩, 컬러 패치, 앱 자체 데이터베이스의 타이밍). JOY Media 데스크톱 앱에서 내보내기를 테스트, 실행, 시간 측정 또는 검증하거나 빌드를 비교할 때 사용합니다.

joy-media-windows-mcp란 무엇인가요?

이 스킬은 Windows-MCP 도구를 사용하여 JOY Media (JOY Studio) Electron 데스크톱 앱을 자동화하는 방법을 에이전트에게 알려줍니다. 사용자의 실제 설치나 데이터에 영향을 주지 않고 격리된 테스트 복사본으로 앱을 실행하며, 프로젝트 생성, 미디어 가져오기, MP4 내보내기, Windows 저장 대화상자 처리, ffprobe를 사용한 비디오 코덱/컬러 태그 분석, 앱 자체 데이터베이스의 타이밍 데이터를 통한 내보내기 성능 평가 등의 작업을 수행합니다. 주요 기능으로는 컬러 정확도 검증(fxplace), 오디오 분석(astats), 내보내기 단계별 시간 측정 등이 포함되어 있어 내보내기 품질과 성능을 사실적으로 판단할 수 있습니다. Windows-MCP, PowerShell, ffmpeg/ffprobe를 지원하며, 사용 전 반드시 소유자의 명시적 허가를 받아야 합니다.

지원 대상~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/hadimoti/joy-media-skill/tree/HEAD/skills/joy-media-windows-mcp

즐겨 사용하는 AI에게 물어보기

이 에이전트 스킬이 미리 로드된 새 채팅을 엽니다.

문서

Windows-MCP로 JOY Media 구동하기

이 스킬은 JOY Media 1.1.0 빌드(Electron 44.3.0, Windows 11)에서 학습된 방법입니다. 에이전트에게 사용자의 실제 설치나 데이터를 건드리지 않고 데스크톱 앱을 실행하고, Windows-MCP 도구로 편집기를 조작하며, 외형이 아닌 사실로 내보내기를 평가하는 방법을 알려줍니다.

사용 도구: Snapshot, Screenshot, Click, Type, App, Wait (Windows-MCP) 및 PowerShell (실행, 파일 검사, ffmpeg/ffprobe).

0. 기본 규칙 (생략 금지)

  • 매 실행마다 먼저 소유자에게 물어보세요. 앱 실행, 가져오기 및 내보내기는 소유자가 PC 앞에 있고 해당 실행에 대한 명확한 "진행" 승인이 필요합니다. 한 번에 하나의 실행만 진행하십시오. 사용자의 실제 프로필에 대해 절대 실행하지 마십시오.
  • 설치된 앱은 절대 건드리지 마십시오 (해당 폴더, 설치 스크립트, 제거 프로그램). 대신 별도의 압축 풀린 복사본을 실행하십시오 (1절).
  • 데이터 격리: 항상 새로운 --user-data-dir을 전달하십시오. 기존 프로젝트를 재사용하려면 앱을 닫은 다음 robocopy /E로 이전 프로필을 새 폴더에 복사하고 (/MIR 없음, 제거 없음) 복사본을 실행하십시오.
  • joy:// 등록 키 (HKCU\Software\Classes\joy)는 변경되어서는 안 됩니다. 실행 전, 실행 후, 종료 후에 reg export로 새 파일에 내보내고 SHA-256을 비교하십시오. 차이가 있으면 중지하고 소유자에게 알리십시오. 소유자의 지시가 있을 때만 복원하십시오.
  • 테스트 중에는 아무것도 삭제하지 마십시오 (복사본, 프로필, 내보내기 파일은 증거입니다). Chromium이 새 테스트 프로필 내부에서 자체 임시 파일을 정리할 수 있습니다. 이는 괜찮습니다.
  • 충돌 증거에서 중지하십시오 (GPU 프로세스 종료, 애플리케이션 오류 이벤트, 드라이버 재설정): 모든 것을 그대로 두고, 다시 실행하지 말고, 소유자에게 알리십시오.
  • 앱에 비밀을 입력하거나 노트에 토큰을 넣지 마십시오.

1. 실행해도 안전한 앱 복사본 얻기

원하는 커밋을 빌드하거나 짧은 경로(260자 미만, 예: C:\jg\app-<sha>)에 압축을 푸십시오:

  1. git archive <sha>를 tar로 만들어 C:\jg\<name>에 압축을 풉니다.
  2. pnpm install --offline --frozen-lockfile (warm pnpm 저장소 필요).
  3. 기존 복사본의 node_modules\.pnpm\electron@<ver>\node_modules\electron에서 Electron dist 폴더와 path.txt를 복사합니다 (오프라인 설치는 Electron을 다운로드하지 않음). electron.exe SHA-256을 확인하십시오.
  4. pnpm build, 그 다음 pnpm --filter @joy-media/desktop package:unpacked.
  5. robocopy apps\desktop\dist\joy-media-unpacked C:\jg\app-<sha> /E.

압축 풀린 복사본은 isPackaged = false로 실행되므로 joy:// 프로토콜을 등록하지 않습니다. 그래도 키를 확인하십시오.

2. 실행 (PowerShell)

$env:NODE_ENV = 'production'
$app = 'C:\jg\app-<sha>'
Start-Process -FilePath '<path to>\electron.exe' `
  -ArgumentList @($app, '--user-data-dir=C:\jgp\<new-profile>', '--enable-logging=stderr') `
  -WorkingDirectory $app `
  -RedirectStandardOutput 'C:\jgp\run\stdout.log' -RedirectStandardError 'C:\jgp\run\stderr.log' -PassThru

--enable-logging=stderr는 렌더러 console.* 줄을 stderr 파일에 넣습니다 (임시 진단에 유용). 프로세스 명령줄에 --joy-media-gpu-encode-fallback이 포함되어 있지 않은지 확인하십시오 (이는 기본 실행이 아닌 폴백 재시작입니다). 창 제목은 JOY Studio입니다. 새 프로필에서 앱은 프로젝트 페이지를 엽니다. 복사된 프로필에서는 마지막 프로젝트를 복원합니다.

3. Windows-MCP로 창 제어하기

배율: 스크린샷은 실제 화면보다 약 2.56배 작습니다. 항상 Snapshot의 실제 좌표를 클릭하고 스크린샷 픽셀은 절대 사용하지 마십시오. 각 페이지 변경 후 작은 Screenshot (scale 0.4)을 찍으십시오.

순서: 창 작업을 한 번에 하나씩 실행하십시오. 내보내기 직후 보낸 배치는 한 번 클릭과 입력이 잘못된 프로젝트에 적용되었습니다. App switch "JOY Studio"는 때때로 "잘못된 창 핸들"로 실패합니다. 창이 이미 앞에 있으면 계속 진행하십시오.

아래 좌표는 기본 크기와 위치의 JOY 창이 있는 4920x2160 화면 기준입니다. 이것은 시작 맵일 뿐 절대적인 것은 아닙니다. Snapshot을 찍고 무언가 다르게 보이면 요소 목록을 사용하십시오.

동작위치 (실제 좌표)
파일 메뉴(910, 288)
파일 > 프로젝트 라이브러리(1077, 358)
새 프로젝트 버튼(3023, 311), 이름 필드 (1165, 727) 클릭, Type으로 이름 입력 후 press_enter
첫 번째 프로젝트 카드(1680, 873)
타임라인 "미디어 가져오기" (빈 타임라인)(2199, 1312)
파일 열기 대화상자: 이름 상자 / 열기(1587, 1208) / (2268, 1264)
MP4 내보내기(2672, 288)
클립 선택, 배율 확인클립 막대 클릭 (1762, 1349); 검사기에 배율 X/Y 표시
앱 창 닫기(3143, 288)
저장 대화상자: 이름 상자 / 저장약 (1717, 1058) / (2283, 1266)

한 케이스의 레시피: 프로젝트 라이브러리 > 새 프로젝트 > 이름 지정 > 미디어 가져오기 > 전체 파일 경로 입력 > 열기 (클립이 타임라인에 들어옴) > 미리보기 확인 > MP4 내보내기 > 대기 > 대화상자 저장 > 확인.

저장 대화상자. 내보내기는 일반 Windows 저장 대화상자(기본 폴더 다운로드, 확장자 없는 제안된 이름)로 끝납니다. 파일은 누군가 저장한 후에만 바탕화면에 도달하므로 "작업자 완료"와 "파일이 바탕화면에 있음" 사이의 지연은 단지 해당 대화상자가 기다리고 있기 때문입니다. 작업자가 완료되어야 할 때 스크린샷을 찍으십시오. 소유자가 저장하거나 (소유자의 동의 하에) 이름 상자에 전체 대상 경로 ...\Desktop\<suggested-name>.mp4를 입력하고 저장을 클릭하십시오. 앱 데이터베이스의 작업 타이밍은 대기 시간의 영향을 받지 않습니다.

4. 실행 전, 중, 후

실행 전: reg export로 joy:// 키를 내보내고 해시합니다. 사용자의 실제 프로필 폴더와 증거 폴더(scripts/list-tree.ps1)를 나열하여 변경 사항이 없음을 입증할 수 있도록 합니다.

실행 중 (긴 내보내기): scripts/sampler.ps1 -Pattern '*<profile>*' -Out <csv> -Stop <stopfile>을 백그라운드에서 시작합니다. 이 스크립트는 초당 한 번씩 Electron 프로세스별 작업 세트, 프라이빗 바이트, CPU 초, NVENC 세션 및 GPU 사용량을 기록합니다. 중지 파일을 생성하여 종료합니다.

실행 후: 앱을 닫고 (창 닫기 버튼), electron 프로세스가 남아 있지 않은지 확인하고, 키를 다시 내보내고, 폴더를 다시 나열하고 비교하고, 프로필에 *.upload 잔여 파일이 없는지 확인하고, 응용 프로그램 오류/WER 및 Display/nvlddmkm 이벤트를 확인하십시오 (Docker와 같은 관련 없는 노이즈는 무시).

5. 사실로 내보내기 평가하기

  • ffprobe -show_streams: 코덱, 크기, 프레임, 지속 시간, 컬러 태그 (color_space, color_primaries, color_transfer, color_range).
  • 전체 디코딩이 깨끗해야 함: ffmpeg -v error -i out.mp4 -f null - 및 종료 코드 0.
  • 파일 해시 (Get-FileHash); 다른 빌드의 동일한 레이아웃은 코드 경로가 동일할 때 동일한 해시를 제공해야 합니다.
  • 앱 자체 데이터베이스의 단계 시간 (joy-media.sqlite3의 복사본과 -wal/-shm 파일을 읽기 전용으로 열기): scripts/export-times.py <copy>는 내보내기별로 브라우저 단계(클릭 스탬프에서 staged 원본까지), staged 바이트 및 작업자 시간을 출력합니다. 클릭 스탬프는 파일 이름의 13자리 숫자입니다.
  • 컬러 정확도: scripts/fxgen.py <folder>로 픽스처를 빌드하고 (알려진 sRGB 값의 평면 컬러 패치와 바이너리 프레임 카운터 포함; BT.709, BT.601, 태그 없는 SD, 풀 레인지, 회전, VFR, 10비트, HEVC, VP9, AV1, 인터레이스, 전환 쌍 및 오디오 속도 쌍), scripts/fxcheck.py <folder>로 확인한 다음 JOY_FX_DIR=<folder> python -I scripts/fxplace.py <export.mp4> <fixture-file-name> [frame]으로 내보내기를 채점합니다. 이 스크립트는 클립이 어디에 배치되었는지 찾고 (캔버스보다 작은 클립은 배율 없이 왼쪽 상단에 1:1로 배치됨) 4가지 매트릭스/레인지 판독값에서 최악/평균 편차를 출력합니다. 올바른 판독값은 약 3 레벨 이내여야 합니다.
  • 오디오: astats 제로 크로싱 속도를 통한 피치, RMS를 통한 레벨; 모노 소스는 스테레오가 됩니다 (채널당 약 3dB 낮아짐).

6. 기억할 가치가 있는 알려진 동작 (JOY Media 1.1.0 빌드)

  • 모든 컬러 테스트는 새 앱 세션에서 실행하십시오. 테스트된 시스템(RTX 5070 Ti, Electron 44.3.0)에서 첫 번째 내보내기는 BT.709(태그 bt709)로 인코딩됩니다. 동일 세션의 이후 내보내기는 BT.601(태그 smpte170m)로 인코딩되며, 크기가 더 커지고 긴 레이아웃에서 더 느리며 바이트가 다릅니다. 진단 빌드는 처음에는 캡처 캔버스 프레임이 RGBA(GPU 지원)이고 그 다음에는 BGRA(CPU 지원)임을 보여주었습니다. 앱은 자체적으로 색 공간을 설정하지 않습니다. 앱 내부에서 NV12 BT.709로 변환하면 모든 내보내기가 동일해졌습니다.
  • 태그 없는 SD 비디오는 BT.709로 읽힙니다 (색상이 최대 약 20 레벨까지 이동).
  • 오디오 트랙이 없는 소스는 무음 스테레오 AAC 트랙을 내보냅니다.
  • 동등한 조건에서만 빌드를 비교하십시오: 동일한 레이아웃, 세션 내 동일한 위치 (첫 번째 내보내기 vs 첫 번째 내보내기), 창이 앞에 있고 포커스가 있어야 함 (포커스가 없는 창은 약 30% 느릴 수 있음), 동일한 프로필의 복사본.
  • 동일한 데스크톱의 다른 에이전트 또는 채팅 창이 포커스를 빼앗을 수 있습니다. 클릭하기 전에 스크린샷을 찍으십시오.
  • 창에 대한 첫 번째 클릭은 포커스만 줄 수 있습니다.

7. 다음과 같이 보고

무엇이 실행되었는지 (빌드, 프로필 복사본, 레이아웃), 숫자 (단계 시간, 최대 메모리, 크기, 태그), 통과한 검사 (joy:// 키 변경 없음, 폴더 차이 없음, 디코딩 깔끔), 검증되지 않은 것, 그리고 소유자에게 필요한 하나의 결정을 명시하십시오. 그것이 전부일 때 "빌드당 한 번 실행"이라고 말하십시오.

관련 스킬