메시지
OpenCV 기반 시각 인식으로 픽셀 좌표에 의존하지 않습니다. 해상도가 바뀌어도, UI가 조금 달라져도 정확하게 작동합니다.
다른 사용자가 만든 자동화 프리셋을 다운로드하세요. 내가 만든 프리셋을 공유하고 커뮤니티에 기여하세요.
조건문, 반복문, 변수를 드래그 앤 드롭으로 구성하세요. 프로그래밍 경험 없이도 고급 자동화를 구현할 수 있습니다.
MuMu Player, LDPlayer 등 주요 에뮬레이터를 완벽 지원. DLL 캡처로 게임 감지 없이 백그라운드에서 작동합니다.
직관적인 인터페이스로 누구나 쉽게
에뮬레이터 연결 및 실시간 화면 캡처
조건/액션 기반 자동화 설정
시각적 시퀀스 편집
세부 조건 및 액션 설정
입력 녹화 및 재생
예약 실행 설정
성능과 효율성을 동시에
3단계로 시작하는 게임 자동화
ZIP 파일을 다운로드하고 압축을 풀어주세요. pqp.exe를 실행하면 끝!
MuMu Player나 LDPlayer를 실행하고 새로고침(🔄) 버튼을 눌러 장치를 선택하세요.
커뮤니티 프리셋을 다운로드하거나 직접 규칙을 만들고 ▶️ 시작!
화면에서 특정 이미지를 찾아 자동으로 클릭. 스크린샷으로 템플릿을 캡처하세요.
화면의 텍스트를 읽어 조건 분기. "HP가 50% 이하면 포션 사용" 같은 로직 구현.
여러 동작을 순서대로 실행. 스킬 콤보, 퀘스트 자동화에 활용하세요.
특정 시간에 자동 실행. 매일 오전 6시에 출석체크 등 반복 작업 자동화.
Python, Lua, JavaScript로 고급 자동화 구현
tap(x: int, y: int) → bool
화면의 특정 좌표를 탭합니다.
▼
x | int | X 좌표 |
y | int | Y 좌표 |
double_tap(x: int, y: int, interval: int = 50) → bool
화면의 특정 좌표를 더블 탭합니다.
▼
x | int | X 좌표 |
y | int | Y 좌표 |
interval | int | 탭 간격 (ms), 기본값 50 |
swipe(x1: int, y1: int, x2: int, y2: int, duration: int = 200) → bool
화면에서 스와이프합니다.
▼
x1, y1 | int | 시작 좌표 |
x2, y2 | int | 끝 좌표 |
duration | int | 이동 시간 (ms) |
long_press(x: int, y: int, duration: int = 1000) → bool
화면의 특정 좌표를 길게 누릅니다.
▼
x | int | X 좌표 |
y | int | Y 좌표 |
duration | int | 누르는 시간 (ms) |
key_press(key: str) → bool
키를 누릅니다.
▼
key | str | 키 이름 (ENTER, BACK, HOME 등) |
text_input(text: str) → bool
텍스트를 입력합니다.
▼
text | str | 입력할 텍스트 |
multi_tap(x: int, y: int, count: int, interval: int = 50) → bool
같은 좌표를 여러 번 탭합니다.
▼
x | int | X 좌표 |
y | int | Y 좌표 |
count | int | 탭 횟수 |
interval | int | 탭 간격 (ms), 기본값 50 |
drag(x1: int, y1: int, x2: int, y2: int, duration: int = 500) → bool
시작점에서 끝점으로 드래그합니다.
▼
x1 | int | 시작 X |
y1 | int | 시작 Y |
x2 | int | 끝 X |
y2 | int | 끝 Y |
duration | int | 지속 시간 (ms), 기본값 500 |
capture() → ndarray | None
현재 화면을 캡처합니다.
▼
match_template(template: str, threshold: float = 0.8, roi: tuple = None) → dict | None
화면에서 템플릿 이미지를 찾습니다.
▼
template | str | 템플릿 이미지 경로 |
threshold | float | 매칭 임계값 (0.0 ~ 1.0) |
roi | tuple | 검색 영역 (x, y, w, h) |
{"center": (x, y), "rect": (x, y, w, h), "score": float} 또는 None
wait_template(template: str, timeout: float = 10.0, threshold: float = 0.8) → dict | None
템플릿이 나타날 때까지 대기합니다.
▼
template | str | 템플릿 이미지 경로 |
timeout | float | 최대 대기 시간 (초) |
threshold | float | 매칭 임계값 |
match_and_tap(template: str, threshold: float = 0.8, offset: tuple = (0, 0)) → bool
템플릿을 찾아서 탭합니다.
▼
get_pixel_color(x: int, y: int) → tuple | None
특정 좌표의 픽셀 색상을 가져옵니다.
▼
check_pixel_color(x: int, y: int, color: tuple, tolerance: int = 20) → bool
픽셀 색상이 지정 색상과 일치하는지 확인합니다.
▼
find_all(path: str, threshold: float = 0.8, max_count: int = 10) → list
화면에서 모든 매칭 위치를 찾습니다.
▼
path | str | 템플릿 이미지 경로 |
threshold | float | 매칭 임계값 (0~1), 기본값 0.8 |
max_count | int | 최대 결과 수, 기본값 10 |
wait_vanish(path: str, timeout: float = 10.0, threshold: float = 0.8) → bool
이미지가 화면에서 사라질 때까지 대기합니다.
▼
path | str | 템플릿 이미지 경로 |
timeout | float | 대기 시간 (초), 기본값 10 |
threshold | float | 매칭 임계값, 기본값 0.8 |
compare_images(path1: str, path2: str) → float
두 이미지의 유사도를 비교합니다.
▼
path1 | str | 첫 번째 이미지 경로 |
path2 | str | 두 번째 이미지 경로 |
ocr_read(roi: tuple = None) → str
화면 영역에서 텍스트를 읽습니다.
▼
roi | tuple | 읽을 영역 (x, y, w, h), None이면 전체 화면 |
ocr_find(text: str, roi: tuple = None) → dict | None
화면에서 특정 텍스트를 찾습니다.
▼
{"text": str, "center": (x, y), "rect": (x, y, w, h)} 또는 None
ocr_tap_text(text: str, roi: tuple = None) → bool
화면에서 텍스트를 찾아서 탭합니다.
▼
ocr_read_number(roi: tuple = None) → int | None
화면 영역에서 숫자를 읽습니다.
▼
ocr_read_all(roi: list = None) → list
화면의 모든 텍스트와 위치를 반환합니다.
▼
roi | list | [x, y, w, h] 영역 (선택) |
ocr_wait_text(text: str, timeout: float = 10.0, roi: list = None) → dict | None
텍스트가 화면에 나타날 때까지 대기합니다.
▼
text | str | 찾을 텍스트 |
timeout | float | 대기 시간 (초), 기본값 10 |
roi | list | [x, y, w, h] 영역 (선택) |
get_var(name: str, default: Any = None) → Any
변수 값을 가져옵니다.
▼
set_var(name: str, value: Any) → None
변수 값을 설정합니다.
▼
list_vars() → dict
모든 변수 목록을 가져옵니다.
▼
wait(seconds: float) → None
지정된 시간만큼 대기합니다.
▼
wait_random(min_sec: float, max_sec: float) → float
랜덤 시간만큼 대기합니다.
▼
log(message: str, level: str = 'info') → None
로그 메시지를 출력합니다.
▼
info, warning, error, debug
notify(title: str, message: str) → bool
Windows 알림을 전송합니다.
▼
screenshot(filename: str = None) → str
스크린샷을 저장합니다.
▼
random_int(min: int, max: int) → int
지정 범위의 랜덤 정수를 반환합니다.
▼
min | int | 최솟값 |
max | int | 최댓값 |
random_float(min: float, max: float) → float
지정 범위의 랜덤 실수를 반환합니다.
▼
min | float | 최솟값 |
max | float | 최댓값 |
timestamp() → float
현재 에포크 시간을 초 단위로 반환합니다.
▼
crop_and_save(roi: list, filename: str = '') → str
화면 영역을 캡처하여 파일로 저장합니다.
▼
roi | list | [x, y, width, height] 영역 |
filename | str | 파일명 (선택, 미지정시 자동생성) |
get_screen_size() → tuple
화면 해상도를 가져옵니다.
▼
get_current_app() → str | None
현재 실행 중인 앱 패키지명을 가져옵니다.
▼
start_app(package: str) → bool
앱을 시작합니다.
▼
stop_app(package: str) → bool
앱을 종료합니다.
▼
restart_app(package: str) → bool
앱을 재시작합니다 (종료 후 시작).
▼
package | str | 앱 패키지 이름 |
get_device_info() → dict
연결된 디바이스 정보를 반환합니다.
▼
is_screen_on() → bool
디바이스 화면이 켜져 있는지 확인합니다.
▼
pause_macro() → None
매크로 실행을 일시 중지합니다.
▼
stop_macro() → None
매크로 실행을 완전히 중지합니다.
▼
call_sequence(name: str) → bool
다른 시퀀스를 호출합니다.
▼
get_macro_state() → str
현재 매크로 상태를 반환합니다.
▼
is_running() → bool
매크로가 실행 중인지 확인합니다.
▼
네, 무료로 사용하실 수 있습니다. 무료 버전은 하루 1시간 사용, 1개 프리셋, 5개 자동화 규칙 제한이 있습니다. 커뮤니티 프리셋은 목록 열람만 가능하며, 다운로드와 공유는 프리미엄 기능입니다.
다른 사용자가 만든 자동화 프리셋을 다운로드하거나, 내가 만든 프리셋을 공유할 수 있는 기능입니다. 검색과 필터링으로 원하는 프리셋을 쉽게 찾을 수 있으며, 다운로드 수를 확인할 수 있습니다.
MuMu Player 12, LDPlayer 9을 공식 지원합니다. MuMu Extras(DLL 캡처)를 사용하면 게임 감지 없이 백그라운드에서 작동하며, GDI 캡처로 일반 PC 프로그램도 자동화할 수 있습니다.
Discord DM으로 구매 문의 주세요. 결제 확인 후 라이선스 키를 발급해 드립니다.
무료로 다운로드하고 게임 자동화의 새로운 경험을 시작하세요
다운로드 →