Files
bambuddy/backend
MartinNYHC b2dda1fa5f Record the colour a slice is actually printed in (issue #2977)
Every file the internal slicer produced came back with filament_colour
    = #00AE42 whatever filament was picked: a green plate thumbnail, green
    metadata, and a "Color mismatch" in the Print dialog against the AMS
    slot the job had just been correctly mapped to.

    A colour is not a property of a filament preset in either slicer. It
    belongs to the project, and Bambu Studio and OrcaSlicer set it from the
    plate in their GUIs -- so nothing was attached to the preset Bambuddy
    sends by name, and the CLI fell back to its own compiled-in default,
    which is Bambu green. None of the shipped BBL filament profiles define
    filament_colour; the whole tree has zero occurrences.

    default_filament_colour is not the answer on its own. Measured against
    a 02.08.02.61 sidecar, a profile carrying only that still slices to
    filament_colour ["#00AE42"] -- Bambu Studio consumes it in the GUI when
    a project is created, not in --load-filaments. So it is read and
    rewritten as filament_colour, which the same sidecar does honour: the
    reporter's exact triplet returns ["#E8B00C"] when patched this way, and
    the colour lands in both project_settings.config and slice_info.config,
    which is what the thumbnail and the AMS mapping actually read.

    Each filament row in the slice dialog gets a colour control, and the
    resolved value flows through a chain: the user's pick, then the preset's
    own default_filament_colour, then the colour that slot was designed with
    in the source 3MF. A slot with none of the three is left untouched
    rather than given a guess.

    The designed colour is read from project_settings.config, not
    slice_info.config. The latter records what the file was last sliced
    with, which for a source that never carried a colour is #00AE42 itself
    -- measured -- so using it would have been circular.

    The control is offered on single-filament sources too, because an STL,
    and equally a mesh-only 3MF exported from CAD, has no colour anywhere
    else to inherit. That is the case this exists for, and it took three
    shapes to make it visible: a swatch in the label row was identical to
    the read-only dot multi-colour rows have carried for releases, and
    adding the hex beside it only made it look like a caption. It now sits
    beside the dropdown, styled like it and the same height, with the
    swatch and hex wrapped in one label bound to the input so a click
    anywhere on it opens the picker.

    An untouched slot with no designed colour submits an empty string
    rather than the control's displayed default. A sent colour outranks the
    preset's own, so pinning the placeholder would silently discard the
    real colour of an imported OrcaSlicer profile that carries one.

    Slicer Pipelines pick up the same chain without carrying a colour of
    their own.

    Also adds a warning for a defect found while investigating this: a
    filament preset whose name the sidecar's bundle cannot resolve is not
    rejected. The CLI inherits nothing, falls back to its defaults for
    every field, and returns a well-formed success -- measured, an
    unresolvable name slices as filament_type ["PLA"] at nozzle_temperature
    ["200"] with filament_ids [""] and filament_vendor ["(Undefined)"], so
    a PETG preset a sidecar image predates prints at PLA temperatures with
    no diagnostic anywhere. Both signals are required together, which keeps
    it off the two legitimate lookalikes: a hand-written profile that never
    named a vendor still carries a real filament id, and a user's own cloud
    preset carries a vendor while legitimately having no bundled id. The
    file is kept rather than refused, unlike the missing start G-code of
    whoever can see the temperatures.
2026-08-28 12:42:15 +02:00
..