interactive-pipe 0.7.1__tar.gz → 0.7.2__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {interactive_pipe-0.7.1/src/interactive_pipe.egg-info → interactive_pipe-0.7.2}/PKG-INFO +7 -4
- {interactive_pipe-0.7.1 → interactive_pipe-0.7.2}/pyproject.toml +1 -1
- {interactive_pipe-0.7.1 → interactive_pipe-0.7.2}/readme.md +6 -3
- {interactive_pipe-0.7.1 → interactive_pipe-0.7.2}/src/interactive_pipe/__init__.py +2 -1
- {interactive_pipe-0.7.1 → interactive_pipe-0.7.2}/src/interactive_pipe/core/cache.py +0 -2
- {interactive_pipe-0.7.1 → interactive_pipe-0.7.2}/src/interactive_pipe/core/engine.py +2 -3
- {interactive_pipe-0.7.1 → interactive_pipe-0.7.2}/src/interactive_pipe/data_objects/audio.py +5 -2
- {interactive_pipe-0.7.1 → interactive_pipe-0.7.2}/src/interactive_pipe/graphical/gradio_gui.py +4 -2
- {interactive_pipe-0.7.1 → interactive_pipe-0.7.2}/src/interactive_pipe/graphical/qt_control.py +24 -11
- {interactive_pipe-0.7.1 → interactive_pipe-0.7.2}/src/interactive_pipe/headless/control.py +14 -0
- {interactive_pipe-0.7.1 → interactive_pipe-0.7.2/src/interactive_pipe.egg-info}/PKG-INFO +7 -4
- {interactive_pipe-0.7.1 → interactive_pipe-0.7.2}/LICENSE +0 -0
- {interactive_pipe-0.7.1 → interactive_pipe-0.7.2}/setup.cfg +0 -0
- {interactive_pipe-0.7.1 → interactive_pipe-0.7.2}/src/interactive_pipe/core/__init__.py +0 -0
- {interactive_pipe-0.7.1 → interactive_pipe-0.7.2}/src/interactive_pipe/core/filter.py +0 -0
- {interactive_pipe-0.7.1 → interactive_pipe-0.7.2}/src/interactive_pipe/core/graph.py +0 -0
- {interactive_pipe-0.7.1 → interactive_pipe-0.7.2}/src/interactive_pipe/core/pipeline.py +0 -0
- {interactive_pipe-0.7.1 → interactive_pipe-0.7.2}/src/interactive_pipe/core/signature.py +0 -0
- {interactive_pipe-0.7.1 → interactive_pipe-0.7.2}/src/interactive_pipe/data_objects/__init__.py +0 -0
- {interactive_pipe-0.7.1 → interactive_pipe-0.7.2}/src/interactive_pipe/data_objects/curves.py +0 -0
- {interactive_pipe-0.7.1 → interactive_pipe-0.7.2}/src/interactive_pipe/data_objects/data.py +0 -0
- {interactive_pipe-0.7.1 → interactive_pipe-0.7.2}/src/interactive_pipe/data_objects/image.py +0 -0
- {interactive_pipe-0.7.1 → interactive_pipe-0.7.2}/src/interactive_pipe/data_objects/parameters.py +0 -0
- {interactive_pipe-0.7.1 → interactive_pipe-0.7.2}/src/interactive_pipe/graphical/__init__.py +0 -0
- {interactive_pipe-0.7.1 → interactive_pipe-0.7.2}/src/interactive_pipe/graphical/gradio_control.py +0 -0
- {interactive_pipe-0.7.1 → interactive_pipe-0.7.2}/src/interactive_pipe/graphical/gui.py +0 -0
- {interactive_pipe-0.7.1 → interactive_pipe-0.7.2}/src/interactive_pipe/graphical/mpl_control.py +0 -0
- {interactive_pipe-0.7.1 → interactive_pipe-0.7.2}/src/interactive_pipe/graphical/mpl_gui.py +0 -0
- {interactive_pipe-0.7.1 → interactive_pipe-0.7.2}/src/interactive_pipe/graphical/mpl_window.py +0 -0
- {interactive_pipe-0.7.1 → interactive_pipe-0.7.2}/src/interactive_pipe/graphical/nb_control.py +0 -0
- {interactive_pipe-0.7.1 → interactive_pipe-0.7.2}/src/interactive_pipe/graphical/nb_gui.py +0 -0
- {interactive_pipe-0.7.1 → interactive_pipe-0.7.2}/src/interactive_pipe/graphical/qt_gui.py +0 -0
- {interactive_pipe-0.7.1 → interactive_pipe-0.7.2}/src/interactive_pipe/graphical/window.py +0 -0
- {interactive_pipe-0.7.1 → interactive_pipe-0.7.2}/src/interactive_pipe/headless/__init__.py +0 -0
- {interactive_pipe-0.7.1 → interactive_pipe-0.7.2}/src/interactive_pipe/headless/keyboard.py +0 -0
- {interactive_pipe-0.7.1 → interactive_pipe-0.7.2}/src/interactive_pipe/headless/pipeline.py +0 -0
- {interactive_pipe-0.7.1 → interactive_pipe-0.7.2}/src/interactive_pipe/helper/__init__.py +0 -0
- {interactive_pipe-0.7.1 → interactive_pipe-0.7.2}/src/interactive_pipe/helper/_private.py +0 -0
- {interactive_pipe-0.7.1 → interactive_pipe-0.7.2}/src/interactive_pipe/helper/choose_backend.py +0 -0
- {interactive_pipe-0.7.1 → interactive_pipe-0.7.2}/src/interactive_pipe/helper/control_abbreviation.py +0 -0
- {interactive_pipe-0.7.1 → interactive_pipe-0.7.2}/src/interactive_pipe/helper/filter_decorator.py +0 -0
- {interactive_pipe-0.7.1 → interactive_pipe-0.7.2}/src/interactive_pipe/helper/keyword_args_analyzer.py +0 -0
- {interactive_pipe-0.7.1 → interactive_pipe-0.7.2}/src/interactive_pipe/helper/pipeline_decorator.py +0 -0
- {interactive_pipe-0.7.1 → interactive_pipe-0.7.2}/src/interactive_pipe/thirdparty/images_openai_api.py +0 -0
- {interactive_pipe-0.7.1 → interactive_pipe-0.7.2}/src/interactive_pipe/thirdparty/music_spotify.py +0 -0
- {interactive_pipe-0.7.1 → interactive_pipe-0.7.2}/src/interactive_pipe.egg-info/SOURCES.txt +0 -0
- {interactive_pipe-0.7.1 → interactive_pipe-0.7.2}/src/interactive_pipe.egg-info/dependency_links.txt +0 -0
- {interactive_pipe-0.7.1 → interactive_pipe-0.7.2}/src/interactive_pipe.egg-info/requires.txt +0 -0
- {interactive_pipe-0.7.1 → interactive_pipe-0.7.2}/src/interactive_pipe.egg-info/top_level.txt +0 -0
- {interactive_pipe-0.7.1 → interactive_pipe-0.7.2}/test/test_cache.py +0 -0
- {interactive_pipe-0.7.1 → interactive_pipe-0.7.2}/test/test_control_abbreviations.py +0 -0
- {interactive_pipe-0.7.1 → interactive_pipe-0.7.2}/test/test_controller.py +0 -0
- {interactive_pipe-0.7.1 → interactive_pipe-0.7.2}/test/test_core.py +0 -0
- {interactive_pipe-0.7.1 → interactive_pipe-0.7.2}/test/test_curves.py +0 -0
- {interactive_pipe-0.7.1 → interactive_pipe-0.7.2}/test/test_decorator.py +0 -0
- {interactive_pipe-0.7.1 → interactive_pipe-0.7.2}/test/test_engine.py +0 -0
- {interactive_pipe-0.7.1 → interactive_pipe-0.7.2}/test/test_filter.py +0 -0
- {interactive_pipe-0.7.1 → interactive_pipe-0.7.2}/test/test_headless.py +0 -0
- {interactive_pipe-0.7.1 → interactive_pipe-0.7.2}/test/test_image.py +0 -0
- {interactive_pipe-0.7.1 → interactive_pipe-0.7.2}/test/test_parameters.py +0 -0
- {interactive_pipe-0.7.1 → interactive_pipe-0.7.2}/test/test_recorder.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: interactive_pipe
|
|
3
|
-
Version: 0.7.
|
|
3
|
+
Version: 0.7.2
|
|
4
4
|
Summary: Library to create flexible interactive image processing pipelines and automatically add a graphical user interface without knowing anything about GUI coding!
|
|
5
5
|
Author-email: Balthazar Neveu <balthazarneveu@gmail.com>
|
|
6
6
|
Project-URL: Homepage, https://github.com/balthazarneveu/interactive_pipe
|
|
@@ -95,7 +95,7 @@ pip install -e ".[full]"
|
|
|
95
95
|
|
|
96
96
|
## :scroll: Features
|
|
97
97
|
|
|
98
|
-
**Version 0.7.
|
|
98
|
+
**Version 0.7.2**
|
|
99
99
|
- Modular multi-image processing filters
|
|
100
100
|
- Declarative: Easily make graphical user interface without having to learn anything about pyQt or matplotlib
|
|
101
101
|
- Support in jupyter notebooks
|
|
@@ -103,7 +103,9 @@ pip install -e ".[full]"
|
|
|
103
103
|
- Cache intermediate results in RAM for much faster processing
|
|
104
104
|
- `KeyboardControl` : no slider on UI but exactly the same internal mechanism, update on key press.
|
|
105
105
|
- Support Curve plots (2D signals)
|
|
106
|
-
- :new: gradio backend (+allows sharing with others)
|
|
106
|
+
- :new: gradio backend (+allows sharing with others).
|
|
107
|
+
- :new: Audio support in Gradio
|
|
108
|
+
- :new: Circular sliders for Qt Backend
|
|
107
109
|
|
|
108
110
|
|
|
109
111
|
|
|
@@ -141,8 +143,9 @@ Shortcuts while using the GUI (QT & matplotlib backends)
|
|
|
141
143
|
| Plot curves | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark:|
|
|
142
144
|
| Auto refreshed layout | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_minus_sign: |
|
|
143
145
|
| Keyboard shortcuts / fullscreen| :heavy_check_mark: | :heavy_check_mark: | :heavy_minus_sign: | :heavy_minus_sign: |
|
|
144
|
-
| Audio support | :heavy_check_mark: | :heavy_minus_sign: | :heavy_minus_sign: | :
|
|
146
|
+
| Audio support | :heavy_check_mark: | :heavy_minus_sign: | :heavy_minus_sign: | :heavy_check_mark: |
|
|
145
147
|
| Image buttons| :heavy_check_mark: | :heavy_minus_sign: | :heavy_minus_sign: | :heavy_minus_sign:|
|
|
148
|
+
| Circular slider| :heavy_check_mark: | :heavy_minus_sign: | :heavy_minus_sign: | :heavy_minus_sign:|
|
|
146
149
|
|
|
147
150
|
|
|
148
151
|
|
|
@@ -51,7 +51,7 @@ pip install -e ".[full]"
|
|
|
51
51
|
|
|
52
52
|
## :scroll: Features
|
|
53
53
|
|
|
54
|
-
**Version 0.7.
|
|
54
|
+
**Version 0.7.2**
|
|
55
55
|
- Modular multi-image processing filters
|
|
56
56
|
- Declarative: Easily make graphical user interface without having to learn anything about pyQt or matplotlib
|
|
57
57
|
- Support in jupyter notebooks
|
|
@@ -59,7 +59,9 @@ pip install -e ".[full]"
|
|
|
59
59
|
- Cache intermediate results in RAM for much faster processing
|
|
60
60
|
- `KeyboardControl` : no slider on UI but exactly the same internal mechanism, update on key press.
|
|
61
61
|
- Support Curve plots (2D signals)
|
|
62
|
-
- :new: gradio backend (+allows sharing with others)
|
|
62
|
+
- :new: gradio backend (+allows sharing with others).
|
|
63
|
+
- :new: Audio support in Gradio
|
|
64
|
+
- :new: Circular sliders for Qt Backend
|
|
63
65
|
|
|
64
66
|
|
|
65
67
|
|
|
@@ -97,8 +99,9 @@ Shortcuts while using the GUI (QT & matplotlib backends)
|
|
|
97
99
|
| Plot curves | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark:|
|
|
98
100
|
| Auto refreshed layout | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_minus_sign: |
|
|
99
101
|
| Keyboard shortcuts / fullscreen| :heavy_check_mark: | :heavy_check_mark: | :heavy_minus_sign: | :heavy_minus_sign: |
|
|
100
|
-
| Audio support | :heavy_check_mark: | :heavy_minus_sign: | :heavy_minus_sign: | :
|
|
102
|
+
| Audio support | :heavy_check_mark: | :heavy_minus_sign: | :heavy_minus_sign: | :heavy_check_mark: |
|
|
101
103
|
| Image buttons| :heavy_check_mark: | :heavy_minus_sign: | :heavy_minus_sign: | :heavy_minus_sign:|
|
|
104
|
+
| Circular slider| :heavy_check_mark: | :heavy_minus_sign: | :heavy_minus_sign: | :heavy_minus_sign:|
|
|
102
105
|
|
|
103
106
|
|
|
104
107
|
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
from interactive_pipe.helper.pipeline_decorator import pipeline, interactive_pipeline
|
|
2
|
-
from interactive_pipe.headless.control import Control
|
|
2
|
+
from interactive_pipe.headless.control import Control, CircularControl
|
|
3
|
+
from interactive_pipe.data_objects.curves import Curve, SingleCurve
|
|
3
4
|
from interactive_pipe.headless.keyboard import KeyboardControl
|
|
4
5
|
from interactive_pipe.helper.filter_decorator import interactive, interact
|
|
@@ -48,8 +48,6 @@ class CachedResults:
|
|
|
48
48
|
:param new_params: The new parameters to check.
|
|
49
49
|
:return: True if an update is needed or False otherwise.
|
|
50
50
|
"""
|
|
51
|
-
if self.result is None: # if no result force initialization
|
|
52
|
-
self.force_change = True
|
|
53
51
|
change_state_from_params_check = self.state_change.has_changed(
|
|
54
52
|
new_params)
|
|
55
53
|
if self.force_change:
|
|
@@ -58,11 +58,10 @@ class PipelineEngine:
|
|
|
58
58
|
if prc.inputs:
|
|
59
59
|
routing_in = [
|
|
60
60
|
result[idi] if idi is not None else None for idi in prc.inputs]
|
|
61
|
-
logging.debug("in types->
|
|
62
|
-
for inp in routing_in])
|
|
61
|
+
logging.debug(f"in types-> {[type(inp) for inp in routing_in]}")
|
|
63
62
|
out = prc.run(*routing_in)
|
|
64
63
|
if out is not None:
|
|
65
|
-
logging.debug("out types->
|
|
64
|
+
logging.debug(f"out types-> {[type(ou) for ou in out]}")
|
|
66
65
|
except Exception as e:
|
|
67
66
|
logging.error(f'Error in {prc.name} filter:')
|
|
68
67
|
logging.error(e)
|
{interactive_pipe-0.7.1 → interactive_pipe-0.7.2}/src/interactive_pipe/data_objects/audio.py
RENAMED
|
@@ -12,7 +12,7 @@ except ImportError:
|
|
|
12
12
|
logging.info("Cannot import wavio")
|
|
13
13
|
|
|
14
14
|
|
|
15
|
-
def audio_to_html(audio: Union[None, str, Path, Tuple[int, np.ndarray]]) -> str:
|
|
15
|
+
def audio_to_html(audio: Union[None, str, Path, Tuple[int, np.ndarray]], controls=True) -> str:
|
|
16
16
|
if audio is None:
|
|
17
17
|
logging.debug("No audio to display")
|
|
18
18
|
return ""
|
|
@@ -27,6 +27,9 @@ def audio_to_html(audio: Union[None, str, Path, Tuple[int, np.ndarray]]) -> str:
|
|
|
27
27
|
wavio.write(audio_bytes, audio[1].astype(np.float32), audio[0], sampwidth=4)
|
|
28
28
|
audio_bytes.seek(0)
|
|
29
29
|
audio_base64 = base64.b64encode(audio_bytes.read()).decode("utf-8")
|
|
30
|
-
audio_player = f'<audio src="data:audio/mpeg;base64,{audio_base64}"
|
|
30
|
+
audio_player = f'<audio src="data:audio/mpeg;base64,{audio_base64}"'
|
|
31
|
+
if controls:
|
|
32
|
+
audio_player += ' controls'
|
|
33
|
+
audio_player += ' autoplay></audio>'
|
|
31
34
|
|
|
32
35
|
return audio_player
|
{interactive_pipe-0.7.1 → interactive_pipe-0.7.2}/src/interactive_pipe/graphical/gradio_gui.py
RENAMED
|
@@ -150,13 +150,15 @@ class MainWindow(InteractivePipeWindow):
|
|
|
150
150
|
# Gradio Blocks mode
|
|
151
151
|
# https://www.gradio.app/guides/blocks-and-event-listeners
|
|
152
152
|
with gr.Blocks() as io:
|
|
153
|
-
if self.audio:
|
|
154
|
-
outputs.append(self.audio)
|
|
155
153
|
with gr.Row(variant="compact"):
|
|
156
154
|
gr.Markdown("### " + self.name.replace("_", " "))
|
|
157
155
|
with gr.Row():
|
|
158
156
|
for elem in outputs:
|
|
159
157
|
elem.render()
|
|
158
|
+
if self.audio:
|
|
159
|
+
outputs.append(self.audio)
|
|
160
|
+
with gr.Row():
|
|
161
|
+
self.audio.render()
|
|
160
162
|
|
|
161
163
|
if self.sliders_layout is None:
|
|
162
164
|
self.sliders_layout = "collapsible"
|
{interactive_pipe-0.7.1 → interactive_pipe-0.7.2}/src/interactive_pipe/graphical/qt_control.py
RENAMED
|
@@ -8,14 +8,14 @@ PYQTVERSION = None
|
|
|
8
8
|
|
|
9
9
|
if not PYQTVERSION:
|
|
10
10
|
try:
|
|
11
|
-
from PyQt6.QtWidgets import QWidget, QLabel, QSlider, QHBoxLayout, QLineEdit, QComboBox, QCheckBox, QPushButton, QHBoxLayout
|
|
11
|
+
from PyQt6.QtWidgets import QWidget, QLabel, QSlider, QHBoxLayout, QLineEdit, QComboBox, QCheckBox, QPushButton, QHBoxLayout, QDial
|
|
12
12
|
from PyQt6.QtCore import Qt, QSize
|
|
13
13
|
from PyQt6.QtGui import QIcon
|
|
14
14
|
PYQTVERSION = 6
|
|
15
15
|
except ImportError:
|
|
16
16
|
logging.warning("Cannot import PyQt")
|
|
17
17
|
try:
|
|
18
|
-
from PyQt5.QtWidgets import QWidget, QLabel, QSlider, QHBoxLayout, QLineEdit, QComboBox, QCheckBox, QPushButton, QHBoxLayout
|
|
18
|
+
from PyQt5.QtWidgets import QWidget, QLabel, QSlider, QHBoxLayout, QLineEdit, QComboBox, QCheckBox, QPushButton, QHBoxLayout, QDial
|
|
19
19
|
from PyQt5.QtCore import Qt, QSize
|
|
20
20
|
from PyQt5.QtGui import QIcon
|
|
21
21
|
PYQTVERSION = 5
|
|
@@ -23,7 +23,7 @@ if not PYQTVERSION:
|
|
|
23
23
|
raise ModuleNotFoundError("No PyQt")
|
|
24
24
|
if not PYQTVERSION:
|
|
25
25
|
try:
|
|
26
|
-
from PySide6.QtWidgets import QWidget, QLabel, QSlider, QHBoxLayout, QLineEdit, QComboBox, QCheckBox, QPushButton, QHBoxLayout
|
|
26
|
+
from PySide6.QtWidgets import QWidget, QLabel, QSlider, QHBoxLayout, QLineEdit, QComboBox, QCheckBox, QPushButton, QHBoxLayout, QDial
|
|
27
27
|
from PySide6.QtCore import Qt, QSize
|
|
28
28
|
from PySide6.QtGui import QIcon
|
|
29
29
|
PYQTVERSION = 6
|
|
@@ -86,8 +86,17 @@ class IntSliderControl(BaseControl):
|
|
|
86
86
|
assert self.ctrl._type == int
|
|
87
87
|
|
|
88
88
|
def create(self):
|
|
89
|
-
|
|
90
|
-
|
|
89
|
+
if self.silent:
|
|
90
|
+
slider_class = SilentSlider
|
|
91
|
+
slider = slider_class(Qt.Orientation.Horizontal, self)
|
|
92
|
+
else:
|
|
93
|
+
if hasattr(self.ctrl, 'modulo') and self.ctrl.modulo:
|
|
94
|
+
slider_class = QDial
|
|
95
|
+
slider = slider_class(self)
|
|
96
|
+
else:
|
|
97
|
+
slider_class = QSlider
|
|
98
|
+
slider = slider_class(Qt.Orientation.Horizontal, self)
|
|
99
|
+
|
|
91
100
|
slider.setRange(self.ctrl.value_range[0], self.ctrl.value_range[1])
|
|
92
101
|
slider.setValue(self.ctrl.value_default)
|
|
93
102
|
slider.setSingleStep(1)
|
|
@@ -112,12 +121,16 @@ class FloatSliderControl(BaseControl):
|
|
|
112
121
|
return self.ctrl.value_range[0] + (self.ctrl.value_range[1]-self.ctrl.value_range[0])*val/1000
|
|
113
122
|
|
|
114
123
|
def create(self):
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
124
|
+
if self.silent:
|
|
125
|
+
slider_class = SilentSlider
|
|
126
|
+
slider = slider_class(Qt.Orientation.Horizontal, self)
|
|
127
|
+
else:
|
|
128
|
+
if hasattr(self.ctrl, 'modulo') and self.ctrl.modulo:
|
|
129
|
+
slider_class = QDial
|
|
130
|
+
slider = slider_class(self)
|
|
131
|
+
else:
|
|
132
|
+
slider_class = QSlider
|
|
133
|
+
slider = slider_class(Qt.Orientation.Horizontal, self)
|
|
121
134
|
self.ctrl.convert_int_to_value = self.convert_int_to_value
|
|
122
135
|
slider.setRange(self.convert_value_to_int(
|
|
123
136
|
self.ctrl.value_range[0]), self.convert_value_to_int(self.ctrl.value_range[1]))
|
|
@@ -143,3 +143,17 @@ class Control():
|
|
|
143
143
|
self.update_param_func = update_param_func
|
|
144
144
|
self.parameter_name_to_connect = parameter_name
|
|
145
145
|
self.filter_to_connect = filter
|
|
146
|
+
|
|
147
|
+
|
|
148
|
+
class CircularControl(Control):
|
|
149
|
+
"""
|
|
150
|
+
Replace a slider by a circular slider
|
|
151
|
+
"""
|
|
152
|
+
|
|
153
|
+
def __init__(self, value_default: Union[int, float, bool, str], value_range: List[Union[int, float, str]] = None, modulo=True, name=None, step=None, filter_to_connect: Optional[FilterCore] = None, parameter_name_to_connect: Optional[str] = None) -> None:
|
|
154
|
+
super().__init__(value_default=value_default, value_range=value_range, name=name, step=step,
|
|
155
|
+
filter_to_connect=filter_to_connect, parameter_name_to_connect=parameter_name_to_connect, icons=None)
|
|
156
|
+
self.modulo = modulo
|
|
157
|
+
|
|
158
|
+
def __repr__(self) -> str:
|
|
159
|
+
return super().__repr__() + f"| modulo:{self.modulo}"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: interactive_pipe
|
|
3
|
-
Version: 0.7.
|
|
3
|
+
Version: 0.7.2
|
|
4
4
|
Summary: Library to create flexible interactive image processing pipelines and automatically add a graphical user interface without knowing anything about GUI coding!
|
|
5
5
|
Author-email: Balthazar Neveu <balthazarneveu@gmail.com>
|
|
6
6
|
Project-URL: Homepage, https://github.com/balthazarneveu/interactive_pipe
|
|
@@ -95,7 +95,7 @@ pip install -e ".[full]"
|
|
|
95
95
|
|
|
96
96
|
## :scroll: Features
|
|
97
97
|
|
|
98
|
-
**Version 0.7.
|
|
98
|
+
**Version 0.7.2**
|
|
99
99
|
- Modular multi-image processing filters
|
|
100
100
|
- Declarative: Easily make graphical user interface without having to learn anything about pyQt or matplotlib
|
|
101
101
|
- Support in jupyter notebooks
|
|
@@ -103,7 +103,9 @@ pip install -e ".[full]"
|
|
|
103
103
|
- Cache intermediate results in RAM for much faster processing
|
|
104
104
|
- `KeyboardControl` : no slider on UI but exactly the same internal mechanism, update on key press.
|
|
105
105
|
- Support Curve plots (2D signals)
|
|
106
|
-
- :new: gradio backend (+allows sharing with others)
|
|
106
|
+
- :new: gradio backend (+allows sharing with others).
|
|
107
|
+
- :new: Audio support in Gradio
|
|
108
|
+
- :new: Circular sliders for Qt Backend
|
|
107
109
|
|
|
108
110
|
|
|
109
111
|
|
|
@@ -141,8 +143,9 @@ Shortcuts while using the GUI (QT & matplotlib backends)
|
|
|
141
143
|
| Plot curves | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark:|
|
|
142
144
|
| Auto refreshed layout | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_minus_sign: |
|
|
143
145
|
| Keyboard shortcuts / fullscreen| :heavy_check_mark: | :heavy_check_mark: | :heavy_minus_sign: | :heavy_minus_sign: |
|
|
144
|
-
| Audio support | :heavy_check_mark: | :heavy_minus_sign: | :heavy_minus_sign: | :
|
|
146
|
+
| Audio support | :heavy_check_mark: | :heavy_minus_sign: | :heavy_minus_sign: | :heavy_check_mark: |
|
|
145
147
|
| Image buttons| :heavy_check_mark: | :heavy_minus_sign: | :heavy_minus_sign: | :heavy_minus_sign:|
|
|
148
|
+
| Circular slider| :heavy_check_mark: | :heavy_minus_sign: | :heavy_minus_sign: | :heavy_minus_sign:|
|
|
146
149
|
|
|
147
150
|
|
|
148
151
|
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{interactive_pipe-0.7.1 → interactive_pipe-0.7.2}/src/interactive_pipe/data_objects/__init__.py
RENAMED
|
File without changes
|
{interactive_pipe-0.7.1 → interactive_pipe-0.7.2}/src/interactive_pipe/data_objects/curves.py
RENAMED
|
File without changes
|
|
File without changes
|
{interactive_pipe-0.7.1 → interactive_pipe-0.7.2}/src/interactive_pipe/data_objects/image.py
RENAMED
|
File without changes
|
{interactive_pipe-0.7.1 → interactive_pipe-0.7.2}/src/interactive_pipe/data_objects/parameters.py
RENAMED
|
File without changes
|
{interactive_pipe-0.7.1 → interactive_pipe-0.7.2}/src/interactive_pipe/graphical/__init__.py
RENAMED
|
File without changes
|
{interactive_pipe-0.7.1 → interactive_pipe-0.7.2}/src/interactive_pipe/graphical/gradio_control.py
RENAMED
|
File without changes
|
|
File without changes
|
{interactive_pipe-0.7.1 → interactive_pipe-0.7.2}/src/interactive_pipe/graphical/mpl_control.py
RENAMED
|
File without changes
|
|
File without changes
|
{interactive_pipe-0.7.1 → interactive_pipe-0.7.2}/src/interactive_pipe/graphical/mpl_window.py
RENAMED
|
File without changes
|
{interactive_pipe-0.7.1 → interactive_pipe-0.7.2}/src/interactive_pipe/graphical/nb_control.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{interactive_pipe-0.7.1 → interactive_pipe-0.7.2}/src/interactive_pipe/helper/choose_backend.py
RENAMED
|
File without changes
|
|
File without changes
|
{interactive_pipe-0.7.1 → interactive_pipe-0.7.2}/src/interactive_pipe/helper/filter_decorator.py
RENAMED
|
File without changes
|
|
File without changes
|
{interactive_pipe-0.7.1 → interactive_pipe-0.7.2}/src/interactive_pipe/helper/pipeline_decorator.py
RENAMED
|
File without changes
|
|
File without changes
|
{interactive_pipe-0.7.1 → interactive_pipe-0.7.2}/src/interactive_pipe/thirdparty/music_spotify.py
RENAMED
|
File without changes
|
|
File without changes
|
{interactive_pipe-0.7.1 → interactive_pipe-0.7.2}/src/interactive_pipe.egg-info/dependency_links.txt
RENAMED
|
File without changes
|
{interactive_pipe-0.7.1 → interactive_pipe-0.7.2}/src/interactive_pipe.egg-info/requires.txt
RENAMED
|
File without changes
|
{interactive_pipe-0.7.1 → interactive_pipe-0.7.2}/src/interactive_pipe.egg-info/top_level.txt
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|