[{"data":1,"prerenderedAt":447},["ShallowReactive",2],{"snippet-\u002Fsnippets\u002Fsquoosh-image-convert":3},{"id":4,"title":5,"body":6,"description":437,"draft":438,"extension":439,"lastModified":440,"meta":441,"navigation":103,"path":442,"seo":443,"stem":444,"tags":445,"__hash__":446},"snippets\u002Fsnippets\u002Fsquoosh-image-convert.md","Shell script to convert PNGs into AVIF\u002FWEBP using Squoosh CLI",{"type":7,"value":8,"toc":434},"minimark",[9,407,412,430],[10,11,16],"pre",{"className":12,"code":13,"language":14,"meta":15,"style":15},"language-sh shiki shiki-themes github-dark","#!\u002Fbin\u002Fbash\nif ! [ -x \"$(command -v npx)\" ]; then\n    echo \"npm isn't installed.\" >\u002Fdev\u002Fnull >&2\n    exit 1\nfi\n\n# TODO add other formats ex: webp\navif() {\n    # customise parameters as needed\n    local avif_options='{\"quality\": \"30\", \"effort\": \"4\"}'\n    npx @squoosh\u002Fcli --avif \"$avif_options\" $1\n}\n\nformat=$1\nif [ -z \"$format\" ]; then\n    echo \"Format arg not specified. pass avif or webp as argument to the script.\" >\u002Fdev\u002Fnull >&2\n    exit 1\nfi\nif [[ \"$format\" != \"avif\" ]]; then\n    echo \"Invalid format specified\" >&2\n    exit 1\nfi\n\nfor image in *.png; do\n    base_name=${image%%.*}\n    test_file=\"$base_name.avif\"\n    if [[ ! -f $test_file ]]; then\n        avif $image\n    else\n        echo \"$test_file already exists. Skipping...\"\n    fi\ndone\n","sh","",[17,18,19,28,65,83,92,98,105,111,121,127,142,167,173,178,189,210,224,231,236,261,271,278,283,288,309,331,347,366,375,381,395,401],"code",{"__ignoreMap":15},[20,21,24],"span",{"class":22,"line":23},"line",1,[20,25,27],{"class":26},"sAwPA","#!\u002Fbin\u002Fbash\n",[20,29,31,35,38,42,45,49,53,56,59,62],{"class":22,"line":30},2,[20,32,34],{"class":33},"snl16","if",[20,36,37],{"class":33}," !",[20,39,41],{"class":40},"s95oV"," [ ",[20,43,44],{"class":33},"-x",[20,46,48],{"class":47},"sU2Wk"," \"$(",[20,50,52],{"class":51},"sDLfK","command",[20,54,55],{"class":51}," -v",[20,57,58],{"class":47}," npx)\"",[20,60,61],{"class":40}," ]; ",[20,63,64],{"class":33},"then\n",[20,66,68,71,74,77,80],{"class":22,"line":67},3,[20,69,70],{"class":51},"    echo",[20,72,73],{"class":47}," \"npm isn't installed.\"",[20,75,76],{"class":33}," >",[20,78,79],{"class":47},"\u002Fdev\u002Fnull",[20,81,82],{"class":33}," >&2\n",[20,84,86,89],{"class":22,"line":85},4,[20,87,88],{"class":51},"    exit",[20,90,91],{"class":51}," 1\n",[20,93,95],{"class":22,"line":94},5,[20,96,97],{"class":33},"fi\n",[20,99,101],{"class":22,"line":100},6,[20,102,104],{"emptyLinePlaceholder":103},true,"\n",[20,106,108],{"class":22,"line":107},7,[20,109,110],{"class":26},"# TODO add other formats ex: webp\n",[20,112,114,118],{"class":22,"line":113},8,[20,115,117],{"class":116},"svObZ","avif",[20,119,120],{"class":40},"() {\n",[20,122,124],{"class":22,"line":123},9,[20,125,126],{"class":26},"    # customise parameters as needed\n",[20,128,130,133,136,139],{"class":22,"line":129},10,[20,131,132],{"class":33},"    local",[20,134,135],{"class":40}," avif_options",[20,137,138],{"class":33},"=",[20,140,141],{"class":47},"'{\"quality\": \"30\", \"effort\": \"4\"}'\n",[20,143,145,148,151,154,157,160,163],{"class":22,"line":144},11,[20,146,147],{"class":116},"    npx",[20,149,150],{"class":47}," @squoosh\u002Fcli",[20,152,153],{"class":51}," --avif",[20,155,156],{"class":47}," \"",[20,158,159],{"class":40},"$avif_options",[20,161,162],{"class":47},"\"",[20,164,166],{"class":165},"s9osk"," $1\n",[20,168,170],{"class":22,"line":169},12,[20,171,172],{"class":40},"}\n",[20,174,176],{"class":22,"line":175},13,[20,177,104],{"emptyLinePlaceholder":103},[20,179,181,184,186],{"class":22,"line":180},14,[20,182,183],{"class":40},"format",[20,185,138],{"class":33},[20,187,188],{"class":165},"$1\n",[20,190,192,194,196,199,201,204,206,208],{"class":22,"line":191},15,[20,193,34],{"class":33},[20,195,41],{"class":40},[20,197,198],{"class":33},"-z",[20,200,156],{"class":47},[20,202,203],{"class":40},"$format",[20,205,162],{"class":47},[20,207,61],{"class":40},[20,209,64],{"class":33},[20,211,213,215,218,220,222],{"class":22,"line":212},16,[20,214,70],{"class":51},[20,216,217],{"class":47}," \"Format arg not specified. pass avif or webp as argument to the script.\"",[20,219,76],{"class":33},[20,221,79],{"class":47},[20,223,82],{"class":33},[20,225,227,229],{"class":22,"line":226},17,[20,228,88],{"class":51},[20,230,91],{"class":51},[20,232,234],{"class":22,"line":233},18,[20,235,97],{"class":33},[20,237,239,241,244,246,248,250,253,256,259],{"class":22,"line":238},19,[20,240,34],{"class":33},[20,242,243],{"class":40}," [[ ",[20,245,162],{"class":47},[20,247,203],{"class":40},[20,249,162],{"class":47},[20,251,252],{"class":33}," !=",[20,254,255],{"class":47}," \"avif\"",[20,257,258],{"class":40}," ]]; ",[20,260,64],{"class":33},[20,262,264,266,269],{"class":22,"line":263},20,[20,265,70],{"class":51},[20,267,268],{"class":47}," \"Invalid format specified\"",[20,270,82],{"class":33},[20,272,274,276],{"class":22,"line":273},21,[20,275,88],{"class":51},[20,277,91],{"class":51},[20,279,281],{"class":22,"line":280},22,[20,282,97],{"class":33},[20,284,286],{"class":22,"line":285},23,[20,287,104],{"emptyLinePlaceholder":103},[20,289,291,294,297,300,303,306],{"class":22,"line":290},24,[20,292,293],{"class":33},"for",[20,295,296],{"class":40}," image ",[20,298,299],{"class":33},"in",[20,301,302],{"class":47}," *.png",[20,304,305],{"class":40},"; ",[20,307,308],{"class":33},"do\n",[20,310,312,315,317,320,323,326,329],{"class":22,"line":311},25,[20,313,314],{"class":40},"    base_name",[20,316,138],{"class":33},[20,318,319],{"class":40},"${image",[20,321,322],{"class":33},"%%",[20,324,325],{"class":40},".",[20,327,328],{"class":33},"*",[20,330,172],{"class":40},[20,332,334,337,339,341,344],{"class":22,"line":333},26,[20,335,336],{"class":40},"    test_file",[20,338,138],{"class":33},[20,340,162],{"class":47},[20,342,343],{"class":40},"$base_name",[20,345,346],{"class":47},".avif\"\n",[20,348,350,353,355,358,361,364],{"class":22,"line":349},27,[20,351,352],{"class":33},"    if",[20,354,243],{"class":40},[20,356,357],{"class":33},"!",[20,359,360],{"class":33}," -f",[20,362,363],{"class":40}," $test_file ]]; ",[20,365,64],{"class":33},[20,367,369,372],{"class":22,"line":368},28,[20,370,371],{"class":116},"        avif",[20,373,374],{"class":40}," $image\n",[20,376,378],{"class":22,"line":377},29,[20,379,380],{"class":33},"    else\n",[20,382,384,387,389,392],{"class":22,"line":383},30,[20,385,386],{"class":51},"        echo",[20,388,156],{"class":47},[20,390,391],{"class":40},"$test_file",[20,393,394],{"class":47}," already exists. Skipping...\"\n",[20,396,398],{"class":22,"line":397},31,[20,399,400],{"class":33},"    fi\n",[20,402,404],{"class":22,"line":403},32,[20,405,406],{"class":33},"done\n",[408,409,411],"h2",{"id":410},"usage","Usage",[10,413,415],{"className":12,"code":414,"language":14,"meta":15,"style":15},"# Run this script file in the directory where you have png files\n.\u002Fsquoosh.sh avif\n",[17,416,417,422],{"__ignoreMap":15},[20,418,419],{"class":22,"line":23},[20,420,421],{"class":26},"# Run this script file in the directory where you have png files\n",[20,423,424,427],{"class":22,"line":30},[20,425,426],{"class":116},".\u002Fsquoosh.sh",[20,428,429],{"class":47}," avif\n",[431,432,433],"style",{},"html pre.shiki code .sAwPA, html code.shiki .sAwPA{--shiki-default:#6A737D}html pre.shiki code .snl16, html code.shiki .snl16{--shiki-default:#F97583}html pre.shiki code .s95oV, html code.shiki .s95oV{--shiki-default:#E1E4E8}html pre.shiki code .sU2Wk, html code.shiki .sU2Wk{--shiki-default:#9ECBFF}html pre.shiki code .sDLfK, html code.shiki .sDLfK{--shiki-default:#79B8FF}html pre.shiki code .svObZ, html code.shiki .svObZ{--shiki-default:#B392F0}html pre.shiki code .s9osk, html code.shiki .s9osk{--shiki-default:#FFAB70}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}",{"title":15,"searchDepth":30,"depth":30,"links":435},[436],{"id":410,"depth":30,"text":411},"A bash script that converts every PNG in a folder to AVIF with the Squoosh CLI. It checks for npx first, reads the format from an argument, and tunes quality.",false,"md","2026-08-29T17:42:32+07:00",{},"\u002Fsnippets\u002Fsquoosh-image-convert",{"title":5,"description":437},"snippets\u002Fsquoosh-image-convert","squoosh, image optimisations, shell, avif, webp","7daqRHpyNA8AXJ3EyyL8Mb8Wo90l8Eaxq58GuVXVOLY",1788101292554]