(도움이 되었다면 많은 사람들이 볼 수 있도록 추천 한번만 부탁드립니다 _ _ 나름 정말로 시간 오래 걸렸음)

(처음 챈섭 열려는 사람들에게 충분히 가이드북 정도는 되지 않을까 싶음)


<23.06.10 기능제한 방법 업데이트함(Generate forever제한 방법 / 이미지 사이즈 제한 방법)>

<23.08.27 명령어를 통한 기능제한 방법(댓글참고) 및 기타 유용한 글 추가>

<23.09.17 유용한 글 추가 - Ngrok 챈섭 설정방법>


<목차>

1. Gradio로 챈섭 열기

2. Ngrok로 챈섭 열기

3. Ngrok 사용법 (ip확인하기, ip밴하는 방법)

4. (Gradio/Ngrok 공통) Webui의 기능제한 방법(batch기능이나 extensions, setting 등 7가지)



<대상자>

1. 챈섭을 한 번 열어보고 싶은 사람

2. 타 기기(휴대폰, 태블릿, 노트북 포함)으로 본인 컴퓨터의 webui를 원격으로 접속해서 사용하고 싶은 사람 

   +(크롬 원격 데스크톱을 통해 휴대폰에서 webui를 사용하는 사람)


<주의사항(제발 꼭 따라하시기 전에 필독)>

"챈섭 여는 법 A to Z가 아니라 ABC라고 한 이유는 본인은 컴공 전공자가 아니고(파이썬 모름), 전문가가 아니기 때문임"

"댓글로 질문 올려도 저는 전문가가 아니라서 질문에 대한 답변을 못 해드립니다. 따라하시기 전 꼭 백업을 하시기 바랍니다"

"해당 방법을 따라함으로서 발생하는 모든 책임 및 문제는 본인에게 있습니다(거듭 말하지만 본인은 전문가가 아닙니다)" 


<CONTENT>

Gradio는 3시간 이상 사용하려면 프리미엄 계정 열어야함(그냥 사용하려면 3시간 마다 다시 열면 되긴 함). 만약 오랜시간 열어야 하거나 불특정 다수에게 열고 싶으면(아카챈 같은) ngrok를 더 추천함 ngrok는 인증토큰 받으면 무료계정도 시간제한이 없고 무엇보다 직접 해당 이미지 뽑는 접속자의 ip를 확인할 수 있기에 적어도 테러하는 사람 ip를 확인할 수 있음


<기타 기능제한에 유용한 정보들>

1.  https://arca.live/b/aiart/80627293?target=all&keyword=%EC%B1%88%EC%84%AD&p=2 (강제 이미지 생성 중단 기능)

2. 본문 댓글에 있는 기능제한시 명령어로 대체하는 방법  (댓글 참고)

3.  https://arca.live/b/aiart/85138671?target=all&keyword=%EC%B1%88%EC%84%AD&p=1 (ngrok 챈섭 설정)


1. Gradio로 챈섭 여는 법

<설명에 사용한 기준버전 - 달라도 큰 차이는 없음>

python: 3.10.9  •  torch: 2.0.0+cu118  •  xformers: 0.0.19  •  gradio: 3.28.1  •  commit: 72cd27a1  •  checkpoint: 7a7d1c3e25 ]


1. 일반적으로 실행할 때 사용하는 "webui-user.bat" 파일에서 마우스 우클릭 => "편집" 버튼

(윈도우 11이면 우클릭 할 때 "더 많은 옵션표시" 눌러야 "편집"버튼이 생김)



2. 메모장에 보면 "set COMMANDLINE_ARGS= --xforemers ~"에 해당하는 글에 "--share --gradio-auth ID:PW"를 입력하고 저장

(사진대로 형광펜 표시한 부분이 (아이디):(패스워드임))

Ex) ID는 xyz, PW는 1q2w3r!@로 하고 싶은 경우 --gradio-auth xyz:1q2w3r!@ 라고 입력


