Chore: project init
This commit is contained in:
1
.gitignore
vendored
Normal file
1
.gitignore
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
*.safetensors
|
||||||
93
README.md
Normal file
93
README.md
Normal file
@@ -0,0 +1,93 @@
|
|||||||
|
# ComfyUI - Skybox 이미지 생성 환경
|
||||||
|
|
||||||
|
게임용 360° Skybox 이미지를 생성하기 위한 ComfyUI Docker 환경입니다.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 워크플로우
|
||||||
|
|
||||||
|
| 파일 | 설명 |
|
||||||
|
|------|------|
|
||||||
|
| `workflows/skybox360_v1.0.0.json` | 게임용 Skybox 이미지 생성 워크플로우 |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 설치 및 실행
|
||||||
|
|
||||||
|
### 사전 조건
|
||||||
|
- Docker 및 Docker Compose 설치
|
||||||
|
- NVIDIA GPU 및 NVIDIA Container Toolkit 설치
|
||||||
|
- sdxl_360_diffusion.safetensors 체크포인트 파일 다운로드 필요 (https://huggingface.co/ProGamerGov/sdxl-360-diffusion)
|
||||||
|
- SkyboxV1.safetensors 로라 파일 다운로드 필요 (https://civitai.com/models/81168/skybox)
|
||||||
|
- 다운로드 후 디렉토리 구조를 참고하여 위치에 파일을 배치
|
||||||
|
- 필요시 모델 교체
|
||||||
|
|
||||||
|
### 설치
|
||||||
|
|
||||||
|
```bash
|
||||||
|
docker compose pull
|
||||||
|
```
|
||||||
|
|
||||||
|
### 실행 (백그라운드)
|
||||||
|
|
||||||
|
```bash
|
||||||
|
docker compose up -d
|
||||||
|
```
|
||||||
|
|
||||||
|
### 종료
|
||||||
|
|
||||||
|
```bash
|
||||||
|
docker compose down
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 접속 방법
|
||||||
|
|
||||||
|
### 1단계 — 서비스 포털 로그인 (포트 1111)
|
||||||
|
|
||||||
|
브라우저에서 아래 주소로 접속 후 로그인합니다.
|
||||||
|
|
||||||
|
```
|
||||||
|
http://localhost:1111
|
||||||
|
```
|
||||||
|
|
||||||
|
| 항목 | 값 |
|
||||||
|
|------|----|
|
||||||
|
| ID | `myname` |
|
||||||
|
| PW | `mypassword123` |
|
||||||
|
|
||||||
|
### 2단계 — ComfyUI 이동 (포트 8188)
|
||||||
|
|
||||||
|
로그인 후 아래 주소로 이동하면 ComfyUI 화면이 열립니다.
|
||||||
|
|
||||||
|
```
|
||||||
|
http://localhost:8188
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 워크플로우 사용 방법
|
||||||
|
|
||||||
|
1. ComfyUI 화면 우측 상단 메뉴 → **Browse templates** 또는 직접 `workflows/skybox360_v1.0.0.json` 파일을 불러옵니다.
|
||||||
|
2. 원하는 프롬프트 및 설정을 조정합니다. (긍정, 부정 프롬프트 입력)
|
||||||
|
3. 화면 우측의 **Queue** 버튼을 클릭하면 이미지 생성이 시작됩니다.
|
||||||
|
|
||||||
|
> **참고:** 메뉴 위치는 None으로 설정되어 있습니다.(Top으로 바꾸는게 보기가 좋습니다) 설정 변경이 필요할 경우 우측 상단 톱니바퀴(⚙) 아이콘 → Menu Position에서 조정할 수 있습니다.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 디렉토리 구조
|
||||||
|
|
||||||
|
```
|
||||||
|
comfyui/
|
||||||
|
├── docker-compose.yml # Docker 실행 설정
|
||||||
|
├── workflows/
|
||||||
|
│ └── skybox360_v1.0.0.json # Skybox 생성 워크플로우
|
||||||
|
├── workspace/
|
||||||
|
│ └── ComfyUI/
|
||||||
|
│ └── models/
|
||||||
|
│ ├── checkpoints/ # 체크포인트 모델
|
||||||
|
│ └── loras/ # LoRA 모델
|
||||||
|
└── README.md
|
||||||
|
```
|
||||||
27
docker-compose.yml
Normal file
27
docker-compose.yml
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
version: '3.8'
|
||||||
|
|
||||||
|
services:
|
||||||
|
comfyui:
|
||||||
|
image: ghcr.io/ai-dock/comfyui:latest-cuda
|
||||||
|
container_name: comfyui_server
|
||||||
|
ports:
|
||||||
|
- "8188:8188" # 기본 접속
|
||||||
|
- "1111:1111" # 서비스 포털 (관리 화면)
|
||||||
|
- "18188:18188" # 실제 프로세스 포트
|
||||||
|
deploy:
|
||||||
|
resources:
|
||||||
|
reservations:
|
||||||
|
devices:
|
||||||
|
- driver: nvidia
|
||||||
|
count: all
|
||||||
|
capabilities: [gpu]
|
||||||
|
volumes:
|
||||||
|
- ./workspace/ComfyUI/models/checkpoints:/opt/ComfyUI/models/checkpoints
|
||||||
|
- ./workspace/ComfyUI/models/loras:/opt/ComfyUI/models/loras
|
||||||
|
- ./workspace/storage:/opt/storage
|
||||||
|
environment:
|
||||||
|
- CLI_ARGS=--listen 0.0.0.0 --port 8188
|
||||||
|
- DIRECT_ADDRESS=127.0.0.1
|
||||||
|
- WEB_USER=myname
|
||||||
|
- WEB_PASSWORD=mypassword123
|
||||||
|
restart: unless-stopped
|
||||||
492
workflows/skybox360_v1.0.0.json
Normal file
492
workflows/skybox360_v1.0.0.json
Normal file
@@ -0,0 +1,492 @@
|
|||||||
|
{
|
||||||
|
"id": "8c2f481c-625a-4772-b414-fef116772eed",
|
||||||
|
"revision": 0,
|
||||||
|
"last_node_id": 9,
|
||||||
|
"last_link_id": 17,
|
||||||
|
"nodes": [
|
||||||
|
{
|
||||||
|
"id": 3,
|
||||||
|
"type": "CLIPTextEncode",
|
||||||
|
"pos": [
|
||||||
|
-266.5776077305407,
|
||||||
|
174.6998710597806
|
||||||
|
],
|
||||||
|
"size": [
|
||||||
|
400,
|
||||||
|
200
|
||||||
|
],
|
||||||
|
"flags": {},
|
||||||
|
"order": 4,
|
||||||
|
"mode": 0,
|
||||||
|
"inputs": [
|
||||||
|
{
|
||||||
|
"name": "clip",
|
||||||
|
"type": "CLIP",
|
||||||
|
"link": 16
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"outputs": [
|
||||||
|
{
|
||||||
|
"name": "CONDITIONING",
|
||||||
|
"type": "CONDITIONING",
|
||||||
|
"links": [
|
||||||
|
5
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"title": "Positive Prompt",
|
||||||
|
"properties": {
|
||||||
|
"Node name for S&R": "CLIPTextEncode"
|
||||||
|
},
|
||||||
|
"widgets_values": [
|
||||||
|
"360 panorama, equirectangular, (futuristic megalopolis:1.3), towering skyscrapers reaching the clouds, advanced urban architecture, flying vehicles, vibrant neon lights, busy city life, nighttime, (cyberpunk aesthetic:1.2), seamless, photorealistic, 8k resolution, cinematic lighting, ultra detailed"
|
||||||
|
],
|
||||||
|
"color": "#232",
|
||||||
|
"bgcolor": "#353"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 2,
|
||||||
|
"type": "KSampler",
|
||||||
|
"pos": [
|
||||||
|
265.26466459515734,
|
||||||
|
90.975202467434
|
||||||
|
],
|
||||||
|
"size": [
|
||||||
|
270,
|
||||||
|
262
|
||||||
|
],
|
||||||
|
"flags": {},
|
||||||
|
"order": 6,
|
||||||
|
"mode": 0,
|
||||||
|
"inputs": [
|
||||||
|
{
|
||||||
|
"name": "model",
|
||||||
|
"type": "MODEL",
|
||||||
|
"link": 14
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "positive",
|
||||||
|
"type": "CONDITIONING",
|
||||||
|
"link": 5
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "negative",
|
||||||
|
"type": "CONDITIONING",
|
||||||
|
"link": 6
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "latent_image",
|
||||||
|
"type": "LATENT",
|
||||||
|
"link": 9
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"outputs": [
|
||||||
|
{
|
||||||
|
"name": "LATENT",
|
||||||
|
"type": "LATENT",
|
||||||
|
"links": [
|
||||||
|
10
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"properties": {
|
||||||
|
"Node name for S&R": "KSampler"
|
||||||
|
},
|
||||||
|
"widgets_values": [
|
||||||
|
90652639393558,
|
||||||
|
"randomize",
|
||||||
|
25,
|
||||||
|
8,
|
||||||
|
"euler",
|
||||||
|
"simple",
|
||||||
|
1
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 8,
|
||||||
|
"type": "VAEDecodeTiled",
|
||||||
|
"pos": [
|
||||||
|
587.0831482170611,
|
||||||
|
105.73660366521936
|
||||||
|
],
|
||||||
|
"size": [
|
||||||
|
270,
|
||||||
|
150
|
||||||
|
],
|
||||||
|
"flags": {},
|
||||||
|
"order": 7,
|
||||||
|
"mode": 0,
|
||||||
|
"inputs": [
|
||||||
|
{
|
||||||
|
"name": "samples",
|
||||||
|
"type": "LATENT",
|
||||||
|
"link": 10
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "vae",
|
||||||
|
"type": "VAE",
|
||||||
|
"link": 11
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"outputs": [
|
||||||
|
{
|
||||||
|
"name": "IMAGE",
|
||||||
|
"type": "IMAGE",
|
||||||
|
"links": [
|
||||||
|
12
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"properties": {
|
||||||
|
"Node name for S&R": "VAEDecodeTiled"
|
||||||
|
},
|
||||||
|
"widgets_values": [
|
||||||
|
512,
|
||||||
|
64,
|
||||||
|
64,
|
||||||
|
8
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 9,
|
||||||
|
"type": "LoraLoader",
|
||||||
|
"pos": [
|
||||||
|
-573.3163306123124,
|
||||||
|
-62.99459364441078
|
||||||
|
],
|
||||||
|
"size": [
|
||||||
|
270,
|
||||||
|
126
|
||||||
|
],
|
||||||
|
"flags": {},
|
||||||
|
"order": 3,
|
||||||
|
"mode": 0,
|
||||||
|
"inputs": [
|
||||||
|
{
|
||||||
|
"name": "model",
|
||||||
|
"type": "MODEL",
|
||||||
|
"link": 13
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "clip",
|
||||||
|
"type": "CLIP",
|
||||||
|
"link": 15
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"outputs": [
|
||||||
|
{
|
||||||
|
"name": "MODEL",
|
||||||
|
"type": "MODEL",
|
||||||
|
"links": [
|
||||||
|
14
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "CLIP",
|
||||||
|
"type": "CLIP",
|
||||||
|
"links": [
|
||||||
|
16,
|
||||||
|
17
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"properties": {
|
||||||
|
"Node name for S&R": "LoraLoader"
|
||||||
|
},
|
||||||
|
"widgets_values": [
|
||||||
|
"SkyboxV1.safetensors",
|
||||||
|
1,
|
||||||
|
1
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 4,
|
||||||
|
"type": "VAEDecode",
|
||||||
|
"pos": [
|
||||||
|
960.4787096468392,
|
||||||
|
-124.73440762022136
|
||||||
|
],
|
||||||
|
"size": [
|
||||||
|
140,
|
||||||
|
46
|
||||||
|
],
|
||||||
|
"flags": {},
|
||||||
|
"order": 0,
|
||||||
|
"mode": 0,
|
||||||
|
"inputs": [
|
||||||
|
{
|
||||||
|
"name": "samples",
|
||||||
|
"type": "LATENT",
|
||||||
|
"link": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "vae",
|
||||||
|
"type": "VAE",
|
||||||
|
"link": null
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"outputs": [
|
||||||
|
{
|
||||||
|
"name": "IMAGE",
|
||||||
|
"type": "IMAGE",
|
||||||
|
"links": []
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"properties": {
|
||||||
|
"Node name for S&R": "VAEDecode"
|
||||||
|
},
|
||||||
|
"widgets_values": []
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 7,
|
||||||
|
"type": "EmptyLatentImage",
|
||||||
|
"pos": [
|
||||||
|
-870.1116369256109,
|
||||||
|
222.80535972156463
|
||||||
|
],
|
||||||
|
"size": [
|
||||||
|
270,
|
||||||
|
106
|
||||||
|
],
|
||||||
|
"flags": {},
|
||||||
|
"order": 1,
|
||||||
|
"mode": 0,
|
||||||
|
"inputs": [],
|
||||||
|
"outputs": [
|
||||||
|
{
|
||||||
|
"name": "LATENT",
|
||||||
|
"type": "LATENT",
|
||||||
|
"links": [
|
||||||
|
9
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"properties": {
|
||||||
|
"Node name for S&R": "EmptyLatentImage"
|
||||||
|
},
|
||||||
|
"widgets_values": [
|
||||||
|
2048,
|
||||||
|
1024,
|
||||||
|
1
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 6,
|
||||||
|
"type": "SaveImage",
|
||||||
|
"pos": [
|
||||||
|
586.5284890751892,
|
||||||
|
317.7512366359076
|
||||||
|
],
|
||||||
|
"size": [
|
||||||
|
270,
|
||||||
|
270
|
||||||
|
],
|
||||||
|
"flags": {},
|
||||||
|
"order": 8,
|
||||||
|
"mode": 0,
|
||||||
|
"inputs": [
|
||||||
|
{
|
||||||
|
"name": "images",
|
||||||
|
"type": "IMAGE",
|
||||||
|
"link": 12
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"outputs": [],
|
||||||
|
"properties": {},
|
||||||
|
"widgets_values": [
|
||||||
|
"Image360"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 5,
|
||||||
|
"type": "CLIPTextEncode",
|
||||||
|
"pos": [
|
||||||
|
-266.38617988178174,
|
||||||
|
426.43051789958037
|
||||||
|
],
|
||||||
|
"size": [
|
||||||
|
400,
|
||||||
|
200
|
||||||
|
],
|
||||||
|
"flags": {
|
||||||
|
"collapsed": false
|
||||||
|
},
|
||||||
|
"order": 5,
|
||||||
|
"mode": 0,
|
||||||
|
"inputs": [
|
||||||
|
{
|
||||||
|
"name": "clip",
|
||||||
|
"type": "CLIP",
|
||||||
|
"link": 17
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"outputs": [
|
||||||
|
{
|
||||||
|
"name": "CONDITIONING",
|
||||||
|
"type": "CONDITIONING",
|
||||||
|
"links": [
|
||||||
|
6
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"title": "Negative Prompt",
|
||||||
|
"properties": {
|
||||||
|
"Node name for S&R": "CLIPTextEncode"
|
||||||
|
},
|
||||||
|
"widgets_values": [
|
||||||
|
"seam, visible line, blur, distortion, low resolution, ugly, ancient, rural, nature, water, trees, text, watermark, out of focus"
|
||||||
|
],
|
||||||
|
"color": "#322",
|
||||||
|
"bgcolor": "#533"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 1,
|
||||||
|
"type": "CheckpointLoaderSimple",
|
||||||
|
"pos": [
|
||||||
|
-871.4772569789588,
|
||||||
|
69.00680820295105
|
||||||
|
],
|
||||||
|
"size": [
|
||||||
|
270,
|
||||||
|
98
|
||||||
|
],
|
||||||
|
"flags": {},
|
||||||
|
"order": 2,
|
||||||
|
"mode": 0,
|
||||||
|
"inputs": [],
|
||||||
|
"outputs": [
|
||||||
|
{
|
||||||
|
"name": "MODEL",
|
||||||
|
"type": "MODEL",
|
||||||
|
"links": [
|
||||||
|
13
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "CLIP",
|
||||||
|
"type": "CLIP",
|
||||||
|
"links": [
|
||||||
|
15
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "VAE",
|
||||||
|
"type": "VAE",
|
||||||
|
"links": [
|
||||||
|
11
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"properties": {
|
||||||
|
"Node name for S&R": "CheckpointLoaderSimple"
|
||||||
|
},
|
||||||
|
"widgets_values": [
|
||||||
|
"sdxl_360_diffusion.safetensors"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"links": [
|
||||||
|
[
|
||||||
|
5,
|
||||||
|
3,
|
||||||
|
0,
|
||||||
|
2,
|
||||||
|
1,
|
||||||
|
"CONDITIONING"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
6,
|
||||||
|
5,
|
||||||
|
0,
|
||||||
|
2,
|
||||||
|
2,
|
||||||
|
"CONDITIONING"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
9,
|
||||||
|
7,
|
||||||
|
0,
|
||||||
|
2,
|
||||||
|
3,
|
||||||
|
"LATENT"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
10,
|
||||||
|
2,
|
||||||
|
0,
|
||||||
|
8,
|
||||||
|
0,
|
||||||
|
"LATENT"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
11,
|
||||||
|
1,
|
||||||
|
2,
|
||||||
|
8,
|
||||||
|
1,
|
||||||
|
"VAE"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
12,
|
||||||
|
8,
|
||||||
|
0,
|
||||||
|
6,
|
||||||
|
0,
|
||||||
|
"IMAGE"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
13,
|
||||||
|
1,
|
||||||
|
0,
|
||||||
|
9,
|
||||||
|
0,
|
||||||
|
"MODEL"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
14,
|
||||||
|
9,
|
||||||
|
0,
|
||||||
|
2,
|
||||||
|
0,
|
||||||
|
"MODEL"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
15,
|
||||||
|
1,
|
||||||
|
1,
|
||||||
|
9,
|
||||||
|
1,
|
||||||
|
"CLIP"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
16,
|
||||||
|
9,
|
||||||
|
1,
|
||||||
|
3,
|
||||||
|
0,
|
||||||
|
"CLIP"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
17,
|
||||||
|
9,
|
||||||
|
1,
|
||||||
|
5,
|
||||||
|
0,
|
||||||
|
"CLIP"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"groups": [],
|
||||||
|
"config": {},
|
||||||
|
"extra": {
|
||||||
|
"workflowRendererVersion": "LG",
|
||||||
|
"ds": {
|
||||||
|
"scale": 0.9621899440109732,
|
||||||
|
"offset": [
|
||||||
|
971.5551054739246,
|
||||||
|
262.79673218780925
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"frontendVersion": "1.38.14"
|
||||||
|
},
|
||||||
|
"version": 0.4
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user