Legacy filter editor vs Filter Effects dialog for cross-version SVG fidelity
0 reputation · 12 May 2020, 02:20 UTC
0 reputation · 12 May 2020, 02:20 UTC
Inkscape 0.92 and earlier author filters with a legacy syntax and hard-coded primitive units, while Inkscape 1.0 and later writes filters using a standardized SVG 1.1 style with primitiveUnits="userSpaceOnUse" and additional fe nodes via the Filter Effects dialog.
The concrete constraint is sharing a single SVG that must remain visually consistent when opened in both Inkscape 0.92 and Inkscape 1.x. Files authored in 1.0+ can lose or render filter primitives incorrectly in 0.92, and legacy files opened in 1.0+ are subject to automatic conversion that may change appearance for chained primitives.
The unresolved design decision is whether to continue supporting the legacy filter UI for backward compatibility or to require migration to the new Filter Effects dialog, and what that means for authors who need predictable rendering across versions.
Which filter authoring approach is documented to preserve visual fidelity when the target environments include both 0.92 and 1.x? How is automatic conversion of legacy filters defined for complex chained primitives? Is there current guidance on locking filter output for cross-version use?
35775 reputation · 12 May 2020, 10:35 UTC
The transition between Inkscape 0.92 and 1.0+ introduced a fundamental shift in how filters are serialized. Inkscape 1.0 and later utilize a standardized SVG 1.1 style, favoring primitiveUnits="userSpaceOnUse" and a dedicated Filter Effects dialog to manage chained fe nodes. Conversely, Inkscape 0.92 and earlier rely on a legacy syntax that often interprets coordinate systems and primitive units differently.
When a file authored in 1.0+ is opened in 0.92, the software may fail to parse the modern filter structure, leading to missing primitives or incorrect rendering logic. More dangerously, when a legacy file is opened in 1.x, Inkscape performs an automatic conversion to the new format. For complex chained primitives, this conversion is not guaranteed to be lossless; the transformation of coordinate systems or the reordering of fe nodes can significantly shift the visual output or break the filter chain.
If you must maintain a single SVG that looks identical in both environments, follow these constraints:
userSpaceOnUse rather than objectBoundingBox where possible, as legacy engines often handle the math behind bounding box calculations inconsistently across versions.There is currently no "locking" mechanism for filter output for cross-version use; the software prioritizes migration to the SVG 1.1 standard. If absolute visual fidelity is required across versions, the safest workflow is to rasterize the filtered elements into bitmaps before distribution for legacy-version users.
To provide a more specific recommendation, which specific fe primitives (e.g., feTurbulence, feDisplacementMap) are you using in your chains?
Use comments to ask for clarification. Post a solution as an answer.
35,775 reputation · 12 May 2020, 04:39 UTC
Inkscape 1.2 introduced a Filter compatibility preference (Edit → Preferences → Filters) that disables automatic conversion when loading legacy files. This prevents the primitiveUnits rewrite and subregion recalculation that shifts chained-primitive output. The setting is session-persistent but not back-ported to 0.92.
feGaussianBlur + feOffset) in 0.92 with explicit primitiveUnits="objectBoundingBox".primitiveUnits and subregion values.This preference is the only documented mechanism to preserve the legacy coordinate space without manual XML editing.