[코드원문 - 예시]

@echo off


set PYTHON=

set GIT=

set VENV_DIR=

set COMMANDLINE_ARGS=--xformers --autolaunch --share --gradio-auth user:pw1234

call webui.bat


3. 확인을 위해 webui-user.bat 파일을 실행

(실행할 때 보면 "--share --gradio-auth ID:PW"라고 잘 실행되어야 한다)

(접속할 주소 또한 "Running on public URL: https:// (생성된 주소).gradio.live"라고 나와야 함)

본인이 설정한 ID와 PW를 입력하고 Login을 하면 정상적으로 접속이 된다 

=> 만약 안되면 제대로 입력했는지 확인(ID와 PW설정을 맞게 했는지)


<개인적이거나 일부 지인끼리 사용하는 정도면 이 정도로도 충분하다>

Gradio는 3시간 이상 사용하려면 프리미엄 계정 열어야함. 만약 오랜시간 열어야 하거나 불특정 다수에게 열고 싶으면(아카챈 같은) ngrok를 훨씬 추천함 ngrok는 인증토큰 받으면 무료계정도 시간제한이 없고 무엇보다 직접 해당 이미지 뽑는 접속자의 ip를 확인할 수 있기에 적어도 테러하는 사람 ip를 확인할 수 있음


<PC, 모바일, 태블릿 모두 접속 가능한 방법임>

2. Ngrok로 챈섭 여는 법

0. Ngrok는 Gradio설정을 할 필요가 없기에 webui-user.bat파일의 설정을 할 필요가 없음


(Gradio에서 사용한 설정과 달리 따로 명령어 입력할 필요가 없다 / 굳이 gradio 명령어 할 필요 없음 / 이중 실행이라 컴터 부담됨)


1. Ngrok사이트(https://ngrok.com/)에 접속해서 ngrok파일을 다운로드 받는다(회원가입 필요/무료임).

빠른 다운로드주소 : https://bin.equinox.io/c/bNyj1mQVY4c/ngrok-v3-stable-windows-amd64.zip



2. (압축풀고)ngrok.exe파일을 실행한다

(ngrok 실행화면)


3. (회원가입이 선행되어야 함) 왼쪽 탭의 Getting Started => Your Authtoken에서 인증토크 값 복사

=> 화면의 파란색 동그라미 표시한 텍스트 복사하면 됨

주소: https://dashboard.ngrok.com/get-started/your-authtoken


4. ngrok 프로그램에서 해당 복사한 명령서 코드 입력 후 엔터



5. webui-user.bat을 실행한다 (그냥 webui 실행 시키라는 뜻)

로컬 주소의 포트 확인한다 (끝의 숫자 4개 : 여기서는 7860) 

(주로 일반적이면 http://127.0.0.1:7860)으로 되어 있을 거임(사람마다 다를 수 있음)


6. ngrok프로그램에서 명령어로 "ngrok http 7860"을 입력하고 엔터

(예시: ngrok http 7860)

명령어를 입력하고 엔터를 누르면 위와 같이 정상적으로 연결이 된다.


7. 서버주소는 "Forwarding"에 나와있는 주소가 된다.

(생성된 주소로 접속하면 잘 접속된다)


8. Gradio와 마찬가지로 ID와 PW를 설정할 수 있다. 

ngrok http (포트번호) --basic-auth="(설정할 ID):(설정할 PW)"

예시) ngrok http 7860 --basic-auth="user:pw123456"

주의) 암호는 최소 6글자 이상이어야 함


9. 접속하면 ID와 PW를 입력하라고 나온다.




3. Ngrok 사용법 (ip확인 및 ip밴 방법)

1. http://127.0.0.1:4040 에 접속한다 (당연히 Ngrok프로그램에서 서버 열린 상태여야 함 + ngrok사이트에 로그인 되어 있어야)

(ngrok 프로그램에 보면 Web Interface라고 나와있는 그 주소 맞음 / Forwarding 말고)


