File size: 4,074 Bytes
1984062
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
169eedd
1984062
169eedd
d1bd5a2
169eedd
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1984062
 
169eedd
8df07de
 
 
 
 
 
1984062
f1d2081
da8050a
8da347e
1984062
 
 
 
f1d2081
 
 
1984062
 
8da347e
1984062
 
 
 
 
87c53b4
1984062
 
 
87c53b4
1984062
 
 
 
 
 
 
 
 
 
05282fa
1984062
87c53b4
1984062
 
 
 
87c53b4
 
 
 
 
 
 
 
1984062
 
 
 
098495b
 
1984062
 
 
 
 
 
 
 
 
 
 
 
8ef4215
03fbf82
1984062
 
 
 
 
 
 
 
8da347e
1984062
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
346b2e6
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
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
from pathlib import Path

import gradio as gr
import pi_heif
import spaces
import requests
import base64
import io
import os
import json
from huggingface_hub import hf_hub_download
from PIL import Image

css = """
footer {display: none !important;}
"""

TITLE = """
<p>
    Erase unwanted watermarks automatically with AI — no manual editing needed.
</p>
<div style="margin-top: 12px; text-align: left;">
  <a href="https://faceseek.online/" target="_blank" style="text-decoration: none;">
    <button style="
      background-color: #4CAF50;
      color: white;
      font-weight: bold;
      border: none;
      padding: 10px 18px;
      font-size: 14px;
      border-radius: 8px;
      cursor: pointer;
      box-shadow: 0 4px 6px rgba(0,0,0,0.15);
      transition: all 0.2s ease;
    " onmouseover="this.style.backgroundColor='#45a049'" 
       onmouseout="this.style.backgroundColor='#4CAF50'">
      🚀 Discover More Free AI Tools
    </button>
  </a>
</div>
"""


# <p>
#     For premium-quality results,
#     <a href="https://nowatermark.cloud">try NoWatermark API</a>
#     — it's free to test!
# </p>

LIKE_BUTTON = """
<div style="text-align: left; margin: 5px 0 0 0;">
  <a href="https://huggingface.co/spaces/abdul9999/NoWatermark" target="_blank"
     style="text-decoration: none;">
    <button style="
      background-color: #ff4081;
      color: white;
      border: none;
      padding: 4px 10px;
      font-size: 13px;
      border-radius: 6px;
      cursor: pointer;
    ">
      ❤️ Like
    </button>
  </a>
</div>
"""

# HEADERS = os.getenv("HEADERS")
API_HOST = os.getenv("API_HOST")

def remove_watermark(img_bytes):
    """
    headers = json.loads(HEADERS)

    files = {
        "original_preview_image": ("1.webp", img_bytes, "image/webp"),
    }

    data = {
        "zoom_factor": 1,
        "predict_mode": "old",
    }
    
    resp = requests.post(
        API_HOST,
        headers=headers,
        files=files,
        data=data,
    )
    """
    files = {"file": ("input_image.webp", img_bytes, "image/webp")}
    
    resp = requests.post(
        API_HOST,
        files=files,
    )
    
    if resp.status_code != 200:
        print(f"Error: {resp.status_code} - {resp.text}")
        return None

    result_img = Image.open(io.BytesIO(resp.content)).convert("RGB")
    return result_img

def process(input_image):
    """
    input_image: PIL.Image from Gradio
    returns: PIL.Image (dewatermarked)
    """
    # Convert PIL image to bytes (WebP, since your API expects webp)
    img_bytes_io = io.BytesIO()
    input_image.save(img_bytes_io, format="WEBP")
    img_bytes = img_bytes_io.getvalue()

    # Call your dewatermark function
    result_img = remove_watermark(img_bytes)
    if result_img is None:
        return [input_image, input_image]
        # return None  # or return input_image as fallback

    # Convert bytes back to PIL image
    return [input_image, result_img]
    
with gr.Blocks(css=css) as demo:
    gr.HTML(LIKE_BUTTON)
    gr.HTML(TITLE)

    with gr.Row():
        with gr.Column():
            input_image = gr.Image(type="pil", label="Input Image")
            run_button = gr.ClearButton(components=None, value="Remove Watermark")
        with gr.Column():
            output_slider = gr.ImageSlider(label="Before / After", max_height=1200, show_fullscreen_button=False)
            run_button.add(output_slider)

    run_button.click(fn=process, inputs=input_image, outputs=output_slider, api_name=False)

    gr.Examples(
        examples=[
            "examples/1.jpg",
            "examples/2.jpg",
            "examples/3.jpg",
            "examples/4.jpg",
            "examples/5.jpg",
            "examples/6.jpg",
            "examples/7.jpg",
            "examples/8.jpg",
            "examples/9.jpg",
            "examples/10.jpg",
        ],
        inputs=[input_image],
        outputs=output_slider,
        fn=process,
        cache_examples=True,
        cache_mode="lazy",
        run_on_click=False,
    )

demo.launch(share=False, ssr_mode=False, show_api=False)