Rename util.py to domain.py. Refactor some functions.
This commit is contained in:
parent
b6c26f4616
commit
fd2e8912a4
123
cmd/domain.py
Normal file
123
cmd/domain.py
Normal file
@ -0,0 +1,123 @@
|
||||
"""Utility functions for the script."""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
import secrets
|
||||
import time
|
||||
from datetime import date
|
||||
from pathlib import Path
|
||||
|
||||
|
||||
class Seed:
|
||||
def __init__(self, seed: int) -> None:
|
||||
if seed != -1:
|
||||
self.__value = seed
|
||||
return
|
||||
|
||||
self.__value = self.__generate_seed()
|
||||
|
||||
def __generate_seed(self) -> int:
|
||||
max_limit_value = 4294967295
|
||||
return secrets.randbelow(max_limit_value)
|
||||
|
||||
@property
|
||||
def value(self) -> int:
|
||||
return self.__value
|
||||
|
||||
|
||||
class Prompts:
|
||||
def __init__(
|
||||
self,
|
||||
prompt: str,
|
||||
n_prompt: str,
|
||||
height: int,
|
||||
width: int,
|
||||
samples: int,
|
||||
steps: int,
|
||||
) -> None:
|
||||
if prompt == "":
|
||||
msg = "prompt should not be empty."
|
||||
raise ValueError(msg)
|
||||
|
||||
if n_prompt == "":
|
||||
msg = "n_prompt should not be empty."
|
||||
raise ValueError(msg)
|
||||
|
||||
if height <= 0:
|
||||
msg = "height should be positive."
|
||||
raise ValueError(msg)
|
||||
|
||||
if width <= 0:
|
||||
msg = "width should be positive."
|
||||
raise ValueError(msg)
|
||||
|
||||
if samples <= 0:
|
||||
msg = "samples should be positive."
|
||||
raise ValueError(msg)
|
||||
|
||||
if steps <= 0:
|
||||
msg = "steps should be positive."
|
||||
raise ValueError(msg)
|
||||
|
||||
self.__dict: dict[str, int | str] = {
|
||||
"prompt": prompt,
|
||||
"n_prompt": n_prompt,
|
||||
"height": height,
|
||||
"width": width,
|
||||
"samples": samples,
|
||||
"steps": steps,
|
||||
}
|
||||
|
||||
@property
|
||||
def dict(self) -> dict[str, int | str]:
|
||||
return self.__dict
|
||||
|
||||
|
||||
class OutputDirectory:
|
||||
def __init__(self) -> None:
|
||||
self.__output_directory_name = "outputs"
|
||||
self.__date_today = date.today().strftime("%Y-%m-%d")
|
||||
self.__make_path()
|
||||
|
||||
def __make_path(self) -> None:
|
||||
self.__path = Path(f"{self.__output_directory_name}/{self.__date_today}")
|
||||
|
||||
def make_directory(self) -> Path:
|
||||
"""Make a directory for saving outputs."""
|
||||
if not self.__path.exists():
|
||||
self.__path.mkdir(exist_ok=True, parents=True)
|
||||
|
||||
return self.__path
|
||||
|
||||
|
||||
class StableDiffusionOutputManger:
|
||||
def __init__(self, prompts: Prompts, output_directory: Path) -> None:
|
||||
self.__prompts = prompts
|
||||
self.__output_directory = output_directory
|
||||
|
||||
def save_prompts(self) -> str:
|
||||
"""Save prompts to a file."""
|
||||
prompts_filename = time.strftime("%Y%m%d%H%M%S", time.localtime(time.time()))
|
||||
output_path = f"{self.__output_directory}/prompts_{prompts_filename}.txt"
|
||||
with Path(output_path).open("wb") as file:
|
||||
for name, value in self.__prompts.dict.items():
|
||||
file.write(f"{name} = {value!r}\n".encode())
|
||||
|
||||
return output_path
|
||||
|
||||
def save_image(
|
||||
self,
|
||||
image: bytes,
|
||||
seed: int,
|
||||
i: int,
|
||||
j: int,
|
||||
output_format: str = "png",
|
||||
) -> str:
|
||||
"""Save image to a file."""
|
||||
formatted_time = time.strftime("%Y%m%d%H%M%S", time.localtime(time.time()))
|
||||
filename = f"{formatted_time}_{seed}_{i}_{j}.{output_format}"
|
||||
output_path = f"{self.__output_directory}/{filename}"
|
||||
with Path(output_path).open("wb") as file:
|
||||
file.write(image)
|
||||
|
||||
return output_path
|
||||
55
cmd/util.py
55
cmd/util.py
@ -1,55 +0,0 @@
|
||||
""" Utility functions for the script. """
|
||||
import random
|
||||
import time
|
||||
from datetime import date
|
||||
from pathlib import Path
|
||||
|
||||
OUTPUT_DIRECTORY = "outputs"
|
||||
DATE_TODAY = date.today().strftime("%Y-%m-%d")
|
||||
|
||||
|
||||
def generate_seed() -> int:
|
||||
"""
|
||||
Generate a random seed.
|
||||
"""
|
||||
seed = random.randint(0, 4294967295)
|
||||
print(f"Generate a random seed: {seed}")
|
||||
|
||||
return seed
|
||||
|
||||
|
||||
def make_directory() -> Path:
|
||||
"""
|
||||
Make a directory for saving outputs.
|
||||
"""
|
||||
directory = Path(f"{OUTPUT_DIRECTORY}/{DATE_TODAY}")
|
||||
if not directory.exists():
|
||||
directory.mkdir(exist_ok=True, parents=True)
|
||||
print(f"Make a directory: {directory}")
|
||||
|
||||
return directory
|
||||
|
||||
|
||||
def save_prompts(inputs: dict):
|
||||
"""
|
||||
Save prompts to a file.
|
||||
"""
|
||||
prompts_filename = time.strftime("%Y%m%d%H%M%S", time.localtime(time.time()))
|
||||
with open(
|
||||
file=f"{OUTPUT_DIRECTORY}/{DATE_TODAY}/prompts_{prompts_filename}.txt", mode="w", encoding="utf-8"
|
||||
) as file:
|
||||
for name, value in inputs.items():
|
||||
file.write(f"{name} = {repr(value)}\n")
|
||||
print(f"Save prompts: {prompts_filename}.txt")
|
||||
|
||||
|
||||
def save_images(directory: Path, images: list[bytes], seed: int, i: int, output_format: str = "png"):
|
||||
"""
|
||||
Save images to a file.
|
||||
"""
|
||||
for j, image_bytes in enumerate(images):
|
||||
formatted_time = time.strftime("%Y%m%d%H%M%S", time.localtime(time.time()))
|
||||
output_path = directory / f"{formatted_time}_{seed}_{i}_{j}.{output_format}"
|
||||
print(f"Saving it to {output_path}")
|
||||
with open(output_path, "wb") as file:
|
||||
file.write(image_bytes)
|
||||
Loading…
x
Reference in New Issue
Block a user