2. 누군가가 서버에 접속해서 무언가를 하기 시작하면 로그와 함께 ip주소가 함께 표기된다.

(우측상단의 IP를 통해 현재 접속자 확인)

(ngrok프로그램에도 요청이 나옴)

cf) 모바일의 경우 IPv6주소로 숫자와 영어가 섞여서나옴

(예시 2001:2d8:eXXX:XXXX~ / 우리가 흔히 아는 192.XXX와 같은 주소는 IPv4임)


IP밴 하는 방법

여기서 부터는 Enterprise버전(유료)에서 가능한 기능입니다 > 대략 10만 x천원 정도 나옴


3. Security - IP Policies - New IP Policy 메뉴 접속


(접속주소: 이미지 보고 접속 요망 / 금지어 걸림)


4. Description에 IP정책 이름 입력(본인 원하는 이름) - Add Rule 선택


여기서 집중해야 함

5. 아래에 적은 설정대로 하자 (사진 잘 참고)


Action: Deny

CIDR: ban하고자하는 IP주소

- 컴퓨터로 접속하는 IPv4주소의 경우 (숫자로만 이루어진 ip주소) - (ip주소)/32

- 모바일로 접속하는 IPv6주소의 경우 (영어와 숫자섞인 ip주소) - (ip주소)/128

절대 "Use my I.P" 누르지 말 것. 잘못하면 본인이 잠겨서 ngrok에 이메일로 문의해서 풀어야 하는 불상사가 생김

Description: 밴하려는 주소 설명


맞게 설정했는지 다시 확인하고 이상 없으면 Add Rule 버튼 누르고, 하단의 Save버튼으로 저장하기


6. 시큐리티 - IP Restrictions에 Endpoints 항목에 Enforement를 Enforced로 설정하고 IP Polices의 Attach IP POLICY 선택

절대 Agent, API, Dashboard 건들지 말 것. 마찬가지로 잘못 누르면 본인 설정이 잠겨서 ngrok에 이메일 문의해야 하는 불상사가 생김

7. 등록해두었던 IP정책 선택하고 Attach IP Policy 하고 추가로 SAVE도 해야함

(여기서 SAVE 꼭 해야 함 깜빡하고 안하면 적용 안 됨)


ngrok의 ip정책은 1개만 밴을 설정해도 기본 값이 모두 ban하는 걸로 설정되어 있다.

따라서 국내에서 사용되는 ip 대역폭을 모두 추가해주어야 밴하지 않은 나머지 ip들이 접속이 가능하다


8. (3)~(7)번의 방법대로 IP정책을 추가해서 국내의 ip대역대를 모두 추가해주자

한국인터넷정보센터(KRNIC) > 인터넷주소자원 > IP주소 > 관리대행자 등록 및 현황 > 관리대행자별 IPv6 주소 목록

(이런식으로 정책을 추가해두자)


9. IPv4대역은 매우 많아서 추가하기 힘드니 따로 사용하고자 하는 사람의 IP를 등록하는 방식을 추천함

[IPv4 대역대는 아래 링크에서 확인가능]

한국인터넷정보센터(KRNIC) > 인터넷주소자원 > IP주소 > 관리대행자 등록 및 현황 > 관리대행자별 IPv4 주소 목록 

=> 추가하고자 하는 사람에게 네이버에 "공인ip"라고 검색해서 나오는 ip주소를 알려달라고 하면 된다.

=> cmd창에서 입력하는 ipconfig가 아님. 해당 ip주소는 사설주소라 등록해도 소용없음. 꼭 공인 IP로 해야함

=> 해당 주소를 정책에 추가하고 프리픽스 값 "/32(IPv4인 경우) 또는 /128(IPv6인 경우)"꼭 같이 입력하자


4. (Gradio/Ngrok 공통) Webui의 기능제한 방법(batch기능이나 extensions, setting 등)

1. 배치 카운트(Batch Count) 막기

