2023-01-28 23:09:19 +00:00
|
|
|
from logging import getLogger
|
2023-06-30 04:06:36 +00:00
|
|
|
from typing import Any, List, Optional
|
2023-01-16 00:46:00 +00:00
|
|
|
|
2023-02-16 03:01:25 +00:00
|
|
|
from PIL import Image
|
2023-02-05 13:53:26 +00:00
|
|
|
|
2023-07-02 17:16:13 +00:00
|
|
|
from onnx_web.chain.highres import stage_highres
|
|
|
|
|
2023-06-30 04:36:45 +00:00
|
|
|
from ..chain import (
|
2023-07-01 12:10:53 +00:00
|
|
|
BlendImg2ImgStage,
|
|
|
|
BlendMaskStage,
|
|
|
|
ChainPipeline,
|
|
|
|
SourceTxt2ImgStage,
|
|
|
|
UpscaleOutpaintStage,
|
2023-06-30 04:36:45 +00:00
|
|
|
)
|
2023-07-01 12:10:53 +00:00
|
|
|
from ..chain.upscale import split_upscale, stage_upscale_correction
|
2023-06-26 12:14:32 +00:00
|
|
|
from ..output import save_image
|
2023-04-01 17:06:31 +00:00
|
|
|
from ..params import (
|
|
|
|
Border,
|
|
|
|
HighresParams,
|
|
|
|
ImageParams,
|
|
|
|
Size,
|
|
|
|
StageParams,
|
|
|
|
UpscaleParams,
|
|
|
|
)
|
2023-02-26 05:49:39 +00:00
|
|
|
from ..server import ServerContext
|
2023-04-14 01:06:33 +00:00
|
|
|
from ..server.load import get_source_filters
|
2023-04-24 22:40:50 +00:00
|
|
|
from ..utils import run_gc, show_system_toast
|
2023-02-26 20:15:30 +00:00
|
|
|
from ..worker import WorkerContext
|
2023-06-30 04:06:36 +00:00
|
|
|
from .utils import parse_prompt
|
2023-01-28 05:28:14 +00:00
|
|
|
|
2023-01-28 23:09:19 +00:00
|
|
|
logger = getLogger(__name__)
|
|
|
|
|
2023-02-02 03:20:48 +00:00
|
|
|
|
2023-06-30 04:06:36 +00:00
|
|
|
def run_txt2img_pipeline(
|
2023-04-14 13:54:21 +00:00
|
|
|
job: WorkerContext,
|
|
|
|
server: ServerContext,
|
|
|
|
params: ImageParams,
|
|
|
|
size: Size,
|
2023-06-30 04:06:36 +00:00
|
|
|
outputs: List[str],
|
2023-04-14 13:54:21 +00:00
|
|
|
upscale: UpscaleParams,
|
|
|
|
highres: HighresParams,
|
2023-06-30 04:06:36 +00:00
|
|
|
) -> None:
|
|
|
|
# prepare the chain pipeline and first stage
|
|
|
|
chain = ChainPipeline()
|
2023-07-02 23:54:10 +00:00
|
|
|
stage = StageParams(
|
|
|
|
tile_size=params.tiles,
|
|
|
|
)
|
2023-07-01 02:42:24 +00:00
|
|
|
chain.stage(
|
2023-07-01 12:10:53 +00:00
|
|
|
SourceTxt2ImgStage(),
|
2023-07-01 02:42:24 +00:00
|
|
|
stage,
|
|
|
|
size=size,
|
2023-06-30 04:42:52 +00:00
|
|
|
)
|
2023-06-30 04:06:36 +00:00
|
|
|
|
|
|
|
# apply upscaling and correction, before highres
|
|
|
|
first_upscale, after_upscale = split_upscale(upscale)
|
|
|
|
if first_upscale:
|
2023-07-01 02:42:24 +00:00
|
|
|
stage_upscale_correction(
|
2023-06-30 04:06:36 +00:00
|
|
|
stage,
|
2023-04-14 13:54:21 +00:00
|
|
|
params,
|
2023-06-30 04:06:36 +00:00
|
|
|
upscale=first_upscale,
|
|
|
|
chain=chain,
|
2023-04-14 13:54:21 +00:00
|
|
|
)
|
|
|
|
|
2023-06-30 04:06:36 +00:00
|
|
|
# apply highres
|
2023-07-03 00:07:59 +00:00
|
|
|
stage_highres(
|
|
|
|
stage,
|
|
|
|
params,
|
|
|
|
highres,
|
|
|
|
upscale,
|
|
|
|
chain=chain,
|
|
|
|
)
|
2023-04-27 12:22:00 +00:00
|
|
|
|
2023-06-30 04:06:36 +00:00
|
|
|
# apply upscaling and correction, after highres
|
2023-07-01 02:42:24 +00:00
|
|
|
stage_upscale_correction(
|
|
|
|
stage,
|
2023-05-02 04:20:40 +00:00
|
|
|
params,
|
2023-07-01 02:42:24 +00:00
|
|
|
upscale=after_upscale,
|
2023-06-30 04:06:36 +00:00
|
|
|
chain=chain,
|
2023-04-14 13:54:21 +00:00
|
|
|
)
|
|
|
|
|
2023-06-30 04:06:36 +00:00
|
|
|
# run and save
|
2023-07-01 03:00:11 +00:00
|
|
|
progress = job.get_progress_callback()
|
2023-07-04 18:56:02 +00:00
|
|
|
images = chain(job, server, params, [], callback=progress)
|
2023-04-14 13:54:21 +00:00
|
|
|
|
2023-06-30 04:06:36 +00:00
|
|
|
_prompt_pairs, loras, inversions = parse_prompt(params)
|
2023-07-04 18:56:02 +00:00
|
|
|
|
|
|
|
for image, output in zip(images, outputs):
|
|
|
|
dest = save_image(
|
|
|
|
server,
|
|
|
|
output,
|
|
|
|
image,
|
|
|
|
params,
|
|
|
|
size,
|
|
|
|
upscale=upscale,
|
|
|
|
highres=highres,
|
|
|
|
inversions=inversions,
|
|
|
|
loras=loras,
|
|
|
|
)
|
2023-01-16 13:42:10 +00:00
|
|
|
|
2023-06-30 04:06:36 +00:00
|
|
|
# clean up
|
2023-02-17 00:11:35 +00:00
|
|
|
run_gc([job.get_device()])
|
2023-06-30 04:06:36 +00:00
|
|
|
|
|
|
|
# notify the user
|
2023-04-24 22:40:50 +00:00
|
|
|
show_system_toast(f"finished txt2img job: {dest}")
|
2023-02-05 13:53:26 +00:00
|
|
|
logger.info("finished txt2img job: %s", dest)
|
2023-01-16 00:54:20 +00:00
|
|
|
|
|
|
|
|
2023-01-16 13:31:42 +00:00
|
|
|
def run_img2img_pipeline(
|
2023-02-26 05:49:39 +00:00
|
|
|
job: WorkerContext,
|
2023-02-04 16:06:22 +00:00
|
|
|
server: ServerContext,
|
2023-01-27 23:08:36 +00:00
|
|
|
params: ImageParams,
|
2023-02-20 14:35:18 +00:00
|
|
|
outputs: List[str],
|
2023-01-16 19:12:08 +00:00
|
|
|
upscale: UpscaleParams,
|
2023-04-14 13:54:21 +00:00
|
|
|
highres: HighresParams,
|
2023-02-18 22:35:57 +00:00
|
|
|
source: Image.Image,
|
2023-01-16 19:12:08 +00:00
|
|
|
strength: float,
|
2023-04-14 01:06:33 +00:00
|
|
|
source_filter: Optional[str] = None,
|
2023-01-28 18:42:02 +00:00
|
|
|
) -> None:
|
2023-06-30 04:06:36 +00:00
|
|
|
# run filter on the source image
|
2023-04-14 01:06:33 +00:00
|
|
|
if source_filter is not None:
|
2023-04-14 02:10:00 +00:00
|
|
|
f = get_source_filters().get(source_filter, None)
|
|
|
|
if f is not None:
|
2023-04-22 16:26:21 +00:00
|
|
|
logger.debug("running source filter: %s", f.__name__)
|
2023-04-14 02:10:00 +00:00
|
|
|
source = f(server, source)
|
2023-04-14 01:06:33 +00:00
|
|
|
|
2023-06-30 04:06:36 +00:00
|
|
|
# prepare the chain pipeline and first stage
|
|
|
|
chain = ChainPipeline()
|
2023-07-02 23:54:10 +00:00
|
|
|
stage = StageParams(
|
|
|
|
tile_size=params.tiles,
|
|
|
|
)
|
2023-07-01 02:42:24 +00:00
|
|
|
chain.stage(
|
2023-07-01 12:10:53 +00:00
|
|
|
BlendImg2ImgStage(),
|
2023-07-01 02:42:24 +00:00
|
|
|
stage,
|
|
|
|
strength=strength,
|
2023-02-05 13:53:26 +00:00
|
|
|
)
|
2023-04-13 04:30:59 +00:00
|
|
|
|
2023-06-30 04:06:36 +00:00
|
|
|
# apply upscaling and correction, before highres
|
|
|
|
first_upscale, after_upscale = split_upscale(upscale)
|
|
|
|
if first_upscale:
|
2023-07-01 02:42:24 +00:00
|
|
|
stage_upscale_correction(
|
2023-06-30 04:06:36 +00:00
|
|
|
stage,
|
|
|
|
params,
|
|
|
|
upscale=first_upscale,
|
|
|
|
chain=chain,
|
2023-02-05 23:36:00 +00:00
|
|
|
)
|
2023-01-16 00:54:20 +00:00
|
|
|
|
2023-06-30 04:06:36 +00:00
|
|
|
# loopback through multiple img2img iterations
|
2023-07-02 17:16:13 +00:00
|
|
|
for _i in range(params.loopback):
|
|
|
|
chain.stage(
|
|
|
|
BlendImg2ImgStage(),
|
|
|
|
stage,
|
|
|
|
strength=strength,
|
|
|
|
)
|
2023-04-14 03:51:59 +00:00
|
|
|
|
2023-06-30 04:06:36 +00:00
|
|
|
# highres, if selected
|
2023-07-03 00:07:59 +00:00
|
|
|
stage_highres(
|
|
|
|
stage,
|
|
|
|
params,
|
|
|
|
highres,
|
|
|
|
upscale,
|
|
|
|
chain=chain,
|
|
|
|
)
|
2023-04-22 15:54:39 +00:00
|
|
|
|
2023-06-30 04:06:36 +00:00
|
|
|
# apply upscaling and correction, after highres
|
2023-07-01 02:42:24 +00:00
|
|
|
stage_upscale_correction(
|
2023-06-30 04:06:36 +00:00
|
|
|
stage,
|
|
|
|
params,
|
|
|
|
upscale=after_upscale,
|
|
|
|
chain=chain,
|
|
|
|
)
|
2023-04-14 13:54:21 +00:00
|
|
|
|
2023-06-30 04:06:36 +00:00
|
|
|
# run and append the filtered source
|
2023-07-01 03:00:11 +00:00
|
|
|
progress = job.get_progress_callback()
|
2023-06-30 04:06:36 +00:00
|
|
|
images = [
|
2023-07-04 18:56:02 +00:00
|
|
|
chain(job, server, params, [source], callback=progress),
|
2023-06-30 04:06:36 +00:00
|
|
|
]
|
|
|
|
|
|
|
|
if source_filter is not None and source_filter != "none":
|
|
|
|
images.append(source)
|
|
|
|
|
|
|
|
# save with metadata
|
|
|
|
_prompt_pairs, loras, inversions = parse_prompt(params)
|
|
|
|
size = Size(*source.size)
|
2023-01-16 00:54:20 +00:00
|
|
|
|
2023-06-30 04:06:36 +00:00
|
|
|
for image, output in zip(images, outputs):
|
2023-06-26 12:14:32 +00:00
|
|
|
dest = save_image(
|
2023-06-26 12:48:39 +00:00
|
|
|
server,
|
|
|
|
output,
|
|
|
|
image,
|
|
|
|
params,
|
|
|
|
size,
|
|
|
|
upscale=upscale,
|
|
|
|
highres=highres,
|
|
|
|
inversions=inversions,
|
|
|
|
loras=loras,
|
2023-06-26 12:14:32 +00:00
|
|
|
)
|
2023-01-16 13:42:10 +00:00
|
|
|
|
2023-06-30 04:06:36 +00:00
|
|
|
# clean up
|
2023-02-17 00:11:35 +00:00
|
|
|
run_gc([job.get_device()])
|
2023-06-30 04:06:36 +00:00
|
|
|
|
|
|
|
# notify the user
|
2023-04-24 22:40:50 +00:00
|
|
|
show_system_toast(f"finished img2img job: {dest}")
|
2023-02-05 13:53:26 +00:00
|
|
|
logger.info("finished img2img job: %s", dest)
|
2023-01-16 00:54:20 +00:00
|
|
|
|
|
|
|
|
|
|
|
def run_inpaint_pipeline(
|
2023-02-26 05:49:39 +00:00
|
|
|
job: WorkerContext,
|
2023-02-04 16:06:22 +00:00
|
|
|
server: ServerContext,
|
2023-01-27 23:08:36 +00:00
|
|
|
params: ImageParams,
|
2023-02-02 04:20:40 +00:00
|
|
|
size: Size,
|
2023-02-20 14:35:18 +00:00
|
|
|
outputs: List[str],
|
2023-01-16 19:12:08 +00:00
|
|
|
upscale: UpscaleParams,
|
2023-04-14 13:54:21 +00:00
|
|
|
highres: HighresParams,
|
2023-02-18 22:35:57 +00:00
|
|
|
source: Image.Image,
|
|
|
|
mask: Image.Image,
|
2023-02-02 04:20:40 +00:00
|
|
|
border: Border,
|
2023-01-16 00:54:20 +00:00
|
|
|
noise_source: Any,
|
2023-01-17 23:50:36 +00:00
|
|
|
mask_filter: Any,
|
2023-01-18 14:41:02 +00:00
|
|
|
fill_color: str,
|
2023-02-12 00:00:18 +00:00
|
|
|
tile_order: str,
|
2023-01-28 18:42:02 +00:00
|
|
|
) -> None:
|
2023-06-30 04:06:36 +00:00
|
|
|
logger.debug("building inpaint pipeline")
|
2023-04-15 01:29:44 +00:00
|
|
|
|
2023-06-30 04:06:36 +00:00
|
|
|
# set up the chain pipeline and base stage
|
|
|
|
chain = ChainPipeline()
|
2023-07-02 23:54:10 +00:00
|
|
|
stage = StageParams(tile_order=tile_order, tile_size=params.tiles)
|
2023-07-01 02:42:24 +00:00
|
|
|
chain.stage(
|
2023-07-01 12:10:53 +00:00
|
|
|
UpscaleOutpaintStage(),
|
2023-07-01 02:42:24 +00:00
|
|
|
stage,
|
|
|
|
border=border,
|
|
|
|
stage_mask=mask,
|
|
|
|
fill_color=fill_color,
|
|
|
|
mask_filter=mask_filter,
|
|
|
|
noise_source=noise_source,
|
2023-01-22 04:28:13 +00:00
|
|
|
)
|
2023-01-16 00:54:20 +00:00
|
|
|
|
2023-07-03 00:07:59 +00:00
|
|
|
# apply upscaling and correction, before highres
|
|
|
|
first_upscale, after_upscale = split_upscale(upscale)
|
|
|
|
if first_upscale:
|
|
|
|
stage_upscale_correction(
|
2023-07-02 17:16:13 +00:00
|
|
|
stage,
|
|
|
|
params,
|
2023-07-03 00:07:59 +00:00
|
|
|
upscale=first_upscale,
|
2023-07-02 17:16:13 +00:00
|
|
|
chain=chain,
|
|
|
|
)
|
2023-04-15 01:29:44 +00:00
|
|
|
|
2023-07-03 00:07:59 +00:00
|
|
|
# apply highres
|
|
|
|
stage_highres(
|
|
|
|
stage,
|
|
|
|
params,
|
|
|
|
highres,
|
|
|
|
upscale,
|
|
|
|
chain=chain,
|
|
|
|
)
|
|
|
|
|
2023-06-30 04:06:36 +00:00
|
|
|
# apply upscaling and correction
|
2023-07-01 02:42:24 +00:00
|
|
|
stage_upscale_correction(
|
2023-04-12 00:29:25 +00:00
|
|
|
stage,
|
|
|
|
params,
|
2023-07-03 00:07:59 +00:00
|
|
|
upscale=after_upscale,
|
2023-06-30 04:06:36 +00:00
|
|
|
chain=chain,
|
2023-02-12 18:33:36 +00:00
|
|
|
)
|
2023-01-16 19:12:08 +00:00
|
|
|
|
2023-06-30 04:06:36 +00:00
|
|
|
# run and save
|
2023-07-01 03:00:11 +00:00
|
|
|
progress = job.get_progress_callback()
|
2023-07-04 18:56:02 +00:00
|
|
|
images = chain(job, server, params, [source], callback=progress)
|
2023-06-30 04:06:36 +00:00
|
|
|
|
|
|
|
_prompt_pairs, loras, inversions = parse_prompt(params)
|
2023-07-04 18:56:02 +00:00
|
|
|
for image, output in zip(images, outputs):
|
|
|
|
dest = save_image(
|
|
|
|
server,
|
|
|
|
output,
|
|
|
|
image,
|
|
|
|
params,
|
|
|
|
size,
|
|
|
|
upscale=upscale,
|
|
|
|
border=border,
|
|
|
|
inversions=inversions,
|
|
|
|
loras=loras,
|
|
|
|
)
|
2023-01-16 00:54:20 +00:00
|
|
|
|
2023-06-30 04:06:36 +00:00
|
|
|
# clean up
|
2023-01-22 04:28:13 +00:00
|
|
|
del image
|
2023-02-17 00:11:35 +00:00
|
|
|
run_gc([job.get_device()])
|
2023-06-26 12:03:06 +00:00
|
|
|
|
2023-06-30 04:06:36 +00:00
|
|
|
# notify the user
|
2023-04-24 22:40:50 +00:00
|
|
|
show_system_toast(f"finished inpaint job: {dest}")
|
2023-02-05 13:53:26 +00:00
|
|
|
logger.info("finished inpaint job: %s", dest)
|
2023-01-17 05:45:54 +00:00
|
|
|
|
2023-01-17 23:50:36 +00:00
|
|
|
|
2023-01-17 05:45:54 +00:00
|
|
|
def run_upscale_pipeline(
|
2023-02-26 05:49:39 +00:00
|
|
|
job: WorkerContext,
|
2023-02-04 16:06:22 +00:00
|
|
|
server: ServerContext,
|
2023-01-27 23:08:36 +00:00
|
|
|
params: ImageParams,
|
2023-02-02 04:20:40 +00:00
|
|
|
size: Size,
|
2023-02-20 14:35:18 +00:00
|
|
|
outputs: List[str],
|
2023-01-17 05:45:54 +00:00
|
|
|
upscale: UpscaleParams,
|
2023-04-14 13:54:21 +00:00
|
|
|
highres: HighresParams,
|
2023-02-18 22:35:57 +00:00
|
|
|
source: Image.Image,
|
2023-01-28 18:42:02 +00:00
|
|
|
) -> None:
|
2023-06-30 04:06:36 +00:00
|
|
|
# set up the chain pipeline, no base stage for upscaling
|
|
|
|
chain = ChainPipeline()
|
2023-07-02 23:54:10 +00:00
|
|
|
stage = StageParams(tile_size=params.tiles)
|
2023-02-04 16:06:22 +00:00
|
|
|
|
2023-06-30 04:06:36 +00:00
|
|
|
# apply upscaling and correction, before highres
|
|
|
|
first_upscale, after_upscale = split_upscale(upscale)
|
|
|
|
if first_upscale:
|
2023-07-01 02:42:24 +00:00
|
|
|
stage_upscale_correction(
|
2023-06-30 04:06:36 +00:00
|
|
|
stage,
|
|
|
|
params,
|
|
|
|
upscale=first_upscale,
|
|
|
|
chain=chain,
|
|
|
|
)
|
2023-04-15 01:29:44 +00:00
|
|
|
|
2023-06-30 04:06:36 +00:00
|
|
|
# apply highres
|
2023-07-03 00:07:59 +00:00
|
|
|
stage_highres(
|
|
|
|
stage,
|
|
|
|
params,
|
|
|
|
highres,
|
|
|
|
upscale,
|
|
|
|
chain=chain,
|
|
|
|
)
|
2023-06-30 04:06:36 +00:00
|
|
|
|
|
|
|
# apply upscaling and correction, after highres
|
2023-07-01 02:42:24 +00:00
|
|
|
stage_upscale_correction(
|
2023-06-30 04:06:36 +00:00
|
|
|
stage,
|
|
|
|
params,
|
|
|
|
upscale=after_upscale,
|
|
|
|
chain=chain,
|
2023-02-05 13:53:26 +00:00
|
|
|
)
|
2023-01-17 05:45:54 +00:00
|
|
|
|
2023-06-30 04:06:36 +00:00
|
|
|
# run and save
|
2023-07-01 03:00:11 +00:00
|
|
|
progress = job.get_progress_callback()
|
2023-07-04 18:56:02 +00:00
|
|
|
images = chain(job, server, params, [source], callback=progress)
|
2023-07-01 03:00:11 +00:00
|
|
|
|
2023-06-30 04:06:36 +00:00
|
|
|
_prompt_pairs, loras, inversions = parse_prompt(params)
|
2023-07-04 18:56:02 +00:00
|
|
|
for image, output in zip(images, outputs):
|
|
|
|
dest = save_image(
|
|
|
|
server,
|
|
|
|
output,
|
|
|
|
image,
|
|
|
|
params,
|
|
|
|
size,
|
|
|
|
upscale=upscale,
|
|
|
|
inversions=inversions,
|
|
|
|
loras=loras,
|
|
|
|
)
|
2023-04-15 01:29:44 +00:00
|
|
|
|
2023-06-30 04:06:36 +00:00
|
|
|
# clean up
|
2023-01-22 04:28:13 +00:00
|
|
|
del image
|
2023-02-17 00:11:35 +00:00
|
|
|
run_gc([job.get_device()])
|
2023-06-26 12:03:06 +00:00
|
|
|
|
2023-06-30 04:06:36 +00:00
|
|
|
# notify the user
|
2023-04-24 22:40:50 +00:00
|
|
|
show_system_toast(f"finished upscale job: {dest}")
|
2023-02-05 13:53:26 +00:00
|
|
|
logger.info("finished upscale job: %s", dest)
|
2023-02-13 23:34:42 +00:00
|
|
|
|
|
|
|
|
|
|
|
def run_blend_pipeline(
|
2023-02-26 05:49:39 +00:00
|
|
|
job: WorkerContext,
|
2023-02-13 23:34:42 +00:00
|
|
|
server: ServerContext,
|
|
|
|
params: ImageParams,
|
|
|
|
size: Size,
|
2023-02-20 14:35:18 +00:00
|
|
|
outputs: List[str],
|
2023-02-13 23:34:42 +00:00
|
|
|
upscale: UpscaleParams,
|
2023-04-22 17:40:51 +00:00
|
|
|
# highres: HighresParams,
|
2023-02-13 23:34:42 +00:00
|
|
|
sources: List[Image.Image],
|
|
|
|
mask: Image.Image,
|
|
|
|
) -> None:
|
2023-06-30 04:06:36 +00:00
|
|
|
# set up the chain pipeline and base stage
|
|
|
|
chain = ChainPipeline()
|
2023-02-13 23:34:42 +00:00
|
|
|
stage = StageParams()
|
2023-07-01 12:10:53 +00:00
|
|
|
chain.stage(BlendMaskStage(), stage, stage_source=sources[1], stage_mask=mask)
|
2023-02-13 23:34:42 +00:00
|
|
|
|
2023-06-30 04:06:36 +00:00
|
|
|
# apply upscaling and correction
|
2023-07-01 02:42:24 +00:00
|
|
|
stage_upscale_correction(
|
2023-02-13 23:34:42 +00:00
|
|
|
stage,
|
|
|
|
params,
|
2023-06-30 04:06:36 +00:00
|
|
|
upscale=upscale,
|
|
|
|
chain=chain,
|
2023-02-13 23:34:42 +00:00
|
|
|
)
|
|
|
|
|
2023-06-30 04:06:36 +00:00
|
|
|
# run and save
|
2023-07-01 03:00:11 +00:00
|
|
|
progress = job.get_progress_callback()
|
2023-07-04 18:56:02 +00:00
|
|
|
images = chain(job, server, params, sources, callback=progress)
|
|
|
|
|
|
|
|
for image, output in zip(images, outputs):
|
|
|
|
dest = save_image(server, output, image, params, size, upscale=upscale)
|
2023-02-13 23:34:42 +00:00
|
|
|
|
2023-06-30 04:06:36 +00:00
|
|
|
# clean up
|
2023-02-13 23:34:42 +00:00
|
|
|
del image
|
2023-02-17 00:11:35 +00:00
|
|
|
run_gc([job.get_device()])
|
2023-06-26 12:03:06 +00:00
|
|
|
|
2023-06-30 04:06:36 +00:00
|
|
|
# notify the user
|
2023-04-24 22:40:50 +00:00
|
|
|
show_system_toast(f"finished blend job: {dest}")
|
2023-02-13 23:34:42 +00:00
|
|
|
logger.info("finished blend job: %s", dest)
|