File size: 2,240 Bytes
ea2b072
 
 
 
 
 
 
 
 
 
 
 
523a925
ea2b072
 
 
 
 
 
 
 
0fb4a38
b0c4bef
ea2b072
0fb4a38
 
 
 
 
 
 
 
 
 
 
b0c4bef
 
 
 
 
 
 
 
0fb4a38
 
 
beb409d
 
0fb4a38
 
beb409d
 
 
 
0fb4a38
 
 
ea2b072
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
import os

_segmenter = None
_inpainter = None


def get_segmenter():
    global _segmenter
    if _segmenter is None:
        from server.segmentation import Sam2ModelSegmenter

        _segmenter = Sam2ModelSegmenter(
            hf_model_id=os.environ.get("SAM2_HF_MODEL_ID", "facebook/sam2.1-hiera-base-plus"),
            device=os.environ.get("INFERENCE_DEVICE", "cuda"),
        )
    return _segmenter


def get_inpainter():
    global _inpainter
    if _inpainter is None:
        device = os.environ.get("INFERENCE_DEVICE", "cuda")
        backend = os.environ.get("INPAINT_BACKEND", "powerpaint")  # "powerpaint", "sd", "lama", or "remote"

        if backend == "lama":
            from server.inpainting import LamaModelInpainter

            _inpainter = LamaModelInpainter(device=device)
        elif backend == "remote":
            from server.inpainting import RemoteInpainter

            _inpainter = RemoteInpainter(
                base_url=os.environ["REMOTE_INPAINT_URL"],
                timeout_seconds=float(os.environ.get("REMOTE_INPAINT_TIMEOUT_SECONDS", "300")),
            )
        elif backend == "powerpaint":
            from server.inpainting import PowerPaintInpainter

            _inpainter = PowerPaintInpainter(
                device=device,
                num_inference_steps=int(os.environ.get("SD_NUM_INFERENCE_STEPS", "45")),
                guidance_scale=float(os.environ.get("POWERPAINT_GUIDANCE_SCALE", "10.0")),
            )
        else:
            from server.inpainting import StableDiffusionInpainter

            working_size_str = os.environ.get("SD_WORKING_SIZE", "1024x1024")
            working_width, working_height = (int(v) for v in working_size_str.split("x"))
            _inpainter = StableDiffusionInpainter(
                device=device,
                model_id=os.environ.get(
                    "SD_INPAINT_MODEL_ID", "diffusers/stable-diffusion-xl-1.0-inpainting-0.1"
                ),
                working_size=(working_width, working_height),
                step_pause_seconds=float(os.environ.get("SD_STEP_PAUSE_SECONDS", "0")),
                num_inference_steps=int(os.environ.get("SD_NUM_INFERENCE_STEPS", "30")),
            )
    return _inpainter