File size: 1,836 Bytes
abb2753
 
b3e6b4d
abb2753
b3e6b4d
ff91eea
abb2753
dbd3377
bc176b7
16c06bf
abb2753
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
16c06bf
 
dbd3377
 
 
 
 
 
 
b3e6b4d
 
 
 
 
 
e838dda
ff91eea
 
 
 
 
 
 
 
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
60
61
import click
import dotenv
import segno
from huggingface_hub import InferenceClient
from qrcode_artistic import write_artistic
from segno.consts import ERROR_MAPPING

from myapp.palette import extract_color_clusters, generate_palette_image
from myapp.params import ImageParamType

dotenv.load_dotenv()
client = InferenceClient()


@click.group()
def cli():
    pass


@cli.command()
@click.option("--prompt", required=True)
@click.option("--target", type=click.Path(dir_okay=False), required=True)
@click.option("--model", default="black-forest-labs/FLUX.1-schnell")
@click.option("--width", default=400)
@click.option("--height", default=400)
def generate_image(prompt, target, model, width, height):
    image = client.text_to_image(
        prompt=prompt,
        model=model,
        width=width,
        height=height,
    )

    image.save(target)


@cli.command()
@click.option("--image", type=ImageParamType(), required=True)
@click.option("--target", type=click.Path(dir_okay=False), required=True)
@click.option("--n-colors", default=4)
@click.option("--shade", "shades", default=(0.0,), multiple=True)
def generate_palette(image, target, n_colors, shades):
    k_means = extract_color_clusters(image, n_colors)
    palette = generate_palette_image(k_means, shades=shades)
    palette.save(target)


@cli.command()
@click.option("--text", required=True)
@click.option("--background", type=ImageParamType(), required=True)
@click.option("--target", type=click.Path(dir_okay=False), required=True)
@click.option("--scale", type=click.IntRange(min=3, max=15), default=9)
@click.option("--error", type=click.Choice(list(ERROR_MAPPING)))
def generate_qr_code(text, background, target, scale, error):
    write_artistic(
        segno.make(text, error=error),
        background.filename,
        target,
        scale=scale,
    )