{"record":{"id":"0b2bd6833d7fd02b","repo":"getzola/zola","slug":"quality-for-webp-must-be-between-and-inclus","errorCode":null,"errorMessage":"Quality for WebP must be between {} and {} (inclusive); {} is not valid","messagePattern":"Quality for WebP must be between (.+?) and (.+?) \\(inclusive\\); (.+?) is not valid","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"components/imageproc/src/format.rs","lineNumber":54,"sourceCode":"            (\"auto\", false) => \"png\",\n            (other_format, _) => other_format,\n        };\n        match format_from_auto {\n            \"jpeg\" | \"jpg\" => match quality.unwrap_or(DEFAULT_QUALITY_JPEG) {\n                valid_quality @ QUALITY_MIN_JPEG..=QUALITY_MAX_JPEG => {\n                    Ok(Jpeg { quality: valid_quality })\n                }\n                invalid_quality => Err(anyhow!(\n                    \"Quality for JPEG must be between {} and {} (inclusive); {} is not valid\",\n                    QUALITY_MIN_JPEG,\n                    QUALITY_MAX_JPEG,\n                    invalid_quality\n                )),\n            },\n            \"png\" => Ok(Png),\n            \"webp\" => match quality {\n                Some(QUALITY_MIN_WEBP..=QUALITY_MAX_WEBP) | None => Ok(WebP { quality }),\n                Some(invalid_quality) => Err(anyhow!(\n                    \"Quality for WebP must be between {} and {} (inclusive); {} is not valid\",\n                    QUALITY_MIN_WEBP,\n                    QUALITY_MAX_WEBP,\n                    invalid_quality\n                )),\n            },\n            \"avif\" => {\n                let q = match quality.unwrap_or(DEFAULT_QUALITY_AVIF) {\n                    valid_quality @ QUALITY_MIN_AVIF..=QUALITY_MAX_AVIF => Ok(valid_quality),\n                    invalid_quality => Err(anyhow!(\n                        \"Quality for AVIF must be between {} and {} (inclusive); {} is not valid\",\n                        QUALITY_MIN_AVIF,\n                        QUALITY_MAX_AVIF,\n                        invalid_quality\n                    )),\n                }?;\n                let s = match speed.unwrap_or(DEFAULT_SPEED_AVIF) {\n                    valid_speed @ SPEED_MIN_AVIF..=SPEED_MAX_AVIF => Ok(valid_speed),","sourceCodeStart":36,"sourceCodeEnd":72,"githubUrl":"https://github.com/getzola/zola/blob/61d30828217957120309db657950224edf9707e2/components/imageproc/src/format.rs#L36-L72","documentation":"`ImageFormat::from_args` validates WebP quality: when supplied, it must be within the inclusive range QUALITY_MIN_WEBP..=QUALITY_MAX_WEBP; omitting it (`None`) is allowed. Out-of-range values raise this error with the bounds and offending value.","triggerScenarios":"Running `zola image --format webp --quality <n>` where n is outside the WebP bounds (e.g. 0, 150, or a fractional value like 0.9 that fails the integer range pattern).","commonSituations":"Using the 0.0-1.0 float convention from other encoders; assuming WebP allows values the JPEG path rejects or vice versa; copying quality from an ffmpeg/libwebp command line with different scale.","solutions":["Use an integer quality inside the WebP valid range (1-100), e.g. `--quality 75`","Omit `--quality` entirely for WebP (None is accepted, encoding lossless/default)","Check the imageproc format.rs constants QUALITY_MIN_WEBP/QUALITY_MAX_WEBP for the exact bounds"],"exampleFix":"// before\n$ zola image --format webp --quality 0.9 in.png out.webp\n// after\n$ zola image --format webp --quality 90 in.png out.webp","handlingStrategy":"validation","validationCode":"if let Some(q) = quality {\n    if !(1..=100).contains(&q) {\n        return Err(format!(\"WebP quality must be 1-100, got {}\", q));\n    }\n} // None is valid for WebP","typeGuard":"fn is_valid_webp_quality(q: Option<i32>) -> bool {\n    q.map_or(true, |v| (1..=100).contains(&v))\n}","tryCatchPattern":"match ImageFormat::from_args(\"webp\", quality, None) {\n    Ok(f) => f,\n    Err(e) if e.to_string().contains(\"Quality for WebP\") => {\n        eprintln!(\"Omit --quality or use an integer 1-100\");\n        ImageFormat::WebP { quality: None }\n    }\n    Err(e) => return Err(e),\n}","preventionTips":["For WebP, omitting quality is legal — prefer omitting unless tuning","Convert 0-1 float quality to integer percent before passing","Clamp quality into the valid range before calling from_args"],"tags":["cli","images","validation","webp"],"backgroundTag":"invalid-quality-value","analyzedSha":"61d30828217957120309db657950224edf9707e2","analyzedAt":"2026-09-03T14:39:09.727Z","contentChangedAt":"2026-09-03T14:39:09.727Z","schemaVersion":2},"datasetVersion":"2026-09-10T17:17:09.494Z"}