Pierre Chapuis commited on
Commit
351f2e7
·
unverified ·
1 Parent(s): f7624e7

update to Gradio 5

Browse files
Files changed (6) hide show
  1. .gitignore +1 -1
  2. README.md +1 -1
  3. pyproject.toml +2 -3
  4. requirements.lock +41 -57
  5. requirements.txt +2 -3
  6. src/app.py +4 -3
.gitignore CHANGED
@@ -1,4 +1,4 @@
1
- gradio_cached_examples/
2
  requirements-dev.lock
3
 
4
  # https://github.com/github/gitignore/blob/main/Python.gitignore
 
1
+ .gradio/
2
  requirements-dev.lock
3
 
4
  # https://github.com/github/gitignore/blob/main/Python.gitignore
README.md CHANGED
@@ -4,7 +4,7 @@ emoji: 🧽
4
  colorFrom: gray
5
  colorTo: blue
6
  sdk: gradio
7
- sdk_version: 4.44.1
8
  python_version: 3.12
9
  app_file: src/app.py
10
  pinned: false
 
4
  colorFrom: gray
5
  colorTo: blue
6
  sdk: gradio
7
+ sdk_version: 5.27.1
8
  python_version: 3.12
9
  app_file: src/app.py
10
  pinned: false
pyproject.toml CHANGED
@@ -6,13 +6,12 @@ authors = [
6
  { name = "Pierre Chapuis", email = "[email protected]" }
7
  ]
8
  dependencies = [
9
- "gradio>=4.41.0,<5", # gradio-imageslider requires <5
10
  "environs>=11.0.0",
11
  "gradio-image-annotation>=0.2.5",
12
  "pillow>=10.4.0",
13
- "gradio-imageslider>=0.0.20",
14
  "pillow-heif>=0.18.0",
15
- "finegrain @ git+ssh://[email protected]/finegrain-ai/finegrain-python@7f397f68d6a1bf7d5a567500dfdaf02ed462649d#subdirectory=finegrain",
16
  ]
17
  readme = "README.md"
18
  requires-python = ">= 3.12, <3.13"
 
6
  { name = "Pierre Chapuis", email = "[email protected]" }
7
  ]
8
  dependencies = [
9
+ "gradio>=5.27.1",
10
  "environs>=11.0.0",
11
  "gradio-image-annotation>=0.2.5",
12
  "pillow>=10.4.0",
 
13
  "pillow-heif>=0.18.0",
14
+ "finegrain @ git+ssh://[email protected]/finegrain-ai/finegrain-python@22ac482d547548fd56816b1a01385256804e1dee#subdirectory=finegrain",
15
  ]
16
  readme = "README.md"
17
  requires-python = ">= 3.12, <3.13"
requirements.lock CHANGED
@@ -10,15 +10,15 @@
10
  # universal: false
11
 
12
  -e file:.
13
- aiofiles==23.2.1
14
  # via gradio
15
  annotated-types==0.7.0
16
  # via pydantic
17
- anyio==4.8.0
18
  # via gradio
19
  # via httpx
20
  # via starlette
21
- certifi==2025.1.31
22
  # via httpcore
23
  # via httpx
24
  # via requests
@@ -27,121 +27,102 @@ charset-normalizer==3.4.1
27
  click==8.1.8
28
  # via typer
29
  # via uvicorn
30
- contourpy==1.3.1
31
- # via matplotlib
32
- cycler==0.12.1
33
- # via matplotlib
34
  environs==14.1.1
35
  # via eraser
36
- fastapi==0.115.11
37
  # via gradio
38
  ffmpy==0.5.0
39
  # via gradio
40
  filelock==3.18.0
41
  # via huggingface-hub
42
- finegrain @ git+ssh://[email protected]/finegrain-ai/finegrain-python@7f397f68d6a1bf7d5a567500dfdaf02ed462649d#subdirectory=finegrain
43
  # via eraser
44
- fonttools==4.56.0
45
- # via matplotlib
46
- fsspec==2025.3.0
47
  # via gradio-client
48
  # via huggingface-hub
49
- gradio==4.44.1
50
  # via eraser
51
  # via gradio-image-annotation
52
- # via gradio-imageslider
53
- gradio-client==1.3.0
54
  # via gradio
