NAI 무한히 뽑는 더 나은 방법

마우스 커서 안 뺏는 스크립트가 있다. 

+ 로컬에서 요청 가능한 API (이건가? 검색하면 많이 나옴)도 있다고 한다. 


우측 상단의 주황색 Generate 버튼을 우클릭하고

Generate Forever 를 클릭하면 무한히 그림이 뽑아진다.


자 이제 볼 거 다 봤으니 뒤로가기를 누르자. 

스크롤 내려봐야 여우밖에 안 나온다.








...





NAI를 질렀는데, 다 좋은데 Generate Forever 버튼이 없어서 너무 아쉬운 거야.

상용 생성 서비스니까 당연히 없겠지. 근데 귀찮잖아?


준비물

- powershell ISE (혹은 Visual Studio Code)

- 크롬 혹은 Edge 브라우저에서 북마크(즐겨찾기)를 추가하고 편집할 수 있음

- 크롬에서 NAI 탭만 잡아서 별도 창으로 분리하기



결과 화면

powershell 로 마우스 매크로를 돌려서

1. NAIgenerate 북마크릿 버튼을 누른다

2. NAIsave 북마크릿 버튼을 누른다

3. ctrl PageDown 키를 누른다(웹브라우저의 다음 탭)

4. 반복한다.




북마크릿? 

즐겨찾기에 URL 말고 javascript 코드도 저장했다가 실행할 수 있는 것

지정방법은 요 링크를 참조하자 (스크롤 조금 올리면 스크린샷 및 설명도 있음)




NAIgenerate 북마크릿

1. 평소 즐겨찾기 저장해두는 바에서 우클릭> 페이지 추가

2. URL 부분에 다음을 넣고 저장

javascript:(function() {var elements = document.getElementsByClassName('sc-9aa632a0-21 haWLmo'); if(elements.length > 0) {elements[0].click(); } else {alert('gen Element not found.'); } })();

NAI에서 요 부분을 클릭하는 js 코드

3. 즐겨찾기에서 NAIgenerate 버튼을 맨 앞으로 옮긴다.




NAIsave 북마크릿

1. 평소 즐겨찾기 저장해두는 바에서 우클릭> 페이지 추가

2. URL 부분에 다음을 넣고 저장

javascript:(function() {var divs = document.querySelectorAll('.sc-876067fe-0.sc-876067fe-49.flOuWA.hpVEuL'); if(divs.length > 0) {divs[0].click(); } else {alert('save not found'); } })();

NAI에서 요 부분을 클릭하는 js 코드

3. 즐겨찾기에서 NAIsave 버튼을 맨 앞에서 두 번째로 옮긴다.


북마크릿 2개 완성







마우스 매크로


이런저런 프로그램이 많지만, 깔면 Windows 방화벽이랑 게임에 딸려온 방화벽이 난리칠거야. 당장 지우라고.

그러니 어느 Windows 에도 기본적으로 깔려있는 프로그램을 사용하자.


PowerShell !!


파란 화면이 인상적이지만, powerShell 로 편집하면 조금 귀찮으니, 그 밑에 ISE 를 눌러줘.


앞으로 실행할 파워쉘 스크립트 파일은 2개야.

각자의 모니터 위치와 북마크바 위치가 다르니, 정확한 NAIgenerate, NAIsave 버튼의 좌표값을 얻을

getMousePos.ps1 랑 무한히 생성해 줄 naiGenerateForever.ps1



getMousePose.ps1

ISE 를 실행시키면 하얀 빈 창이 나오는데, 여기에 다음 코드를 붙여넣고 저장하고 실행시켜

Add-Type -AssemblyName System.Windows.Forms

Add-Type -AssemblyName System.Drawing


# 무한 반복

while ($true) {

    # 현재 마우스 위치 저장

    $pos = [System.Windows.Forms.Cursor]::Position


    # print $pos

    Write-Host $pos

    Start-Sleep -Milliseconds 500

}

실행시키면 빨간 글자로 뭐라뭐라 뜰 거야.

powershell 명령어는 실행 한 번으로 windows 설정 이것저것을 눈치 못 채는 사이에 싹~ 바꿔버리는 위력이 있어.

그래서 Windows 초보자가 뭘 함부로 실행하지 못 하도록 기본값으로 막아둬.


Get-ExecutionPolicy -List

powershell 에서 위 명령어로 보면 대부분 Undefined 로 막혀있는데, 

ps1를 '직접 만든 스크립트' 혹은 '무엇인지 이해를 한' 것에 한해서 실행가능하게 하려면

다음 실행

Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser


---

설정을 했으면,

마우스 포인터 움직일 때마다 파란창에 마우스 포인터 위치가 뜰 거야.

클릭하면 그 때의 위치가 저장되는 그런 고급기능은 안 넣었어.

그냥 원하는 위치에 5초 정도 가만히 냅둬. 그리고 그 기억한 값을,




naiGenertaeForever.ps1

ISE 에서 ctrl N 눌러서 새 탭 열고 다음 코드 넣은 다음에

# Load assemblies

Add-Type -TypeDefinition @"

using System;

using System.Runtime.InteropServices;


public class Win32 {

    [DllImport("user32.dll")]

    public static extern int SetCursorPos(int x, int y);


    [DllImport("user32.dll")]

    public static extern void mouse_event(int dwFlags, int dx, int dy, int cButtons, int dwExtraInfo);

}

"@ 


# Define constants

$MOUSEEVENTF_LEFTDOWN = 0x2

$MOUSEEVENTF_LEFTUP = 0x4


# Function to perform a mouse click

function Click-Position {

    param($x, $y)


    [Win32]::SetCursorPos($x, $y)

    [Win32]::mouse_event($MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0)

    [Win32]::mouse_event($MOUSEEVENTF_LEFTUP, 0, 0, 0, 0)

    

    Start-Sleep -Milliseconds 1300

}


# Infinite loop

while ($true) {

    # Click positions

    Click-Position 192 52

    Click-Position 275 52


    # Press Ctrl + PageDown

    [System.Windows.Forms.SendKeys]::SendWait("^{PGDN}")


    # Wait for 2 seconds

    Start-Sleep -Milliseconds 3300

}


다음 위치에 각각 넣어줘.

Click-Position X Y

Click-Position X Y

그리고 실행하면, ISE 창이 내려가고 

그 이전 창에서 이 프로그램이 실행돼.

그러니까 미리 해당 창을 대기 시켜놔야 해.




아 그리고!

실행 종료가 까다로워.

편리하게 키 하나 누르면 종료하게 하려고 했더니 코드가 엄청 길어지더라구.

그만하고 싶으면 요 네모 버튼을 눌러.







북마크릿을 알려주신 초콜릿주세요 님 찬양찬양





어휴

만들 땐 쉬웠는데 설명글 쓰고 나니 왜이리 어려워보이냐 ㄷㄷ


마무리는 하나도 '이해가 안 된' 여우짤