Import Lightroom presets as looks
A Lightroom preset changes the settings it was saved with and leaves every other one where the photograph had it. Imported as a whole edit, a preset holding only a grade reset the exposure, white balance and noise reduction it was put on top of — the opposite of what the photographer had in Lightroom. Imported presets now reach only the operations they name (`Reach::Named`), the rule the shipped presets already follow.
This commit is contained in:
@@ -44,7 +44,7 @@
|
||||
|
||||
use std::collections::BTreeMap;
|
||||
|
||||
use dr_pipeline::Preset;
|
||||
use dr_pipeline::{Preset, Reach};
|
||||
use quick_xml::events::Event;
|
||||
use quick_xml::XmlVersion;
|
||||
|
||||
@@ -300,7 +300,11 @@ pub fn read_xmp(text: &str) -> Result<Import, ImportError> {
|
||||
|
||||
Ok(Import {
|
||||
name,
|
||||
preset: Preset::from_params(params),
|
||||
// A look, because that is what a Lightroom preset is: it changes the
|
||||
// settings it was saved with and leaves every other one where the
|
||||
// photograph had it. Applied as a whole edit instead, a preset
|
||||
// holding only a grade would reset the exposure it was put on top of.
|
||||
preset: Preset::from_params(params).with_reach(Reach::Named),
|
||||
skipped,
|
||||
})
|
||||
}
|
||||
@@ -485,6 +489,26 @@ mod tests {
|
||||
);
|
||||
}
|
||||
|
||||
/// TRACES: FR-DEV-6
|
||||
/// Lightroom's own rule: a preset changes what it was saved with and
|
||||
/// nothing else, so a grade lands on top of the photograph's correction.
|
||||
#[test]
|
||||
fn an_imported_preset_leaves_what_it_does_not_set_alone() {
|
||||
use dr_pipeline::ops::dehaze;
|
||||
|
||||
let import = read_xmp(ATTRIBUTE_FORM).unwrap();
|
||||
assert_eq!(import.preset.reach(), Reach::Named);
|
||||
assert!(value(&import, "dehaze", "amount").is_none());
|
||||
|
||||
let mut graph = EditGraph::default_chain();
|
||||
graph.set_param(dehaze::ID, dehaze::AMOUNT, 30.0);
|
||||
import
|
||||
.preset
|
||||
.apply(&mut graph, Scope::adjustments())
|
||||
.expect_no_film();
|
||||
assert_eq!(graph.param(dehaze::ID, dehaze::AMOUNT), Some(30.0));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn a_value_that_is_not_a_number_costs_that_setting_and_not_the_file() {
|
||||
let text =
|
||||
|
||||
Reference in New Issue
Block a user