File size: 2,603 Bytes
f14de11
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
a17fbe2
f14de11
 
 
 
 
 
 
 
 
 
 
 
 
a17fbe2
f14de11
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
# -*- coding: utf-8 -*-
import base64
import io
import gradio as gr
import iscc_core as ic
import iscc_sdk as idk
import iscc_sci as sci
import iscc_schema as iss
from PIL import Image
import json

idk.sdk_opts.image_thumbnail_size = 240
idk.sdk_opts.image_thumbnail_quality = 80

custom_css = """
.fixed-height img {
    height: 240px;  /* Fixed height */
    object-fit: contain;  /* Scale the image to fit within the element */
}
"""


def generate_iscc(file):
    imeta = idk.code_iscc(file.name)
    thumbnail = None
    if imeta.thumbnail:
        header, encoded = imeta.thumbnail.split(",", 1)
        data = base64.b64decode(encoded)
        thumbnail = Image.open(io.BytesIO(data))
    metadata = imeta.dict(exclude_unset=False, by_alias=True)
    if metadata.get("thumbnail"):
        del metadata["thumbnail"]
    return (
        imeta.iscc,
        thumbnail,
        imeta.name,
        imeta.description,
        json.dumps(metadata, indent=2),
        None,
    )


with gr.Blocks(title="ISCC Generator", css=custom_css) as demo:
    gr.Markdown("## ⚙️ ISCC Generator")
    with gr.Row():
        in_file = gr.File(label="Media File", elem_classes=["fixed-height"])
    with gr.Row():
        out_iscc = gr.Text(
            label="ISCC",
            info="GENERATED FROM MEDIA FILE",
            show_copy_button=True,
            show_label=True,
        )
    with gr.Row(variant="panel", equal_height=False):
        with gr.Column():
            out_thumbnail = gr.Image(
                label="Extracted Thumbnail",
                elem_classes=["fixed-height"],
                height=240,
                show_download_button=False,
            )
        with gr.Column(scale=3):
            with gr.Group():
                out_name = gr.Text(label="Name", show_copy_button=True)
                out_description = gr.Textbox(
                    label="Description", lines=4, max_lines=4, show_copy_button=True
                )

    with gr.Row():
        with gr.Accordion(label="ISCC Metadata", open=False):
            out_meta = gr.Code(language="json", label="JSON-LD")
    in_file.upload(
        generate_iscc,
        inputs=[in_file],
        outputs=[out_iscc, out_thumbnail, out_name, out_description, out_meta, in_file],
    )

    # Custom footer
    footer = (
        "https://github.com/iscc"
        f" | iscc-core v{ic.__version__}"
        f" | iscc-sdk v{idk.__version__}"
        f" | iscc-sci v{sci.__version__}"
        f" | iscc-schema v{iss.__version__}"
    )
    gr.Markdown(
        footer,
    )


if __name__ == "__main__":
    demo.launch()