55
  gradio-image-annotation==0.2.6
56
  # via eraser
57
- gradio-imageslider==0.0.20
58
- # via eraser
59
- h11==0.14.0
60
  # via httpcore
61
  # via uvicorn
62
- httpcore==1.0.7
63
  # via httpx
64
  httpx==0.28.1
65
  # via finegrain
66
  # via gradio
67
  # via gradio-client
 
68
  httpx-sse==0.4.0
69
  # via finegrain
70
- huggingface-hub==0.29.3
71
  # via gradio
72
  # via gradio-client
73
  idna==3.10
74
  # via anyio
75
  # via httpx
76
  # via requests
77
- importlib-resources==6.5.2
78
- # via gradio
79
  jinja2==3.1.6
80
  # via gradio
81
- kiwisolver==1.4.8
82
- # via matplotlib
83
  markdown-it-py==3.0.0
84
  # via rich
85
- markupsafe==2.1.5
86
  # via gradio
87
  # via jinja2
88
- marshmallow==3.26.1
89
  # via environs
90
- matplotlib==3.10.1
91
- # via gradio
92
  mdurl==0.1.2
93
  # via markdown-it-py
94
- numpy==2.2.3
95
- # via contourpy
96
  # via gradio
97
- # via matplotlib
98
  # via pandas
99
- orjson==3.10.15
100
  # via gradio
101
- packaging==24.2
102
  # via gradio
103
  # via gradio-client
104
  # via huggingface-hub
105
- # via marshmallow
106
- # via matplotlib
107
  pandas==2.2.3
108
  # via gradio
109
- pillow==10.4.0
110
  # via eraser
111
  # via gradio
112
- # via gradio-imageslider
113
- # via matplotlib
114
  # via pillow-heif
115
- pillow-heif==0.21.0
116
  # via eraser
117
- pydantic==2.10.6
118
  # via fastapi
119
  # via gradio
120
- pydantic-core==2.27.2
121
  # via pydantic
122
  pydub==0.25.1
123
  # via gradio
124
  pygments==2.19.1
125
  # via rich
126
- pyparsing==3.2.1
127
- # via matplotlib
128
  python-dateutil==2.9.0.post0
129
- # via matplotlib
130
  # via pandas
131
- python-dotenv==1.0.1
132
  # via environs
133
  python-multipart==0.0.20
134
  # via gradio
135
- pytz==2025.1
136
  # via pandas
137
  pyyaml==6.0.2
138
  # via gradio
139
  # via huggingface-hub
140
  requests==2.32.3
141
  # via huggingface-hub
142
- rich==13.9.4
143
  # via typer
144
- ruff==0.11.0
 
 
145
  # via gradio
146
  semantic-version==2.10.0
147
  # via gradio
@@ -151,15 +132,16 @@ six==1.17.0
151
  # via python-dateutil
152
  sniffio==1.3.1
153
  # via anyio
154
- starlette==0.46.1
155
  # via fastapi
156
- tomlkit==0.12.0
 
157
  # via gradio
158
  tqdm==4.67.1
159
  # via huggingface-hub
160
- typer==0.15.2
161
  # via gradio
162
- typing-extensions==4.12.2
163
  # via anyio
164
  # via fastapi
165
  # via gradio
@@ -168,12 +150,14 @@ typing-extensions==4.12.2
168
  # via pydantic
169
  # via pydantic-core
170
  # via typer
171
- tzdata==2025.1
 
 
 
172
  # via pandas
173
- urllib3==2.3.0
174
- # via gradio
175
  # via requests
176
- uvicorn==0.34.0
177
  # via gradio
178
- websockets==12.0
179
  # via gradio-client
 
10
  # universal: false
11
 
12
  -e file:.
13
+ aiofiles==24.1.0
14
  # via gradio
15
  annotated-types==0.7.0
16
  # via pydantic
17
+ anyio==4.9.0
18
  # via gradio
19
  # via httpx
20
  # via starlette
21
+ certifi==2025.4.26
22
  # via httpcore
23
  # via httpx
24
  # via requests
 
27
  click==8.1.8
28
  # via typer
29
  # via uvicorn
 
 
 
 
30
  environs==14.1.1
31
  # via eraser
