[{"data":1,"prerenderedAt":879},["ShallowReactive",2],{"navigation_docs_en":3,"-en-guide-media":88,"-en-guide-media-surround":874},[4,18,51],{"title":5,"path":6,"stem":7,"children":8,"page":17},"Getting Started","\u002Fen\u002Fgetting-started","en\u002F1.getting-started",[9,13],{"title":10,"path":11,"stem":12},"Introduction","\u002Fen\u002Fgetting-started\u002Fintroduction","en\u002F1.getting-started\u002F1.introduction",{"title":14,"path":15,"stem":16},"Installation & Setup","\u002Fen\u002Fgetting-started\u002Finstallation","en\u002F1.getting-started\u002F2.installation",false,{"title":19,"path":20,"stem":21,"children":22,"page":17},"Guide","\u002Fen\u002Fguide","en\u002F2.guide",[23,27,31,35,39,43,47],{"title":24,"path":25,"stem":26},"Contextual Editing","\u002Fen\u002Fguide\u002Fcontextual-editing","en\u002F2.guide\u002F1.contextual-editing",{"title":28,"path":29,"stem":30},"Preview Mode","\u002Fen\u002Fguide\u002Fpreview-mode","en\u002F2.guide\u002F2.preview-mode",{"title":32,"path":33,"stem":34},"Tina Cloud & Editing Modes","\u002Fen\u002Fguide\u002Ftina-cloud","en\u002F2.guide\u002F3.tina-cloud",{"title":36,"path":37,"stem":38},"Nuxt Content Compatibility","\u002Fen\u002Fguide\u002Fnuxt-content","en\u002F2.guide\u002F4.nuxt-content",{"title":40,"path":41,"stem":42},"Media","\u002Fen\u002Fguide\u002Fmedia","en\u002F2.guide\u002F5.media",{"title":44,"path":45,"stem":46},"Advanced Rich-Text","\u002Fen\u002Fguide\u002Frich-text-advanced","en\u002F2.guide\u002F6.rich-text-advanced",{"title":48,"path":49,"stem":50},"Deployment","\u002Fen\u002Fguide\u002Fdeployment","en\u002F2.guide\u002F7.deployment",{"title":52,"path":53,"stem":54,"children":55,"page":17},"Api","\u002Fen\u002Fapi","en\u002F3.api",[56,60,64,68,72,76,80,84],{"title":57,"path":58,"stem":59},"useTina()","\u002Fen\u002Fapi\u002Fuse-tina","en\u002F3.api\u002F1.use-tina",{"title":61,"path":62,"stem":63},"useTinaBridge()","\u002Fen\u002Fapi\u002Fuse-tina-bridge","en\u002F3.api\u002F2.use-tina-bridge",{"title":65,"path":66,"stem":67},"useTinaPreview()","\u002Fen\u002Fapi\u002Fuse-tina-preview","en\u002F3.api\u002F3.use-tina-preview",{"title":69,"path":70,"stem":71},"\u003CTinaProvider>","\u002Fen\u002Fapi\u002Ftina-provider","en\u002F3.api\u002F4.tina-provider",{"title":73,"path":74,"stem":75},"\u003CTinaMarkdown>","\u002Fen\u002Fapi\u002Ftina-markdown","en\u002F3.api\u002F5.tina-markdown",{"title":77,"path":78,"stem":79},"\u003CTinaMermaid>","\u002Fen\u002Fapi\u002Ftina-mermaid","en\u002F3.api\u002F6.tina-mermaid",{"title":81,"path":82,"stem":83},"Module Configuration","\u002Fen\u002Fapi\u002Fconfiguration","en\u002F3.api\u002F7.configuration",{"title":85,"path":86,"stem":87},"Field Types","\u002Fen\u002Fapi\u002Ffield-types","en\u002F3.api\u002F8.field-types",{"id":89,"title":40,"body":90,"description":868,"extension":869,"links":870,"meta":871,"navigation":454,"path":41,"seo":872,"stem":42,"__hash__":873},"docs_en\u002Fen\u002F2.guide\u002F5.media.md",{"type":91,"value":92,"toc":855},"minimark",[93,98,115,199,202,206,213,256,266,269,278,283,392,411,415,422,487,556,560,581,588,665,851],[94,95,97],"h2",{"id":96},"default-git-based","Default: git-based",[99,100,101,102,106,107,110,111,114],"p",{},"With no extra configuration, files uploaded through an ",[103,104,105],"code",{},"image"," field are committed straight into the repo, under ",[103,108,109],{},"media.tina"," in ",[103,112,113],{},"tina\u002Fconfig.ts",":",[116,117,122],"pre",{"className":118,"code":119,"language":120,"meta":121,"style":121},"language-ts shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","media: {\n  tina: {\n    mediaRoot: 'uploads',\n    publicFolder: 'public',\n  },\n}\n","ts","",[103,123,124,139,149,170,187,193],{"__ignoreMap":121},[125,126,129,133,136],"span",{"class":127,"line":128},"line",1,[125,130,132],{"class":131},"sBMFI","media",[125,134,114],{"class":135},"sMK4o",[125,137,138],{"class":135}," {\n",[125,140,142,145,147],{"class":127,"line":141},2,[125,143,144],{"class":131},"  tina",[125,146,114],{"class":135},[125,148,138],{"class":135},[125,150,152,155,157,160,164,167],{"class":127,"line":151},3,[125,153,154],{"class":131},"    mediaRoot",[125,156,114],{"class":135},[125,158,159],{"class":135}," '",[125,161,163],{"class":162},"sfazB","uploads",[125,165,166],{"class":135},"'",[125,168,169],{"class":135},",\n",[125,171,173,176,178,180,183,185],{"class":127,"line":172},4,[125,174,175],{"class":131},"    publicFolder",[125,177,114],{"class":135},[125,179,159],{"class":135},[125,181,182],{"class":162},"public",[125,184,166],{"class":135},[125,186,169],{"class":135},[125,188,190],{"class":127,"line":189},5,[125,191,192],{"class":135},"  },\n",[125,194,196],{"class":127,"line":195},6,[125,197,198],{"class":135},"}\n",[99,200,201],{},"Simplest option, no extra infrastructure, but every upload becomes a Git commit.",[94,203,205],{"id":204},"backend-media-handlers","Backend media handlers",[99,207,208,209,212],{},"For external storage, ",[103,210,211],{},"nuxt-tina"," wires up backend media handlers one at a time. Cloudinary is the one that's actually implemented today. The others are on the roadmap, not yet available:",[214,215,216,229],"table",{},[217,218,219],"thead",{},[220,221,222,226],"tr",{},[223,224,225],"th",{},"Backend",[223,227,228],{},"Status",[230,231,232,241,249],"tbody",{},[220,233,234,238],{},[235,236,237],"td",{},"Cloudinary",[235,239,240],{},"Available",[220,242,243,246],{},[235,244,245],{},"AWS S3 Bucket",[235,247,248],{},"Coming soon",[220,250,251,254],{},[235,252,253],{},"DigitalOcean Spaces",[235,255,248],{},[99,257,258,261,262,265],{},[103,259,260],{},"media.provider"," only accepts ",[103,263,264],{},"'tina' \\| 'cloudinary'"," right now: trying to set anything else is a type error, not a silently-ignored option.",[94,267,237],{"id":268},"cloudinary",[99,270,271,273,274,277],{},[103,272,211],{}," ships a ready-to-use Cloudinary adapter via ",[103,275,276],{},"next-tinacms-cloudinary"," (not a hard dependency: only dynamically imported when you actually use it).",[279,280,282],"h3",{"id":281},"_1-enable-the-server-route","1. Enable the server route",[116,284,286],{"className":118,"code":285,"language":120,"meta":121,"style":121},"\u002F\u002F nuxt.config.ts\nexport default defineNuxtConfig({\n  modules: ['nuxt-tina'],\n  tina: {\n    media: {\n      provider: 'cloudinary', \u002F\u002F default: 'tina'\n    },\n  },\n})\n",[103,287,288,294,314,336,344,353,372,378,383],{"__ignoreMap":121},[125,289,290],{"class":127,"line":128},[125,291,293],{"class":292},"sHwdD","\u002F\u002F nuxt.config.ts\n",[125,295,296,300,303,307,311],{"class":127,"line":141},[125,297,299],{"class":298},"s7zQu","export",[125,301,302],{"class":298}," default",[125,304,306],{"class":305},"s2Zo4"," defineNuxtConfig",[125,308,310],{"class":309},"sTEyZ","(",[125,312,313],{"class":135},"{\n",[125,315,316,320,322,325,327,329,331,334],{"class":127,"line":151},[125,317,319],{"class":318},"swJcz","  modules",[125,321,114],{"class":135},[125,323,324],{"class":309}," [",[125,326,166],{"class":135},[125,328,211],{"class":162},[125,330,166],{"class":135},[125,332,333],{"class":309},"]",[125,335,169],{"class":135},[125,337,338,340,342],{"class":127,"line":172},[125,339,144],{"class":318},[125,341,114],{"class":135},[125,343,138],{"class":135},[125,345,346,349,351],{"class":127,"line":189},[125,347,348],{"class":318},"    media",[125,350,114],{"class":135},[125,352,138],{"class":135},[125,354,355,358,360,362,364,366,369],{"class":127,"line":195},[125,356,357],{"class":318},"      provider",[125,359,114],{"class":135},[125,361,159],{"class":135},[125,363,268],{"class":162},[125,365,166],{"class":135},[125,367,368],{"class":135},",",[125,370,371],{"class":292}," \u002F\u002F default: 'tina'\n",[125,373,375],{"class":127,"line":374},7,[125,376,377],{"class":135},"    },\n",[125,379,381],{"class":127,"line":380},8,[125,382,192],{"class":135},[125,384,386,389],{"class":127,"line":385},9,[125,387,388],{"class":135},"}",[125,390,391],{"class":309},")\n",[99,393,394,395,398,399,401,402,405,406,410],{},"This registers ",[103,396,397],{},"\u002Fapi\u002Fcloudinary\u002F**"," (a Nitro adapter for ",[103,400,276],{},"'s ",[103,403,404],{},"createMediaHandler","), ",[407,408,409],"strong",{},"only when enabled",", so if you don't use Cloudinary, that package never gets bundled at all.",[279,412,414],{"id":413},"_2-set-up-credentials","2. Set up credentials",[99,416,417,418,421],{},"Cloudinary needs ",[407,419,420],{},"three different sets"," of env vars. This isn't duplication you can trim. Each is read by a different consumer:",[116,423,428],{"className":424,"code":425,"filename":426,"language":427,"meta":121,"style":121},"language-env shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","# Read by the Nitro runtime (the \u002Fapi\u002Fcloudinary\u002F** handler)\nNUXT_TINA_CLOUDINARY_CLOUD_NAME=\u003Ccloud-name>\nNUXT_TINA_CLOUDINARY_API_KEY=\u003Capi-key>\nNUXT_TINA_CLOUDINARY_API_SECRET=\u003Capi-secret>\n\n# Read by the tinacms CLI (tinacms build \u002F tinacms dev)\nTINA_TOKEN=\u003Csame-value-as-NUXT_TINA_TOKEN>\nTINA_PUBLIC_CLIENT_ID=\u003Csame-value-as-NUXT_TINA_CLIENT_ID>\n\n# Read by next-tinacms-cloudinary (this package comes from the Next.js ecosystem)\nNEXT_PUBLIC_TINA_CLIENT_ID=\u003Csame-value-as-NUXT_TINA_CLIENT_ID>\n",".env","env",[103,429,430,435,440,445,450,456,461,466,471,475,481],{"__ignoreMap":121},[125,431,432],{"class":127,"line":128},[125,433,434],{},"# Read by the Nitro runtime (the \u002Fapi\u002Fcloudinary\u002F** handler)\n",[125,436,437],{"class":127,"line":141},[125,438,439],{},"NUXT_TINA_CLOUDINARY_CLOUD_NAME=\u003Ccloud-name>\n",[125,441,442],{"class":127,"line":151},[125,443,444],{},"NUXT_TINA_CLOUDINARY_API_KEY=\u003Capi-key>\n",[125,446,447],{"class":127,"line":172},[125,448,449],{},"NUXT_TINA_CLOUDINARY_API_SECRET=\u003Capi-secret>\n",[125,451,452],{"class":127,"line":189},[125,453,455],{"emptyLinePlaceholder":454},true,"\n",[125,457,458],{"class":127,"line":195},[125,459,460],{},"# Read by the tinacms CLI (tinacms build \u002F tinacms dev)\n",[125,462,463],{"class":127,"line":374},[125,464,465],{},"TINA_TOKEN=\u003Csame-value-as-NUXT_TINA_TOKEN>\n",[125,467,468],{"class":127,"line":380},[125,469,470],{},"TINA_PUBLIC_CLIENT_ID=\u003Csame-value-as-NUXT_TINA_CLIENT_ID>\n",[125,472,473],{"class":127,"line":385},[125,474,455],{"emptyLinePlaceholder":454},[125,476,478],{"class":127,"line":477},10,[125,479,480],{},"# Read by next-tinacms-cloudinary (this package comes from the Next.js ecosystem)\n",[125,482,484],{"class":127,"line":483},11,[125,485,486],{},"NEXT_PUBLIC_TINA_CLIENT_ID=\u003Csame-value-as-NUXT_TINA_CLIENT_ID>\n",[214,488,489,502],{},[217,490,491],{},[220,492,493,496,499],{},[223,494,495],{},"Var",[223,497,498],{},"Read by",[223,500,501],{},"Why this format",[230,503,504,517,537],{},[220,505,506,511,514],{},[235,507,508],{},[103,509,510],{},"NUXT_TINA_*",[235,512,513],{},"Nitro server runtime",[235,515,516],{},"Nuxt's own env prefix convention",[220,518,519,528,534],{},[235,520,521,524,525],{},[103,522,523],{},"TINA_TOKEN"," + ",[103,526,527],{},"TINA_PUBLIC_CLIENT_ID",[235,529,530,533],{},[103,531,532],{},"tinacms"," CLI",[235,535,536],{},"The CLI has its own naming convention",[220,538,539,544,549],{},[235,540,541],{},[103,542,543],{},"NEXT_PUBLIC_TINA_CLIENT_ID",[235,545,546,548],{},[103,547,276],{}," internals",[235,550,551,552,555],{},"This package hardcodes reading env vars with a ",[103,553,554],{},"NEXT_PUBLIC_"," prefix",[279,557,559],{"id":558},"_3-install-the-dependencies","3. Install the dependencies",[116,561,565],{"className":562,"code":563,"language":564,"meta":121,"style":121},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","pnpm add next-tinacms-cloudinary @tinacms\u002Fauth\n","bash",[103,566,567],{"__ignoreMap":121},[125,568,569,572,575,578],{"class":127,"line":128},[125,570,571],{"class":131},"pnpm",[125,573,574],{"class":162}," add",[125,576,577],{"class":162}," next-tinacms-cloudinary",[125,579,580],{"class":162}," @tinacms\u002Fauth\n",[279,582,584,585,587],{"id":583},"_4-point-tinaconfigts-at-cloudinary","4. Point ",[103,586,113],{}," at Cloudinary",[116,589,591],{"className":118,"code":590,"language":120,"meta":121,"style":121},"import { tinaCloudinaryMediaStore } from 'nuxt-tina\u002Fmedia'\n\nexport default defineConfig({\n  media: {\n    loadCustomStore: tinaCloudinaryMediaStore,\n  },\n})\n",[103,592,593,618,622,635,644,655,659],{"__ignoreMap":121},[125,594,595,598,601,604,607,610,612,615],{"class":127,"line":128},[125,596,597],{"class":298},"import",[125,599,600],{"class":135}," {",[125,602,603],{"class":309}," tinaCloudinaryMediaStore",[125,605,606],{"class":135}," }",[125,608,609],{"class":298}," from",[125,611,159],{"class":135},[125,613,614],{"class":162},"nuxt-tina\u002Fmedia",[125,616,617],{"class":135},"'\n",[125,619,620],{"class":127,"line":141},[125,621,455],{"emptyLinePlaceholder":454},[125,623,624,626,628,631,633],{"class":127,"line":151},[125,625,299],{"class":298},[125,627,302],{"class":298},[125,629,630],{"class":305}," defineConfig",[125,632,310],{"class":309},[125,634,313],{"class":135},[125,636,637,640,642],{"class":127,"line":172},[125,638,639],{"class":318},"  media",[125,641,114],{"class":135},[125,643,138],{"class":135},[125,645,646,649,651,653],{"class":127,"line":189},[125,647,648],{"class":318},"    loadCustomStore",[125,650,114],{"class":135},[125,652,603],{"class":309},[125,654,169],{"class":135},[125,656,657],{"class":127,"line":195},[125,658,192],{"class":135},[125,660,661,663],{"class":127,"line":374},[125,662,388],{"class":135},[125,664,391],{"class":309},[666,667,668,676,701,704,781,807,813,838],"div",{"dataTinaFieldWarning":121},[94,669,671,672,675],{"id":670},"️-gotcha-dont-use-processenv-here-to-toggle-onoff","⚠️ Gotcha: don't use ",[103,673,674],{},"process.env"," here to toggle on\u002Foff",[99,677,678,679,681,682,684,685,688,689,692,693,696,697,700],{},"The ",[103,680,132],{}," section of ",[103,683,113],{}," ",[407,686,687],{},"also gets bundled into the JavaScript that runs in the admin browser"," (not just executed on the server): ",[103,690,691],{},"@tinacms\u002Fcli"," copies this file's raw source for the parts that need to run client-side (",[103,694,695],{},"loadCustomStore",", a custom ",[103,698,699],{},"ui.component",", etc.), not the result of Node evaluating it.",[99,702,703],{},"That means if you write:",[116,705,707],{"className":118,"code":706,"language":120,"meta":121,"style":121},"\u002F\u002F ❌ WRONG: process.env is always undefined in the browser\nconst useCloudinary = !!process.env.NUXT_TINA_CLOUDINARY_CLOUD_NAME\nmedia: useCloudinary ? { loadCustomStore: tinaCloudinaryMediaStore } : { tina: {...} }\n",[103,708,709,714,742],{"__ignoreMap":121},[125,710,711],{"class":127,"line":128},[125,712,713],{"class":292},"\u002F\u002F ❌ WRONG: process.env is always undefined in the browser\n",[125,715,716,720,723,726,729,732,735,737,739],{"class":127,"line":141},[125,717,719],{"class":718},"spNyl","const",[125,721,722],{"class":309}," useCloudinary ",[125,724,725],{"class":135},"=",[125,727,728],{"class":135}," !!",[125,730,731],{"class":309},"process",[125,733,734],{"class":135},".",[125,736,427],{"class":309},[125,738,734],{"class":135},[125,740,741],{"class":309},"NUXT_TINA_CLOUDINARY_CLOUD_NAME\n",[125,743,744,746,748,750,753,755,758,760,763,765,768,770,773,775,778],{"class":127,"line":151},[125,745,132],{"class":131},[125,747,114],{"class":135},[125,749,722],{"class":309},[125,751,752],{"class":135},"?",[125,754,600],{"class":135},[125,756,757],{"class":318}," loadCustomStore",[125,759,114],{"class":135},[125,761,762],{"class":309}," tinaCloudinaryMediaStore ",[125,764,388],{"class":135},[125,766,767],{"class":135}," :",[125,769,600],{"class":135},[125,771,772],{"class":318}," tina",[125,774,114],{"class":135},[125,776,777],{"class":135}," {...}",[125,779,780],{"class":135}," }\n",[99,782,783,784,787,788,791,792,795,796,799,800,803,804,734],{},"...the toggle ",[407,785,786],{},"always falls back to the default"," in the admin (the Media Manager browses the project filesystem, not Cloudinary), even though the credentials are valid and the server route works fine when tested directly with ",[103,789,790],{},"curl",". Check ",[103,793,794],{},"tina\u002F__generated__\u002Fconfig.prebuild.jsx"," if you want to see the proof: the ",[103,797,798],{},"process.env.X"," expression sits there verbatim, never inlined to ",[103,801,802],{},"true","\u002F",[103,805,806],{},"false",[99,808,809,812],{},[407,810,811],{},"The fix",": if you want to flip Cloudinary on or off, change the literal value directly in the source:",[116,814,816],{"className":118,"code":815,"language":120,"meta":121,"style":121},"\u002F\u002F ✅ CORRECT: a fixed literal, not an env expression\nconst useCloudinary = true \u002F\u002F change this by hand, don't read an env var\n",[103,817,818,823],{"__ignoreMap":121},[125,819,820],{"class":127,"line":128},[125,821,822],{"class":292},"\u002F\u002F ✅ CORRECT: a fixed literal, not an env expression\n",[125,824,825,827,829,831,835],{"class":127,"line":141},[125,826,719],{"class":718},[125,828,722],{"class":309},[125,830,725],{"class":135},[125,832,834],{"class":833},"sfNiH"," true",[125,836,837],{"class":292}," \u002F\u002F change this by hand, don't read an env var\n",[99,839,840,841,110,843,846,847,850],{},"The server-side toggle (",[103,842,260],{},[103,844,845],{},"nuxt.config.ts",") ",[407,848,849],{},"isn't affected by this",": that one is purely Node\u002Fbuild-time and works fine with a normal env var.",[852,853,854],"style",{},"html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}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 .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 .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sfNiH, html code.shiki .sfNiH{--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC}",{"title":121,"searchDepth":141,"depth":141,"links":856},[857,858,859,866],{"id":96,"depth":141,"text":97},{"id":204,"depth":141,"text":205},{"id":268,"depth":141,"text":237,"children":860},[861,862,863,864],{"id":281,"depth":151,"text":282},{"id":413,"depth":151,"text":414},{"id":558,"depth":151,"text":559},{"id":583,"depth":151,"text":865},"4. Point tina\u002Fconfig.ts at Cloudinary",{"id":670,"depth":141,"text":867},"⚠️ Gotcha: don't use process.env here to toggle on\u002Foff","The built-in git-based media store, and backend media handlers for external storage.","md",null,{},{"title":40,"description":868},"eoehJfRS-BwPoZnSkf2LkepX44yiVSECsr1K4EgxiEA",[875,877],{"title":36,"path":37,"stem":38,"description":876,"children":-1},"nuxt-tina works standalone: this covers the optional, manual bridge to @nuxt\u002Fcontent.",{"title":44,"path":45,"stem":46,"description":878,"children":-1},"Mermaid diagrams and custom templates in a rich-text field, plus one gotcha about the parser.",1789757557740]