File size: 2,660 Bytes
736e070
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
9e45fec
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
736e070
 
9e45fec
 
 
736e070
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
62
63
64
65
66
67
68
69
70
71
72
73
"""Run the interface locally with the models stubbed out, for laying out the UI.

No GPU, no weights, no downloads. The fake zoom just bicubic-enlarges, so the pictures are
meant to be blurry: this is for arranging the page, not for judging output.

    uv run --no-project --python 3.12 --with "gradio==5.50.0" --with spaces --with pillow \
        --with numpy --with imageio --with imageio-ffmpeg python space/dev_ui.py
"""
import os
import sys
import types

from PIL import Image

HERE = os.path.dirname(os.path.abspath(__file__))
sys.path.insert(0, HERE)
os.chdir(HERE)

import geometry  # noqa: E402  (after the path insert, on purpose)

FAKE_PROMPTS = [
    "spotted fur, whiskers, amber eye, fine hairs",
    "dense guard hairs, rosette edge, warm tones",
    "single hair shafts, follicle, soft focus",
    "fine keratin fibre, grain, pale strands",
    "fibre bundle, faint striations",
    "surface texture, low contrast",
    "granular detail, muted",
    "flat texture, little structure",
]


def fake_zoom(models, image, levels=4, upscale=4, center=(0.5, 0.5)):
    cur = geometry.resize_and_center_crop(image)
    yield 0, 1, "", cur, cur
    for i in range(levels):
        blurry = geometry.zoom_window(cur, upscale, center).resize(cur.size, Image.BICUBIC)
        yield i + 1, upscale ** (i + 1), FAKE_PROMPTS[i % len(FAKE_PROMPTS)], blurry, blurry
        cur = blurry


stub = types.ModuleType("zoom")
stub.Models = type("Models", (), {"__init__": lambda self, weights=None: None})
stub.zoom = fake_zoom
sys.modules["zoom"] = stub

import app  # noqa: E402  (must follow the stub)

BANNER = (
    '<div style="background:#7f1d1d;color:#fff;padding:10px 14px;border-radius:8px;'
    'margin:0 0 12px;text-align:center;font-weight:600">'
    'LAYOUT PREVIEW ONLY. The model is stubbed out and every zoom is a plain bicubic '
    'enlargement, so the pictures are meant to look blurry. Judge the layout here, '
    'never the output.</div>'
)


def _add_banner():
    """Say it on the page, not just in the terminal. A blurry zoom here is the stub, not a bug."""
    for block in app.demo.blocks.values():
        if isinstance(block, __import__("gradio").HTML) and "OracleZoom" in str(block.value):
            block.value = BANNER + block.value
            return True
    return False


if __name__ == "__main__":
    port = int(os.environ.get("PORT", "7861"))
    if not _add_banner():
        print("WARNING: could not add the stub banner; the header markup must have changed")
    print(f"stubbed UI on http://127.0.0.1:{port}  (blurry output is expected, it is not the model)")
    app.demo.queue().launch(server_port=port, quiet=True)