32
+ fastapi==0.115.12
33
  # via gradio
34
  ffmpy==0.5.0
35
  # via gradio
36
  filelock==3.18.0
37
  # via huggingface-hub
38
+ finegrain @ git+ssh://[email protected]/finegrain-ai/finegrain-python@22ac482d547548fd56816b1a01385256804e1dee#subdirectory=finegrain
39
  # via eraser
40
+ fsspec==2025.3.2
 
 
41
  # via gradio-client
42
  # via huggingface-hub
43
+ gradio==5.27.1
44
  # via eraser
45
  # via gradio-image-annotation
46
+ gradio-client==1.9.1
 
47
  # via gradio
48
  gradio-image-annotation==0.2.6
49
  # via eraser
50
+ groovy==0.1.2
51
+ # via gradio
52
+ h11==0.16.0
53
  # via httpcore
54
  # via uvicorn
55
+ httpcore==1.0.9
56
  # via httpx
57
  httpx==0.28.1
58
  # via finegrain
59
  # via gradio
60
  # via gradio-client
61
+ # via safehttpx
62
  httpx-sse==0.4.0
63
  # via finegrain
64
+ huggingface-hub==0.30.2
65
  # via gradio
66
  # via gradio-client
67
  idna==3.10
68
  # via anyio
69
  # via httpx
70
  # via requests
 
 
71
  jinja2==3.1.6
72
  # via gradio
 
 
73
  markdown-it-py==3.0.0
74
  # via rich
75
+ markupsafe==3.0.2
76
  # via gradio
77
  # via jinja2
78
+ marshmallow==4.0.0
79
  # via environs
 
 
80
  mdurl==0.1.2
81
  # via markdown-it-py
82
+ numpy==2.2.5
 
83
  # via gradio
 
84
  # via pandas
85
+ orjson==3.10.16
86
  # via gradio
87
+ packaging==25.0
88
  # via gradio
89
  # via gradio-client
90
  # via huggingface-hub
 
 
91
  pandas==2.2.3
92
  # via gradio
93
+ pillow==11.2.1
94
  # via eraser
95
  # via gradio
 
 
96
  # via pillow-heif
97
+ pillow-heif==0.22.0
98
  # via eraser
99
+ pydantic==2.11.3
100
  # via fastapi
101
  # via gradio
102
+ pydantic-core==2.33.1
103
  # via pydantic
104
  pydub==0.25.1
105
  # via gradio
106
  pygments==2.19.1
107
  # via rich
 
 
108
  python-dateutil==2.9.0.post0
 
109
  # via pandas
110
+ python-dotenv==1.1.0
111
  # via environs
112
  python-multipart==0.0.20
113
  # via gradio
114
+ pytz==2025.2
115
  # via pandas
116
  pyyaml==6.0.2
117
  # via gradio
118
  # via huggingface-hub
119
  requests==2.32.3
120
  # via huggingface-hub
121
+ rich==14.0.0
122
  # via typer
123
+ ruff==0.11.7
124
+ # via gradio
125
+ safehttpx==0.1.6
126
  # via gradio
127
  semantic-version==2.10.0
128
  # via gradio
 
132
  # via python-dateutil
133
  sniffio==1.3.1
134
  # via anyio
135
+ starlette==0.46.2
136
  # via fastapi
137
+ # via gradio
138
+ tomlkit==0.13.2
139
  # via gradio
140
  tqdm==4.67.1
141
  # via huggingface-hub
142
+ typer==0.15.3
143
  # via gradio
144
+ typing-extensions==4.13.2
145
  # via anyio
146
  # via fastapi
147
  # via gradio
 
150
  # via pydantic
151
  # via pydantic-core
152
  # via typer
153
+ # via typing-inspection
154
+ typing-inspection==0.4.0
155
+ # via pydantic
156
+ tzdata==2025.2
157
  # via pandas
158
+ urllib3==2.4.0
 
159
  # via requests
160
+ uvicorn==0.34.2
161
  # via gradio
162
+ websockets==15.0.1
163
  # via gradio-client
requirements.txt CHANGED
@@ -1,7 +1,6 @@
1
  gradio_image_annotation>=0.2.5
2
- gradio_imageslider>=0.0.20
3
  environs>=11.0.0
4
  pillow>=10.4.0
