Spaces:
Running
Running
add qr code
Browse files- myapp/app.py +61 -3
- pyproject.toml +5 -0
- requirements.txt +154 -0
- uv.lock +15 -0
myapp/app.py
CHANGED
@@ -1,11 +1,69 @@
|
|
|
|
|
|
|
|
1 |
import gradio as gr
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2 |
|
|
|
|
|
3 |
|
4 |
-
|
5 |
-
|
|
|
|
|
|
|
|
|
|
|
6 |
|
|
|
7 |
|
8 |
-
demo = gr.Interface(fn=greet, inputs="text", outputs="text")
|
9 |
|
10 |
if __name__ == "__main__":
|
11 |
demo.launch()
|
|
|
1 |
+
from pathlib import Path
|
2 |
+
from tempfile import NamedTemporaryFile
|
3 |
+
|
4 |
import gradio as gr
|
5 |
+
import segno
|
6 |
+
from huggingface_hub import InferenceClient
|
7 |
+
from PIL import Image
|
8 |
+
from qrcode_artistic import write_artistic
|
9 |
+
|
10 |
+
if gr.NO_RELOAD:
|
11 |
+
try:
|
12 |
+
import dotenv
|
13 |
+
|
14 |
+
dotenv.load_dotenv()
|
15 |
+
except ImportError:
|
16 |
+
pass
|
17 |
+
|
18 |
+
client = InferenceClient()
|
19 |
+
|
20 |
+
with gr.Blocks() as demo:
|
21 |
+
with gr.Row():
|
22 |
+
with gr.Column():
|
23 |
+
text = gr.Textbox(
|
24 |
+
"https://wheelingvultures.bandcamp.com/album/ep", label="Text"
|
25 |
+
)
|
26 |
+
prompt = gr.Textbox("A vulture in black and white", label="Prompt")
|
27 |
+
button = gr.Button()
|
28 |
+
with gr.Column():
|
29 |
+
background = gr.Image(visible=False, type="filepath")
|
30 |
+
output = gr.Image()
|
31 |
+
|
32 |
+
@gr.on(
|
33 |
+
triggers=[button.click, prompt.submit],
|
34 |
+
inputs=prompt,
|
35 |
+
outputs=background,
|
36 |
+
)
|
37 |
+
def generate_background(prompt):
|
38 |
+
return client.text_to_image(
|
39 |
+
prompt,
|
40 |
+
model="black-forest-labs/FLUX.1-schnell",
|
41 |
+
width=400,
|
42 |
+
height=400,
|
43 |
+
)
|
44 |
+
|
45 |
+
@gr.on(
|
46 |
+
triggers=[background.change, text.submit],
|
47 |
+
inputs=[text, background],
|
48 |
+
outputs=output,
|
49 |
+
)
|
50 |
+
def generate_code(text, background):
|
51 |
+
if background is None:
|
52 |
+
return None
|
53 |
|
54 |
+
qr_code = segno.make(text, error="h")
|
55 |
+
suffix = Path(background).suffix
|
56 |
|
57 |
+
with NamedTemporaryFile(suffix=suffix) as temp_file:
|
58 |
+
write_artistic(
|
59 |
+
qr_code,
|
60 |
+
background=background,
|
61 |
+
target=temp_file,
|
62 |
+
scale=8,
|
63 |
+
)
|
64 |
|
65 |
+
return Image.open(temp_file.name)
|
66 |
|
|
|
67 |
|
68 |
if __name__ == "__main__":
|
69 |
demo.launch()
|
pyproject.toml
CHANGED
@@ -11,5 +11,10 @@ dependencies = [
|
|
11 |
"segno>=1.6.1",
|
12 |
]
|
13 |
|
|
|
|
|
|
|
|
|
|
|
14 |
[tool.setuptools.packages.find]
|
15 |
include = ["myapp"]
|
|
|
11 |
"segno>=1.6.1",
|
12 |
]
|
13 |
|
14 |
+
[project.optional-dependencies]
|
15 |
+
develop = [
|
16 |
+
"python-dotenv>=1.0.1",
|
17 |
+
]
|
18 |
+
|
19 |
[tool.setuptools.packages.find]
|
20 |
include = ["myapp"]
|
requirements.txt
ADDED
@@ -0,0 +1,154 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
# This file was autogenerated by uv via the following command:
|
2 |
+
# uv pip compile pyproject.toml -o requirements.txt
|
3 |
+
aiofiles==23.2.1
|
4 |
+
# via gradio
|
5 |
+
annotated-types==0.7.0
|
6 |
+
# via pydantic
|
7 |
+
anyio==4.8.0
|
8 |
+
# via
|
9 |
+
# gradio
|
10 |
+
# httpx
|
11 |
+
# starlette
|
12 |
+
certifi==2024.12.14
|
13 |
+
# via
|
14 |
+
# httpcore
|
15 |
+
# httpx
|
16 |
+
# requests
|
17 |
+
charset-normalizer==3.4.1
|
18 |
+
# via requests
|
19 |
+
click==8.1.8
|
20 |
+
# via
|
21 |
+
# typer
|
22 |
+
# uvicorn
|
23 |
+
fastapi==0.115.6
|
24 |
+
# via gradio
|
25 |
+
ffmpy==0.5.0
|
26 |
+
# via gradio
|
27 |
+
filelock==3.16.1
|
28 |
+
# via huggingface-hub
|
29 |
+
fsspec==2024.12.0
|
30 |
+
# via
|
31 |
+
# gradio-client
|
32 |
+
# huggingface-hub
|
33 |
+
gradio==5.12.0
|
34 |
+
# via myapp (pyproject.toml)
|
35 |
+
gradio-client==1.5.4
|
36 |
+
# via gradio
|
37 |
+
h11==0.14.0
|
38 |
+
# via
|
39 |
+
# httpcore
|
40 |
+
# uvicorn
|
41 |
+
httpcore==1.0.7
|
42 |
+
# via httpx
|
43 |
+
httpx==0.28.1
|
44 |
+
# via
|
45 |
+
# gradio
|
46 |
+
# gradio-client
|
47 |
+
# safehttpx
|
48 |
+
huggingface-hub==0.27.1
|
49 |
+
# via
|
50 |
+
# myapp (pyproject.toml)
|
51 |
+
# gradio
|
52 |
+
# gradio-client
|
53 |
+
idna==3.10
|
54 |
+
# via
|
55 |
+
# anyio
|
56 |
+
# httpx
|
57 |
+
# requests
|
58 |
+
jinja2==3.1.5
|
59 |
+
# via gradio
|
60 |
+
markdown-it-py==3.0.0
|
61 |
+
# via rich
|
62 |
+
markupsafe==2.1.5
|
63 |
+
# via
|
64 |
+
# gradio
|
65 |
+
# jinja2
|
66 |
+
mdurl==0.1.2
|
67 |
+
# via markdown-it-py
|
68 |
+
numpy==2.2.2
|
69 |
+
# via
|
70 |
+
# gradio
|
71 |
+
# pandas
|
72 |
+
orjson==3.10.15
|
73 |
+
# via gradio
|
74 |
+
packaging==24.2
|
75 |
+
# via
|
76 |
+
# gradio
|
77 |
+
# gradio-client
|
78 |
+
# huggingface-hub
|
79 |
+
pandas==2.2.3
|
80 |
+
# via gradio
|
81 |
+
pillow==11.1.0
|
82 |
+
# via
|
83 |
+
# gradio
|
84 |
+
# qrcode-artistic
|
85 |
+
pydantic==2.10.5
|
86 |
+
# via
|
87 |
+
# fastapi
|
88 |
+
# gradio
|
89 |
+
pydantic-core==2.27.2
|
90 |
+
# via pydantic
|
91 |
+
pydub==0.25.1
|
92 |
+
# via gradio
|
93 |
+
pygments==2.19.1
|
94 |
+
# via rich
|
95 |
+
python-dateutil==2.9.0.post0
|
96 |
+
# via pandas
|
97 |
+
python-multipart==0.0.20
|
98 |
+
# via gradio
|
99 |
+
pytz==2024.2
|
100 |
+
# via pandas
|
101 |
+
pyyaml==6.0.2
|
102 |
+
# via
|
103 |
+
# gradio
|
104 |
+
# huggingface-hub
|
105 |
+
qrcode-artistic==3.0.2
|
106 |
+
# via myapp (pyproject.toml)
|
107 |
+
requests==2.32.3
|
108 |
+
# via huggingface-hub
|
109 |
+
rich==13.9.4
|
110 |
+
# via typer
|
111 |
+
ruff==0.9.2
|
112 |
+
# via gradio
|
113 |
+
safehttpx==0.1.6
|
114 |
+
# via gradio
|
115 |
+
segno==1.6.1
|
116 |
+
# via
|
117 |
+
# myapp (pyproject.toml)
|
118 |
+
# qrcode-artistic
|
119 |
+
semantic-version==2.10.0
|
120 |
+
# via gradio
|
121 |
+
shellingham==1.5.4
|
122 |
+
# via typer
|
123 |
+
six==1.17.0
|
124 |
+
# via python-dateutil
|
125 |
+
sniffio==1.3.1
|
126 |
+
# via anyio
|
127 |
+
starlette==0.41.3
|
128 |
+
# via
|
129 |
+
# fastapi
|
130 |
+
# gradio
|
131 |
+
tomlkit==0.13.2
|
132 |
+
# via gradio
|
133 |
+
tqdm==4.67.1
|
134 |
+
# via huggingface-hub
|
135 |
+
typer==0.15.1
|
136 |
+
# via gradio
|
137 |
+
typing-extensions==4.12.2
|
138 |
+
# via
|
139 |
+
# anyio
|
140 |
+
# fastapi
|
141 |
+
# gradio
|
142 |
+
# gradio-client
|
143 |
+
# huggingface-hub
|
144 |
+
# pydantic
|
145 |
+
# pydantic-core
|
146 |
+
# typer
|
147 |
+
tzdata==2024.2
|
148 |
+
# via pandas
|
149 |
+
urllib3==2.3.0
|
150 |
+
# via requests
|
151 |
+
uvicorn==0.34.0
|
152 |
+
# via gradio
|
153 |
+
websockets==14.2
|
154 |
+
# via gradio-client
|
uv.lock
CHANGED
@@ -364,10 +364,16 @@ dependencies = [
|
|
364 |
{ name = "segno" },
|
365 |
]
|
366 |
|
|
|
|
|
|
|
|
|
|
|
367 |
[package.metadata]
|
368 |
requires-dist = [
|
369 |
{ name = "gradio", specifier = ">=5.12.0" },
|
370 |
{ name = "huggingface-hub", specifier = ">=0.27.1" },
|
|
|
371 |
{ name = "qrcode-artistic", specifier = ">=3.0.2" },
|
372 |
{ name = "segno", specifier = ">=1.6.1" },
|
373 |
]
|
@@ -608,6 +614,15 @@ wheels = [
|
|
608 |
{ url = "https://files.pythonhosted.org/packages/ec/57/56b9bcc3c9c6a792fcbaf139543cee77261f3651ca9da0c93f5c1221264b/python_dateutil-2.9.0.post0-py2.py3-none-any.whl", hash = "sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427", size = 229892 },
|
609 |
]
|
610 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
611 |
[[package]]
|
612 |
name = "python-multipart"
|
613 |
version = "0.0.20"
|
|
|
364 |
{ name = "segno" },
|
365 |
]
|
366 |
|
367 |
+
[package.optional-dependencies]
|
368 |
+
develop = [
|
369 |
+
{ name = "python-dotenv" },
|
370 |
+
]
|
371 |
+
|
372 |
[package.metadata]
|
373 |
requires-dist = [
|
374 |
{ name = "gradio", specifier = ">=5.12.0" },
|
375 |
{ name = "huggingface-hub", specifier = ">=0.27.1" },
|
376 |
+
{ name = "python-dotenv", marker = "extra == 'develop'", specifier = ">=1.0.1" },
|
377 |
{ name = "qrcode-artistic", specifier = ">=3.0.2" },
|
378 |
{ name = "segno", specifier = ">=1.6.1" },
|
379 |
]
|
|
|
614 |
{ url = "https://files.pythonhosted.org/packages/ec/57/56b9bcc3c9c6a792fcbaf139543cee77261f3651ca9da0c93f5c1221264b/python_dateutil-2.9.0.post0-py2.py3-none-any.whl", hash = "sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427", size = 229892 },
|
615 |
]
|
616 |
|
617 |
+
[[package]]
|
618 |
+
name = "python-dotenv"
|
619 |
+
version = "1.0.1"
|
620 |
+
source = { registry = "https://pypi.org/simple" }
|
621 |
+
sdist = { url = "https://files.pythonhosted.org/packages/bc/57/e84d88dfe0aec03b7a2d4327012c1627ab5f03652216c63d49846d7a6c58/python-dotenv-1.0.1.tar.gz", hash = "sha256:e324ee90a023d808f1959c46bcbc04446a10ced277783dc6ee09987c37ec10ca", size = 39115 }
|
622 |
+
wheels = [
|
623 |
+
{ url = "https://files.pythonhosted.org/packages/6a/3e/b68c118422ec867fa7ab88444e1274aa40681c606d59ac27de5a5588f082/python_dotenv-1.0.1-py3-none-any.whl", hash = "sha256:f7b63ef50f1b690dddf550d03497b66d609393b40b564ed0d674909a68ebf16a", size = 19863 },
|
624 |
+
]
|
625 |
+
|
626 |
[[package]]
|
627 |
name = "python-multipart"
|
628 |
version = "0.0.20"
|