-
CIVITAI에서 이미지 정보를 가져오는 방법IT 2024. 11. 7. 16:59반응형
CIVITAI
이미지 생성을 위한 다양한 모델을 공유하고, 사용자가 생성한 이미지와 관련 정보를 나눌 수 있는 플랫폼입니다.
Civitai web scraper
Civitai Web Scraper는 ScreamingHawk가 만든 스크립트로, API를 통해 Civitai의 정보를 일괄적으로 수집할 수 있는 방법을 제공합니다.
GitHub 링크 : https://github.com/ScreamingHawk/civitai-web-scraper
설치 방법
설치할 폴더에서 명령 프롬프트(cmd)를 열고, 아래 명령어를 입력합니다. 이를 통해 civitai-web-scraper 폴더가 C 드라이브에 생성되며, 스크립트가 설치됩니다.
git clone https://github.com/ScreamingHawk/civitai-web-scraper.git
사용방법
1. civitai-web-scraper 폴더에 있는 config.example.ini 파일의 이름을 config.ini로 변경합니다. 이는 처음 실행할 때 한 번만 설정합니다.
2. civitai-web-scraper 폴더에 out 폴더를 만듭니다.
3. 명령 프롬프트를 열고 다음 명령어를 차례대로 입력합니다.
py -m venv venv 가상환경을 생성
.\venv\Scripts\activate 가상환경을 활성화
py -m pip install -r requirements.txt 필수 라이브러리 설치(처음 실행할 때 한번만 실행)
py scrape_civitai.py 스크립트 실행위와 같은 방법으로 Civitai Web Scraper를 설치하고 실행할 수 있습니다.
Config.ini
Civitai Web Scraper의 설정파일입니다. 다음 항목을 포함하고 있습니다.
OutputDir=out : 저장할 경로를 지정합니다. (기본값: out)
Pages=10 : 스크랩할 페이지 수를 설정합니다. (기본값: 10)
PageStart=1 : 스크랩을 시작할 페이지 번호를 설정합니다. (기본값: 1)
NSFWLevel= : NSFW 콘텐츠의 필터링 수준을 설정합니다. (기본값 없음)
ServerPort=8000 : 서버의 포트 번호를 지정합니다. (기본값: 8000)
ItemsPerPage=100 : 한 페이지당 가져올 항목 수를 설정합니다. (기본값: 100)
LocalImages=False : 이미지를 로컬에 다운로드할지 여부를 설정합니다. (True이면 다운로드, False이면 다운로드 안 함)
Execute
Civitai Web Scraper를 실행하면 이미지의 정보는 JSON 파일로 저장되고, 이미지는 JPG 파일로 저장됩니다. 이 스크립트는 페이지 1~10까지의 데이터를 각각 100개씩 가져올 수 있습니다. 페이지 11이상에서는 오류가 발생하며, 한 페이지당 100개를 초과하는 항목은 가져올 수 없습니다.
Modified Code
import os
import json
import requests
import configparser
import time
# Configuration
config = configparser.ConfigParser()
config.read("config.ini")
output_dir = config["DEFAULT"]["OutputDir"]
nsfw_level = config["DEFAULT"]["NSFWLevel"]
local_images = config["DEFAULT"]["LocalImages"] == 'True'
limit = 100 # 페이지당 이미지 개수
# 첫 번째 요청 URL 설정
url = f"https://civitai.com/api/v1/images?limit={limit}&sort=Most Reactions&nsfw={nsfw_level}"
while url:
print(f"Requesting: {url}")
response = requests.get(url)
if response.status_code == 200:
data = response.json()
# 데이터 처리
for item in data.get("items", []):
item_id = item["id"]
img_filename = f"{output_dir}/{item_id}.jpg"
txt_filename = f"{output_dir}/{item_id}.txt"
# TXT 파일 저장 확인 및 생성
if os.path.isfile(txt_filename):
print(f"File {txt_filename} already exists.")
else:
print(f"Saving {txt_filename}.")
with open(txt_filename, "w") as f:
f.write(json.dumps(item, indent=1)) # JSON 데이터를 문자열로 변환 후 저장
# 이미지 다운로드 (메타데이터와 이미지 URL이 있을 때)
if item.get("meta") and item.get("url") and local_images:
image_response = requests.get(item["url"])
if image_response.status_code == 200:
with open(img_filename, "wb") as f:
f.write(image_response.content)
print("Image saved successfully!")
else:
print("Error saving image:", image_response.status_code)
# 다음 페이지 URL로 설정 (metadata.nextPage 사용)
url = data["metadata"].get("nextPage")
if url:
print(f"Moving to next page: {url}")
time.sleep(1) # 호출 제한을 피하기 위해 대기 시간 추가
else:
print("Error:", response.status_code)
break11페이지 이상에서 발생하는 오류를 수정한 코드입니다. 전체 페이지의 데이터를 가져오며, 데이터 파일은 텍스트 파일로 저장됩니다. config.ini의 OutputDir, NSFWLevel, LocalImages 항목을 사용하며, 사용법은 Civitai Web Scraper와 동일합니다. scrape_civitai.py 파일의 내용을 위 코드로 바꾸면 됩니다.
Thank you, ScreamingHawk, for creating the excellent Civitai Web Scraper
반응형'IT' 카테고리의 다른 글
Excel 파일의 데이터를 LLM으로 처리하는 방법 (0) 2024.12.09 Ollama의 설치 및 모델 다운로드 방법 (0) 2024.11.27 GPT를 내 컴퓨터에 설치하자 with Open-WebUI (0) 2024.11.04