[{"data":1,"prerenderedAt":828},["ShallowReactive",2],{"navigation_docs":3,"-getting-started-configuration":87,"-getting-started-configuration-surround":823},[4,35,51,80],{"title":5,"icon":6,"path":7,"stem":8,"children":9,"page":6},"Getting Started",false,"\u002Fgetting-started","1.getting-started",[10,15,20,25,30],{"title":11,"path":12,"stem":13,"icon":14},"Introduction","\u002Fgetting-started\u002Fintroduction","1.getting-started\u002F2.introduction","i-lucide-house",{"title":16,"path":17,"stem":18,"icon":19},"Installation","\u002Fgetting-started\u002Finstallation","1.getting-started\u002F3.installation","i-lucide-download",{"title":21,"path":22,"stem":23,"icon":24},"Configuration","\u002Fgetting-started\u002Fconfiguration","1.getting-started\u002F4.configuration","i-lucide-settings",{"title":26,"path":27,"stem":28,"icon":29},"Server Requirements","\u002Fgetting-started\u002Fserver-requirements","1.getting-started\u002F5.server-requirements","i-lucide-server",{"title":31,"path":32,"stem":33,"icon":34},"Troubleshooting","\u002Fgetting-started\u002Ftroubleshooting","1.getting-started\u002F6.troubleshooting","i-lucide-wrench",{"title":36,"icon":37,"path":38,"stem":39,"children":40,"page":6},"Guide","i-lucide-book-open","\u002Fguide","2.guide",[41,46],{"title":42,"path":43,"stem":44,"icon":45},"URL Pattern","\u002Fguide\u002Furl-pattern","2.guide\u002F1.url-pattern","i-lucide-link",{"title":47,"path":48,"stem":49,"icon":50},"Transformation Parameters","\u002Fguide\u002Ftransformation-parameters","2.guide\u002F2.transformation-parameters","i-lucide-sliders",{"title":52,"icon":53,"path":54,"stem":55,"children":56},"Deployment","i-lucide-rocket","\u002Fdeployment","3.deployment",[57,60,65,70,75],{"title":58,"path":54,"stem":59,"icon":53},"Overview","3.deployment\u002Findex",{"title":61,"path":62,"stem":63,"icon":64},"Render","\u002Fdeployment\u002Frender","3.deployment\u002F1.render","i-simple-icons-render",{"title":66,"path":67,"stem":68,"icon":69},"Railway","\u002Fdeployment\u002Frailway","3.deployment\u002F2.railway","i-simple-icons-railway",{"title":71,"path":72,"stem":73,"icon":74},"Fly.io","\u002Fdeployment\u002Ffly-io","3.deployment\u002F3.fly-io","i-simple-icons-flydotio",{"title":76,"path":77,"stem":78,"icon":79},"Cloudflare Sandbox","\u002Fdeployment\u002Fcloudflare-sandbox","3.deployment\u002F4.cloudflare-sandbox","i-simple-icons-cloudflare",{"title":81,"path":82,"stem":83,"children":84,"icon":86},"Roadmap","\u002Froadmap","5.roadmap\u002Findex",[85],{"title":81,"path":82,"stem":83,"icon":86},"i-lucide-map",{"id":88,"title":21,"body":89,"description":815,"extension":531,"links":816,"meta":817,"navigation":818,"path":22,"seo":819,"stem":23,"__hash__":822},"docs\u002F1.getting-started\u002F4.configuration.md",{"type":90,"value":91,"toc":802},"minimark",[92,105,137,142,441,446,449,472,478,482,487,585,589,597,608,614,618,626,653,664,668,679,683,689,703,715,720,749,755,759,762,789,798],[93,94,95,96,100,101,104],"p",{},"Repix is configured via environment variables. Copy ",[97,98,99],"code",{},".env.example"," to ",[97,102,103],{},".env"," and adjust as needed:",[106,107,112],"pre",{"className":108,"code":109,"language":110,"meta":111,"style":111},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","cp .env.example .env\n# Edit .env with your settings\n","bash","",[97,113,114,130],{"__ignoreMap":111},[115,116,119,123,127],"span",{"class":117,"line":118},"line",1,[115,120,122],{"class":121},"sBMFI","cp",[115,124,126],{"class":125},"sfazB"," .env.example",[115,128,129],{"class":125}," .env\n",[115,131,133],{"class":117,"line":132},2,[115,134,136],{"class":135},"sHwdD","# Edit .env with your settings\n",[138,139,141],"h2",{"id":140},"environment-variables","Environment Variables",[143,144,145,161],"table",{},[146,147,148],"thead",{},[149,150,151,155,158],"tr",{},[152,153,154],"th",{},"Variable",[152,156,157],{},"Description",[152,159,160],{},"Default",[162,163,164,180,195,214,229,244,259,281,295,309,327,342,356,371,383,395,411,426],"tbody",{},[149,165,166,172,175],{},[167,168,169],"td",{},[97,170,171],{},"PORT",[167,173,174],{},"Server port",[167,176,177],{},[97,178,179],{},"3210",[149,181,182,187,190],{},[167,183,184],{},[97,185,186],{},"SOURCE_PREFIX",[167,188,189],{},"Source URL prefix when reconstructing image URLs",[167,191,192],{},[97,193,194],{},"https:\u002F\u002F",[149,196,197,202,211],{},[167,198,199],{},[97,200,201],{},"SOURCE_HOSTNAME",[167,203,204,205,207,208,210],{},"Allowed hostnames when ",[97,206,186],{}," is unset or ",[97,209,194],{}," (comma-separated)",[167,212,213],{},"—",[149,215,216,221,224],{},[167,217,218],{},[97,219,220],{},"FETCH_TIMEOUT",[167,222,223],{},"Timeout for fetching source images (ms)",[167,225,226],{},[97,227,228],{},"10000",[149,230,231,236,239],{},[167,232,233],{},[97,234,235],{},"CACHE_CONTROL",[167,237,238],{},"Cache-Control header value",[167,240,241],{},[97,242,243],{},"public, max-age=31536000, immutable",[149,245,246,251,254],{},[167,247,248],{},[97,249,250],{},"CORS_ORIGIN",[167,252,253],{},"CORS allowed origin",[167,255,256],{},[97,257,258],{},"*",[149,260,261,266,277],{},[167,262,263],{},[97,264,265],{},"CORS_CREDENTIALS",[167,267,268,269,272,273,276],{},"CORS credentials (",[97,270,271],{},"true"," \u002F ",[97,274,275],{},"false",")",[167,278,279],{},[97,280,275],{},[149,282,283,288,291],{},[167,284,285],{},[97,286,287],{},"ALLOW_CUSTOM_TRANSFORMS",[167,289,290],{},"Allow custom transformations beyond presets",[167,292,293],{},[97,294,271],{},[149,296,297,302,305],{},[167,298,299],{},[97,300,301],{},"ALLOW_PRESETS",[167,303,304],{},"Include default presets (xs, sm, md, lg, xl, full, placeholder)",[167,306,307],{},[97,308,271],{},[149,310,311,316,323],{},[167,312,313],{},[97,314,315],{},"ALLOW_ORIGINAL_IMAGE",[167,317,318,319,322],{},"Allow ",[97,320,321],{},"\u002Foriginal\u002F{path}"," to serve unprocessed images",[167,324,325],{},[97,326,271],{},[149,328,329,334,337],{},[167,330,331],{},[97,332,333],{},"IMAGE_MAX_WIDTH",[167,335,336],{},"Maximum image width (pixels)",[167,338,339],{},[97,340,341],{},"2048",[149,343,344,349,352],{},[167,345,346],{},[97,347,348],{},"IMAGE_MAX_HEIGHT",[167,350,351],{},"Maximum image height (pixels)",[167,353,354],{},[97,355,341],{},[149,357,358,363,366],{},[167,359,360],{},[97,361,362],{},"IMAGE_DEFAULT_QUALITY",[167,364,365],{},"Default JPEG\u002FWebP quality (1-100)",[167,367,368],{},[97,369,370],{},"85",[149,372,373,378,381],{},[167,374,375],{},[97,376,377],{},"PRESETS",[167,379,380],{},"JSON object of custom presets",[167,382,213],{},[149,384,385,390,393],{},[167,386,387],{},[97,388,389],{},"LOG_OTLP_ENDPOINT",[167,391,392],{},"OTLP endpoint for log draining (e.g. Grafana, Datadog)",[167,394,213],{},[149,396,397,402,409],{},[167,398,399],{},[97,400,401],{},"LOG_OTLP_HEADERS",[167,403,404,405,408],{},"OTLP request headers (",[97,406,407],{},"key=value,key2=value2","). Use for auth (e.g. PostHog)",[167,410,213],{},[149,412,413,418,421],{},[167,414,415],{},[97,416,417],{},"LOG_SAMPLING_INFO",[167,419,420],{},"Info log sampling rate (0-100%)",[167,422,423],{},[97,424,425],{},"10",[149,427,428,433,436],{},[167,429,430],{},[97,431,432],{},"LOG_SAMPLING_ERROR",[167,434,435],{},"Error log sampling rate (0-100%)",[167,437,438],{},[97,439,440],{},"100",[442,443,445],"h3",{"id":444},"presets-via-environment","Presets via Environment",[93,447,448],{},"Define custom presets as a JSON object:",[106,450,452],{"className":108,"code":451,"language":110,"meta":111,"style":111},"PRESETS='{\"thumbnail\":\"w=200,h=200,fit=cover\",\"banner\":\"w=1024,h=128\",\"avatar\":\"w=100,h=100,fit=cover,f=webp,q=85\"}'\n",[97,453,454],{"__ignoreMap":111},[115,455,456,459,463,466,469],{"class":117,"line":118},[115,457,377],{"class":458},"sTEyZ",[115,460,462],{"class":461},"sMK4o","=",[115,464,465],{"class":461},"'",[115,467,468],{"class":125},"{\"thumbnail\":\"w=200,h=200,fit=cover\",\"banner\":\"w=1024,h=128\",\"avatar\":\"w=100,h=100,fit=cover,f=webp,q=85\"}",[115,470,471],{"class":461},"'\n",[93,473,474,475,477],{},"When ",[97,476,377],{}," is set, it replaces the default presets. Omit it to keep the built-in defaults below.",[442,479,481],{"id":480},"default-presets","Default Presets",[93,483,474,484,486],{},[97,485,377],{}," is not set, Repix includes these general-purpose presets with incremental sizes for various use cases (icons, thumbnails, cards, galleries, etc.):",[143,488,489,499],{},[146,490,491],{},[149,492,493,496],{},[152,494,495],{},"Preset",[152,497,498],{},"Value",[162,500,501,513,525,537,549,561,573],{},[149,502,503,508],{},[167,504,505],{},[97,506,507],{},"xs",[167,509,510],{},[97,511,512],{},"w=64,q=85",[149,514,515,520],{},[167,516,517],{},[97,518,519],{},"sm",[167,521,522],{},[97,523,524],{},"w=128,q=85",[149,526,527,532],{},[167,528,529],{},[97,530,531],{},"md",[167,533,534],{},[97,535,536],{},"w=256,q=85",[149,538,539,544],{},[167,540,541],{},[97,542,543],{},"lg",[167,545,546],{},[97,547,548],{},"w=512,q=85",[149,550,551,556],{},[167,552,553],{},[97,554,555],{},"xl",[167,557,558],{},[97,559,560],{},"w=1024,q=85",[149,562,563,568],{},[167,564,565],{},[97,566,567],{},"full",[167,569,570],{},[97,571,572],{},"q=85",[149,574,575,580],{},[167,576,577],{},[97,578,579],{},"placeholder",[167,581,582],{},[97,583,584],{},"w=64,q=50,blur=15",[138,586,588],{"id":587},"original-image-endpoint","Original Image Endpoint",[93,590,474,591,593,594,596],{},[97,592,315],{}," is ",[97,595,271],{},", you can serve images without processing:",[106,598,602],{"className":599,"code":600,"language":601,"meta":111,"style":111},"language-http shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","https:\u002F\u002Fyour-domain.com\u002Foriginal\u002Fexample.com\u002Fpath\u002Fto\u002Fimage.jpg\n","http",[97,603,604],{"__ignoreMap":111},[115,605,606],{"class":117,"line":118},[115,607,600],{},[93,609,610,611,613],{},"This fetches and returns the source image as-is (no resize, format conversion, etc.). Set to ",[97,612,275],{}," to disable and return 403.",[138,615,617],{"id":616},"security-preset-only-mode","Security: Preset-Only Mode",[93,619,620,621,100,623,625],{},"Restrict image transformations to predefined presets only by setting ",[97,622,287],{},[97,624,275],{},":",[106,627,629],{"className":108,"code":628,"language":110,"meta":111,"style":111},"ALLOW_CUSTOM_TRANSFORMS=false\nPRESETS='{\"thumbnail\":\"w=200,h=200,fit=cover,f=webp,q=85\",\"banner\":\"w=1024,h=128,fit=cover,f=webp,q=85\"}'\n",[97,630,631,640],{"__ignoreMap":111},[115,632,633,635,637],{"class":117,"line":118},[115,634,287],{"class":458},[115,636,462],{"class":461},[115,638,639],{"class":125},"false\n",[115,641,642,644,646,648,651],{"class":117,"line":132},[115,643,377],{"class":458},[115,645,462],{"class":461},[115,647,465],{"class":461},[115,649,650],{"class":125},"{\"thumbnail\":\"w=200,h=200,fit=cover,f=webp,q=85\",\"banner\":\"w=1024,h=128,fit=cover,f=webp,q=85\"}",[115,652,471],{"class":461},[93,654,474,655,593,657,659,660,663],{},[97,656,287],{},[97,658,275],{},", only preset names can be used in URLs. Any custom parameters will return a ",[97,661,662],{},"403"," error.",[138,665,667],{"id":666},"logging","Logging",[93,669,670,671,678],{},"Repix uses ",[672,673,677],"a",{"href":674,"rel":675},"https:\u002F\u002Fwww.evlog.dev",[676],"nofollow","evlog"," for structured logging. You can drain logs to OTLP-compatible backends (Grafana, Datadog, Honeycomb, etc.) and configure sampling to reduce volume at scale.",[442,680,682],{"id":681},"otlp-endpoint","OTLP Endpoint",[93,684,685,686,688],{},"Set ",[97,687,389],{}," to send logs to an OTLP HTTP endpoint:",[106,690,692],{"className":108,"code":691,"language":110,"meta":111,"style":111},"LOG_OTLP_ENDPOINT=https:\u002F\u002Fotlp-gateway-prod-us-central-0.grafana.net\u002Fotlp\n",[97,693,694],{"__ignoreMap":111},[115,695,696,698,700],{"class":117,"line":118},[115,697,389],{"class":458},[115,699,462],{"class":461},[115,701,702],{"class":125},"https:\u002F\u002Fotlp-gateway-prod-us-central-0.grafana.net\u002Fotlp\n",[93,704,705,708,709,714],{},[97,706,707],{},"OTEL_EXPORTER_OTLP_ENDPOINT"," is also supported as a fallback. See ",[672,710,713],{"href":711,"rel":712},"https:\u002F\u002Fwww.evlog.dev\u002Fadapters\u002Fotlp",[676],"evlog OTLP adapter"," for provider-specific setup (Grafana Cloud, Datadog, etc.).",[93,716,717,718,625],{},"For providers that require auth (e.g. PostHog), set ",[97,719,401],{},[106,721,723],{"className":108,"code":722,"language":110,"meta":111,"style":111},"LOG_OTLP_ENDPOINT=https:\u002F\u002Fus.i.posthog.com\u002Fi\nLOG_OTLP_HEADERS=\"Authorization=Bearer phc_YOUR_PROJECT_TOKEN\"\n",[97,724,725,734],{"__ignoreMap":111},[115,726,727,729,731],{"class":117,"line":118},[115,728,389],{"class":458},[115,730,462],{"class":461},[115,732,733],{"class":125},"https:\u002F\u002Fus.i.posthog.com\u002Fi\n",[115,735,736,738,740,743,746],{"class":117,"line":132},[115,737,401],{"class":458},[115,739,462],{"class":461},[115,741,742],{"class":461},"\"",[115,744,745],{"class":125},"Authorization=Bearer phc_YOUR_PROJECT_TOKEN",[115,747,748],{"class":461},"\"\n",[93,750,751,752,754],{},"Format: ",[97,753,407],{},".",[442,756,758],{"id":757},"sampling","Sampling",[93,760,761],{},"At scale, use head sampling to keep a percentage of logs per level:",[106,763,765],{"className":108,"code":764,"language":110,"meta":111,"style":111},"LOG_SAMPLING_INFO=10   # Keep 10% of info logs\nLOG_SAMPLING_ERROR=100 # Always keep errors (default)\n",[97,766,767,778],{"__ignoreMap":111},[115,768,769,771,773,775],{"class":117,"line":118},[115,770,417],{"class":458},[115,772,462],{"class":461},[115,774,425],{"class":125},[115,776,777],{"class":135},"   # Keep 10% of info logs\n",[115,779,780,782,784,786],{"class":117,"line":132},[115,781,432],{"class":458},[115,783,462],{"class":461},[115,785,440],{"class":125},[115,787,788],{"class":135}," # Always keep errors (default)\n",[93,790,791,792,797],{},"Errors are always kept by default. See ",[672,793,796],{"href":794,"rel":795},"https:\u002F\u002Fwww.evlog.dev\u002Fgetting-started\u002Finstallation#sampling",[676],"evlog sampling"," for details.",[799,800,801],"style",{},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}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);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}",{"title":111,"searchDepth":132,"depth":132,"links":803},[804,809,810,811],{"id":140,"depth":132,"text":141,"children":805},[806,808],{"id":444,"depth":807,"text":445},3,{"id":480,"depth":807,"text":481},{"id":587,"depth":132,"text":588},{"id":616,"depth":132,"text":617},{"id":666,"depth":132,"text":667,"children":812},[813,814],{"id":681,"depth":807,"text":682},{"id":757,"depth":807,"text":758},"Customize Repix via environment variables.",null,{},{"icon":24,"title":21},{"title":820,"description":821},"Configuration - Repix","Configure Repix with environment variables.","VTc6liUPBMKgti0l-f9PRJVMmsh26jZ8avGHJGxx3JM",[824,826],{"title":16,"path":17,"stem":18,"description":825,"icon":19,"children":-1},"Get started with Repix.",{"title":26,"path":27,"stem":28,"description":827,"icon":29,"children":-1},"Runtime and deployment requirements for Repix.",1781442145912]