Config saving of pipeline in/out

This commit is contained in:
2025-08-03 17:16:13 +02:00
parent 9801f69d0b
commit ac33ec5d8d
9 changed files with 303 additions and 136 deletions

View File

@ -21,7 +21,7 @@ class OpenRawWidget(PipelineStageWidget):
self.raw_path = None
self.img = None
self.img_full = None
self.config = {
self.rawconfig = {
# Demosaic algorithm
"demosaic_algorithm": rawpy.DemosaicAlgorithm.AHD,
# Output color space
@ -45,9 +45,6 @@ class OpenRawWidget(PipelineStageWidget):
self.manager.bus.subscribe(
"process_full_res", self._on_process_full_res, True)
def get_config(self):
return {}
def create_pipeline_stage_content(self):
with dpg.file_dialog(
directory_selector=False,
@ -73,79 +70,79 @@ class OpenRawWidget(PipelineStageWidget):
label="Demosaic",
items=[alg.name for alg in rawpy.DemosaicAlgorithm],
default_value=rawpy.DemosaicAlgorithm.AHD.name,
callback=lambda s, a, u: self.config.__setitem__(
callback=lambda s, a, u: self.rawconfig.__setitem__(
"demosaic_algorithm", rawpy.DemosaicAlgorithm[a])
)
dpg.add_combo(
label="Color Space",
items=[cs.name for cs in rawpy.ColorSpace],
default_value=rawpy.ColorSpace.sRGB.name,
callback=lambda s, a, u: self.config.__setitem__(
callback=lambda s, a, u: self.rawconfig.__setitem__(
"output_color", rawpy.ColorSpace[a])
)
dpg.add_combo(
label="Output Bits",
items=["8", "16"],
default_value="16",
callback=lambda s, a, u: self.config.__setitem__(
callback=lambda s, a, u: self.rawconfig.__setitem__(
"output_bps", int(a))
)
dpg.add_checkbox(
label="Use Camera WB",
default_value=True,
callback=lambda s, a, u: self.config.__setitem__(
callback=lambda s, a, u: self.rawconfig.__setitem__(
"use_camera_wb", a)
)
dpg.add_checkbox(
label="Auto WB",
default_value=False,
callback=lambda s, a, u: self.config.__setitem__(
callback=lambda s, a, u: self.rawconfig.__setitem__(
"use_auto_wb", a)
)
dpg.add_slider_float(
label="Manual WB R Gain",
default_value=1.0, min_value=0.1, max_value=4.0,
callback=lambda s, a, u: self.config.__setitem__(
"user_wb", (a, self.config["user_wb"][1], self.config["user_wb"][2], self.config["user_wb"][3]))
"user_wb", (a, self.rawconfig["user_wb"][1], self.rawconfig["user_wb"][2], self.rawconfig["user_wb"][3]))
)
dpg.add_slider_float(
label="Manual WB G Gain",
default_value=1.0, min_value=0.1, max_value=4.0,
callback=lambda s, a, u: self.config.__setitem__(
"user_wb", (self.config["user_wb"][0], a, a, self.config["user_wb"][3]))
"user_wb", (self.rawconfig["user_wb"][0], a, a, self.rawconfig["user_wb"][3]))
)
dpg.add_slider_float(
label="Manual WB B Gain",
default_value=1.0, min_value=0.1, max_value=4.0,
callback=lambda s, a, u: self.config.__setitem__(
"user_wb", (self.config["user_wb"][0], self.config["user_wb"][1], self.config["user_wb"][2], a))
"user_wb", (self.rawconfig["user_wb"][0], self.rawconfig["user_wb"][1], self.rawconfig["user_wb"][2], a))
)
dpg.add_slider_float(
label="Bright",
default_value=1.0, min_value=0.1, max_value=4.0,
callback=lambda s, a, u: self.config.__setitem__("bright", a)
callback=lambda s, a, u: self.rawconfig.__setitem__("bright", a)
)
dpg.add_checkbox(
label="No Auto Bright",
default_value=False,
callback=lambda s, a, u: self.config.__setitem__(
callback=lambda s, a, u: self.rawconfig.__setitem__(
"no_auto_bright", a)
)
dpg.add_slider_float(
label="Gamma",
default_value=1.0, min_value=0.1, max_value=3.0,
callback=lambda s, a, u: self.config.__setitem__("gamma", a)
callback=lambda s, a, u: self.rawconfig.__setitem__("gamma", a)
)
dpg.add_checkbox(
label="Half-size",
default_value=False,
callback=lambda s, a, u: self.config.__setitem__(
callback=lambda s, a, u: self.rawconfig.__setitem__(
"half_size", a)
)
dpg.add_checkbox(
label="4-color RGB",
default_value=False,
callback=lambda s, a, u: self.config.__setitem__(
callback=lambda s, a, u: self.rawconfig.__setitem__(
"four_color_rgb", a)
)
@ -179,28 +176,28 @@ class OpenRawWidget(PipelineStageWidget):
with rawpy.imread(self.raw_path) as raw:
# Prepare postprocess kwargs from config
postprocess_args = {
'demosaic_algorithm': self.config["demosaic_algorithm"],
'output_color': self.config["output_color"],
'output_bps': self.config["output_bps"],
'bright': self.config["bright"],
'no_auto_bright': self.config["no_auto_bright"],
'gamma': (1.0, self.config["gamma"]),
'half_size': self.config["half_size"],
'four_color_rgb': self.config["four_color_rgb"],
'demosaic_algorithm': self.rawconfig["demosaic_algorithm"],
'output_color': self.rawconfig["output_color"],
'output_bps': self.rawconfig["output_bps"],
'bright': self.rawconfig["bright"],
'no_auto_bright': self.rawconfig["no_auto_bright"],
'gamma': (1.0, self.rawconfig["gamma"]),
'half_size': self.rawconfig["half_size"],
'four_color_rgb': self.rawconfig["four_color_rgb"],
}
if self.config["use_camera_wb"]:
if self.rawconfig["use_camera_wb"]:
postprocess_args['use_camera_wb'] = True
elif self.config["use_auto_wb"]:
elif self.rawconfig["use_auto_wb"]:
postprocess_args['use_auto_wb'] = True
else:
postprocess_args['user_wb'] = self.config["user_wb"]
postprocess_args['user_wb'] = self.rawconfig["user_wb"]
# Postprocess into RGB
rgb = raw.postprocess(**postprocess_args)
# Normalize to float32 in 0.0-1.0 range depending on output_bps
max_val = (2 ** self.config["output_bps"]) - 1
max_val = (2 ** self.rawconfig["output_bps"]) - 1
rgb_float = rgb.astype(np.float32) / max_val
# Add alpha channel (fully opaque)