{"record":{"id":"cc2d1bc1c0949715","repo":"getzola/zola","slug":"quality-for-avif-must-be-between-and-inclus","errorCode":null,"errorMessage":"Quality for AVIF must be between {} and {} (inclusive); {} is not valid","messagePattern":"Quality for AVIF must be between (.+?) and (.+?) \\(inclusive\\); (.+?) is not valid","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"components/imageproc/src/format.rs","lineNumber":64,"sourceCode":"                    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),\n                    invalid_speed => Err(anyhow!(\n                        \"Speed for AVIF must be between {} and {} (inclusive); {} is not valid\",\n                        SPEED_MIN_AVIF,\n                        SPEED_MAX_AVIF,\n                        invalid_speed\n                    )),\n                }?;\n                Ok(Avif { quality: q, speed: s })\n            }\n            _ => Err(anyhow!(\"Invalid image format: {}\", format)),","sourceCodeStart":46,"sourceCodeEnd":82,"githubUrl":"https://github.com/getzola/zola/blob/61d30828217957120309db657950224edf9707e2/components/imageproc/src/format.rs#L46-L82","documentation":"`ImageFormat::from_args` validates AVIF quality: when the `--quality` flag is supplied for format `avif`, it must fall in the inclusive range QUALITY_MIN_AVIF..=QUALITY_MAX_AVIF; a default (DEFAULT_QUALITY_AVIF) applies when omitted. Out-of-range values raise this error with bounds and the offending value.","triggerScenarios":"Running `zola image --format avif --quality <n>` where n is outside the AVIF quality bounds (e.g. 0 or >100, or a float like 0.6).","commonSituations":"Reusing AVIF encoder conventions from rav1e/aom (where quality/speed scales differ); passing a fractional 0-1 quality; copying a quality value valid for WebP/JPEG but outside AVIF bounds in this tool.","solutions":["Pass an integer quality within the AVIF bounds defined in components/imageproc/src/format.rs (check QUALITY_MIN_AVIF/QUALITY_MAX_AVIF)","Omit `--quality` to use DEFAULT_QUALITY_AVIF","Convert 0-1 float quality to the accepted integer scale"],"exampleFix":"// before\n$ zola image --format avif --quality 0.6 in.png out.avif\n// after\n$ zola image --format avif --quality 60 in.png out.avif","handlingStrategy":"validation","validationCode":"let q = quality.unwrap_or(DEFAULT_QUALITY_AVIF);\nif !(QUALITY_MIN_AVIF..=QUALITY_MAX_AVIF).contains(&q) {\n    return Err(format!(\"AVIF quality must be {}-{}, got {}\", QUALITY_MIN_AVIF, QUALITY_MAX_AVIF, q));\n}","typeGuard":"fn is_valid_avif_quality(q: i32) -> bool {\n    (QUALITY_MIN_AVIF..=QUALITY_MAX_AVIF).contains(&q)\n}","tryCatchPattern":"match ImageFormat::from_args(\"avif\", quality, speed) {\n    Ok(f) => f,\n    Err(e) if e.to_string().contains(\"Quality for AVIF\") => {\n        eprintln!(\"Falling back to default AVIF quality\");\n        ImageFormat::from_args(\"avif\", None, speed)?\n    }\n    Err(e) => return Err(e),\n}","preventionTips":["Check QUALITY_MIN_AVIF/QUALITY_MAX_AVIF constants for exact bounds instead of assuming 1-100","Use the default quality unless you have a specific size/quality target","Never pass encoder-specific scales (rav1e/aom) directly"],"tags":["cli","images","validation","avif"],"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"}