5
  pillow-heif>=0.18.0
6
- git+https://github.com/finegrain-ai/finegrain-python@7f397f68d6a1bf7d5a567500dfdaf02ed462649d#subdirectory=finegrain
7
- pydantic==2.10.6
 
1
  gradio_image_annotation>=0.2.5
 
2
  environs>=11.0.0
3
  pillow>=10.4.0
4
  pillow-heif>=0.18.0
5
+ git+https://github.com/finegrain-ai/finegrain-python@22ac482d547548fd56816b1a01385256804e1dee#subdirectory=finegrain
6
+ pydantic==2.10.6
src/app.py CHANGED
@@ -8,7 +8,6 @@ import pillow_heif
8
  from environs import Env
9
  from finegrain import BoundingBox, EditorAPIContext, EraseResultWithImage, ErrorResult
10
  from gradio_image_annotation import image_annotator
11
- from gradio_imageslider import ImageSlider
12
  from PIL import Image
13
  from typing_extensions import TypeIs
14
 
@@ -88,6 +87,7 @@ async def _process(ctx: EditorAPIContext, params: ProcessParams) -> Image.Image:
88
  f.seek(0)
89
  return Image.open(f)
90
 
 
91
  def _run(params: ProcessParams) -> Image.Image:
92
  # hotfix for https://huggingface.co/spaces/finegrain/finegrain-object-eraser/discussions/9
93
  # happens because _sse_task is not None in sse_start
@@ -98,6 +98,7 @@ def _run(params: ProcessParams) -> Image.Image:
98
  ctx.reset()
99
  return ctx.run_one_sync(_process, params)
100
 
 
101
  def process_bbox(prompts: dict[str, Any]) -> tuple[Image.Image, Image.Image]:
102
  assert isinstance(img := prompts["image"], Image.Image)
103
  assert isinstance(boxes := prompts["boxes"], list)
@@ -158,7 +159,7 @@ with gr.Blocks() as demo:
158
  iimg = gr.Image(type="pil", label="Input")
159
  prompt = gr.Textbox(label="What should we erase?")
160
  with gr.Column():
161
- oimg = ImageSlider(label="Output")
162
  with gr.Row():
163
  btn = gr.ClearButton(components=[oimg], value="Erase Object", interactive=False)
164
 
@@ -229,7 +230,7 @@ with gr.Blocks() as demo:
229
  label="Input",
230
  )
231
  with gr.Column():
232
- oimg = ImageSlider(label="Output")
233
  with gr.Row():
234
  btn = gr.ClearButton(components=[oimg], value="Erase Object", interactive=False)
235
 
 
8
  from environs import Env
9
  from finegrain import BoundingBox, EditorAPIContext, EraseResultWithImage, ErrorResult
10
  from gradio_image_annotation import image_annotator
 
11
  from PIL import Image
12
  from typing_extensions import TypeIs
13
 
 
87
  f.seek(0)
88
  return Image.open(f)
89
 
90
+
91
  def _run(params: ProcessParams) -> Image.Image:
92
  # hotfix for https://huggingface.co/spaces/finegrain/finegrain-object-eraser/discussions/9
93
  # happens because _sse_task is not None in sse_start
 
98
  ctx.reset()
99
  return ctx.run_one_sync(_process, params)
100
 
101
+
102
  def process_bbox(prompts: dict[str, Any]) -> tuple[Image.Image, Image.Image]:
103
  assert isinstance(img := prompts["image"], Image.Image)
104
  assert isinstance(boxes := prompts["boxes"], list)
 
159
  iimg = gr.Image(type="pil", label="Input")
160
  prompt = gr.Textbox(label="What should we erase?")
161
  with gr.Column():
162
+ oimg = gr.ImageSlider(label="Output", max_height=1500, show_fullscreen_button=False)
163
  with gr.Row():
164
  btn = gr.ClearButton(components=[oimg], value="Erase Object", interactive=False)
165
 
 
230
  label="Input",
231
  )
232
  with gr.Column():
233
+ oimg = gr.ImageSlider(label="Output", max_height=1500, show_fullscreen_button=False)
234
  with gr.Row():
235
  btn = gr.ClearButton(components=[oimg], value="Erase Object", interactive=False)
236