webui폴더에 보면 ui-config.json 파일을 실행 (비주얼스튜디오 같은 통합개발환경 프로그램 설치필요)


아래의 사진처럼

"txt2img/Batch count/maximum"을 ctrl+f로 검색해서 해당 값을 1로 (한번에 하나만 가능하게 / 필요에 따라 값 설정)

"img2img/Batch count/maximum"을 ctr+f로 검색해서 해당 값을 1로 (필요에 따라 설정)


2. Sampling steps 제한하기

(1)번 방법처럼 ctrl+f로 "txt2img/Sampling steps/maximum" 와 "img2img/Sampling steps/maximum" 검색해서 원하는 값으로 제한


+a) 마찬가지로 이미지 크기 제한하고 싶으면 ui-config.json파일에서 (txt2img/Width/maximum), (txt2img/Height/maximum), (im2img/Width/maximum), (img2img/Height/maximum)에 해당하는 값을 원하는 값으로 제한하면 됨 Hires 배율 제한하는 것도 마찬가지로 해당 문장 찾아서 값들 제한하면 됨


3. Extras, Checkpoiont Merger, Train, Settings, Extensions 막기


(위의 사진의 노란색 표시 된 것들)

stable-diffusion-webui폴더 => modules 폴더 => ui.py 파일 열기


마찬가지로 ctrl+f에 "interface"라고 검색해서 아래 사진과 같이 해당 부분에 "#"으로 주석처리하기


(아래는 확대한 사진)


4. 무단으로 폴더 열지 못하게 폴더 버튼 삭제하기

stable-diffusion-webui폴더 => modules폴더 => ui_common.py 파일열기


ctrl+f 눌러서 "open_folder_button"검색해서 해당 사진에 나오는 대로 #과 """을 통해 주석처리하기

(아래는 확대한 사진)


5. img2img에 Batch 기능 제한하기

위와 같은 사진을

(이렇게 바꾸는 거임 / 저장폴더도 잘 막았으면 위의 사진처럼 안 나올거임)


마찬가지로 stable-diffusion-webui => modules => img2img.py 파일열기

ctrl+f로 "process_batch"검색해서 아래 사진처럼 주석처리하기

(아래 사진은 확대한 거)


6. xyz-grid 및 기타 확장기능들(mov2mov 등) 제한하기

<주의 - 삭제 전 꼭 백업해두고 삭제합시다>

xyz-grid의 경우 stable-diffusion-webui폴더에 scripts폴더가면 xyz_grid.py파일 삭제

mov2mov나 civitai helper와 같은 기타 extension들은 stable-diffusion-webui폴더 => extensions폴더 => 해당 폴더 삭제


7. 멀티 컨트롤넷 배치기능 제한


(위의 사진과 같이 빨간 부분을 아래 사진처럼 막는 거임)


stable-diffusion-webui 폴더 => extensions폴더 => sd-webui-controlnet 폴더 => scripts폴더 => controlnet.py파일열기

ctrl+f 눌러서 "with gr.Tab(label='Batch') as batch_tab"검색 후, 아래 사진처럼 해당 코드 주석처리하기

(아래는 코드 확대한 사진)


8. Generate forever (반복생성) 기능 막기

(Generate 버튼을 우클릭으로 누르면 반복생성하기 기능이 있는데, 해당 기능을 제한하는 방법임)

stable-diffusion-webui폴더 => javascript폴더 => contextMenus.js파일

ctrl+f로 'Generate forever'라고 검색 후, 아래의 사진처럼 #으로 주석처리

잘 적용되면 Generate버튼 우클릭 해도 Generate forever 버튼이 나오지 않음


4-2. 기능제한 비교용 py파일들(다운로드 안될 수 있음)

구드링크 : aHR0cHM6Ly9kcml2ZS5nb29nbGUuY29tL2ZpbGUvZC8xUjdmSUZjMHJnRDI3NE01WFk4VjZ1aTlZSFMzcERQUTAvdmlldw==