mirror of
https://github.com/storytold/lightcraft.git
synced 2026-10-14 19:27:01 -04:00
Merge branch 'claude/fix-922-denoise-toggle'
# Conflicts: # docs/parity-checklist.md
This commit is contained in:
3 files changed
+42
-1
No files matched your search
@@ -104,10 +104,30 @@ pub(crate) fn notice(app: &mut LightcraftApp, ui: &mut egui::Ui, kind: &str) {
|
||||
ui.add_space(6.0);
|
||||
}
|
||||
|
||||
/// The model setup was dismissed with nothing on the way: neither Settings nor a model's terms
|
||||
/// are showing, no model download or installation is running, and the photo still has no model.
|
||||
fn abandoned(app: &mut LightcraftApp) -> bool {
|
||||
if matches!(app.ui.dialog, Some(Dialog::Settings { .. } | Dialog::DenoiseModel { .. })) {
|
||||
return false;
|
||||
}
|
||||
let Some(photo) = app.model_setup.denoise.as_ref().map(|r| r.photo) else { return false };
|
||||
if !matches!(app.session.denoise_photo_state(photo), PhotoState::NoModel) {
|
||||
return false;
|
||||
}
|
||||
let Ok(v) = app.session.execute("denoise.models.downloads", &json!({})) else { return false };
|
||||
!v["downloads"].as_array().into_iter().flatten().any(|d| matches!(d["state"].as_str(), Some("running" | "done" | "installing" | "installed")))
|
||||
}
|
||||
|
||||
pub(crate) fn pump(app: &mut LightcraftApp, ctx: &egui::Context) {
|
||||
if app.model_setup.denoise.is_none() {
|
||||
return;
|
||||
}
|
||||
if abandoned(app) {
|
||||
// the setup was closed without installing anything: the switch goes back off (issue #922)
|
||||
app.model_setup.denoise = None;
|
||||
app.ui.status = tr("Pending photo action cancelled").into();
|
||||
return;
|
||||
}
|
||||
if app.session.interaction.is_some() {
|
||||
ctx.request_repaint_after(std::time::Duration::from_millis(250));
|
||||
return;
|
||||
|
||||
@@ -200,3 +200,24 @@ fn model_installation_waits_for_an_active_slider_gesture_to_finish() {
|
||||
drop(app);
|
||||
let _ = std::fs::remove_dir_all(dir);
|
||||
}
|
||||
|
||||
/// Issue #922: closing the setup without installing a model turns the AI Denoise switch back off
|
||||
/// and drops the "Cancel pending action" offer; while the setup stays open the request waits.
|
||||
#[test]
|
||||
fn dismissing_the_setup_without_a_model_leaves_ai_denoise_off() {
|
||||
let (mut app, dir, raw) = setup("dismissed");
|
||||
let r = app.run("denoise.toggle", json!({"id": raw.0, "enabled": true})).unwrap();
|
||||
assert_eq!(r["setupRequired"], true);
|
||||
resume(&mut app);
|
||||
assert!(model_setup::denoise_requested(&app, raw), "the open setup keeps the request");
|
||||
app.ui.dialog = None;
|
||||
resume(&mut app);
|
||||
assert!(!model_setup::denoise_requested(&app, raw), "a dismissed setup leaves nothing pending");
|
||||
assert!(app.ui.status.contains("cancelled"), "{}", app.ui.status);
|
||||
// installing later changes nothing; asking again offers the setup again
|
||||
install_denoise(&mut app, &dir);
|
||||
resume(&mut app);
|
||||
assert_eq!(amount(&app, raw), 0.0);
|
||||
drop(app);
|
||||
let _ = std::fs::remove_dir_all(dir);
|
||||
}
|
||||
@@ -205,7 +205,7 @@ differences and missing bindings are in [ui-parity.md](ui-parity.md#shortcuts).
|
||||
| LR-EDIT-DETAIL-SHARPEN | Sharpening | P0 | ✅ | `ctl:detail.sharpenAmount`, `ctl:detail.sharpenRadius`, `ctl:detail.sharpenDetail`, `ctl:detail.sharpenMasking` | no Alt-drag mask preview |
|
||||
| LR-EDIT-DETAIL-NR | Luminance noise reduction | P0 | ✅ | `ctl:detail.nrLuminance`, `ctl:detail.nrDetail`, `ctl:detail.nrContrast` | |
|
||||
| LR-EDIT-DETAIL-CNR | Colour noise reduction | P0 | ✅ | `ctl:detail.nrColor`, `ctl:detail.nrColorDetail`, `ctl:detail.nrColorSmoothness` | |
|
||||
| LR-EDIT-DETAIL-DENOISE | AI denoise | P2 | 🟡 | cmd:denoise.toggle, cmd:denoise.models.install, cmd:denoise.queue, ctl:enhance.denoise, `crates/denoise/`, `docs/denoise.md` | non-destructive Bayer RAW, opt-in weights, pure-Rust CPU/GPU; GPU convolution uses independently written shared scalars (Metal equivalence regression, issue #479); tiles can also run on another computer's graphics card (`lightcraft-cli denoise-serve`, `crates/denoise/src/remote.rs`); X-Trans/linear RGB, model policy and Lightroom fidelity remain |
|
||||
| LR-EDIT-DETAIL-DENOISE | AI denoise | P2 | 🟡 | cmd:denoise.toggle, cmd:denoise.models.install, cmd:denoise.queue, ctl:enhance.denoise, `crates/denoise/`, `docs/denoise.md` | non-destructive Bayer RAW, opt-in weights, pure-Rust CPU/GPU; GPU convolution uses independently written shared scalars (Metal equivalence regression, issue #479); tiles can also run on another computer's graphics card (`lightcraft-cli denoise-serve`, `crates/denoise/src/remote.rs`); X-Trans/linear RGB, model policy and Lightroom fidelity remain; closing the model setup without installing turns the switch back off (#922) |
|
||||
| LR-EDIT-DETAIL-RAWDETAILS | Improved demosaic toggle | P2 | ⬜ | | |
|
||||
| LR-EDIT-DETAIL-SUPERRES | Super resolution | P2 | ⬜ | | |
|
||||
| LR-EDIT-DETAIL-AISHARPEN | AI sharpen | OOS | 🚫 | | |
|
||||
|
||||
Reference in new issue
Block a user