[{"data":1,"prerenderedAt":1181},["ShallowReactive",2],{"navigation_docs":3,"-reference-speech-port":412,"-reference-speech-port-surround":1176},[4,38,84,326,386],{"title":5,"icon":6,"path":7,"stem":8,"children":9,"page":37},"Getting started","i-lucide-rocket","\u002Fgetting-started","1.getting-started",[10,15,20,24,28,32],{"title":11,"path":12,"stem":13,"icon":14},"Introduction","\u002Fgetting-started\u002Fintroduction","1.getting-started\u002F1.introduction","i-lucide-book-open",{"title":16,"path":17,"stem":18,"icon":19},"Installation","\u002Fgetting-started\u002Finstallation","1.getting-started\u002F2.installation","i-lucide-download",{"title":21,"path":22,"stem":23,"icon":6},"Quick start: Nuxt","\u002Fgetting-started\u002Fquick-start-nuxt","1.getting-started\u002F3.quick-start-nuxt",{"title":25,"path":26,"stem":27,"icon":6},"Quick start: plain Vue","\u002Fgetting-started\u002Fquick-start-vue","1.getting-started\u002F4.quick-start-vue",{"title":29,"path":30,"stem":31,"icon":6},"Quick start: React","\u002Fgetting-started\u002Fquick-start-react","1.getting-started\u002F5.quick-start-react",{"title":33,"path":34,"stem":35,"icon":36},"Glossary","\u002Fgetting-started\u002Fglossary","1.getting-started\u002F6.glossary","i-lucide-book-a",false,{"title":39,"icon":40,"path":41,"stem":42,"children":43,"page":37},"Tutorial","i-lucide-graduation-cap","\u002Ftutorial","2.tutorial",[44,49,54,59,64,69,74,79],{"title":45,"path":46,"stem":47,"icon":48},"Tutorial: overview","\u002Ftutorial\u002Foverview","2.tutorial\u002F1.overview","i-lucide-map",{"title":50,"path":51,"stem":52,"icon":53},"Chapter 2: A simple editor","\u002Ftutorial\u002Fsimple-editor","2.tutorial\u002F2.simple-editor","i-lucide-pencil",{"title":55,"path":56,"stem":57,"icon":58},"Chapter 3: Compose features","\u002Ftutorial\u002Fcompose-features","2.tutorial\u002F3.compose-features","i-lucide-blocks",{"title":60,"path":61,"stem":62,"icon":63},"Chapter 4: Your own block, path A","\u002Ftutorial\u002Fown-block-path-a","2.tutorial\u002F4.own-block-path-a","i-lucide-square-plus",{"title":65,"path":66,"stem":67,"icon":68},"Chapter 5: Your own feature, path B","\u002Ftutorial\u002Fown-feature-path-b","2.tutorial\u002F5.own-feature-path-b","i-lucide-puzzle",{"title":70,"path":71,"stem":72,"icon":73},"Chapter 6: Backend and collaboration","\u002Ftutorial\u002Fbackend-and-collaboration","2.tutorial\u002F6.backend-and-collaboration","i-lucide-users",{"title":75,"path":76,"stem":77,"icon":78},"Chapter 7: AI","\u002Ftutorial\u002Fai","2.tutorial\u002F7.ai","i-lucide-sparkles",{"title":80,"path":81,"stem":82,"icon":83},"Chapter 8: The React surface","\u002Ftutorial\u002Freact-surface","2.tutorial\u002F8.react-surface","i-lucide-atom",{"title":85,"icon":14,"path":86,"stem":87,"children":88,"page":37},"Guides","\u002Fguides","3.guides",[89,93,98,103,108,112,116,121,126,130,134,139,144,149,154,159,164,169,174,179,184,189,194,199,204,209,213,218,223,228,233,237,242,247,251,256,261,266,271,276,281,286,291,295,302,307,311,316,321],{"title":90,"path":91,"stem":92,"icon":58},"Feature composition and entries","\u002Fguides\u002Fcomposition","3.guides\u002F1.composition",{"title":94,"path":95,"stem":96,"icon":97},"Media, mentions and transcript features","\u002Fguides\u002Fmedia-mentions-transcript","3.guides\u002F10.media-mentions-transcript","i-lucide-image",{"title":99,"path":100,"stem":101,"icon":102},"Authors and comments","\u002Fguides\u002Fauthors-and-comments","3.guides\u002F11.authors-and-comments","i-lucide-message-square-text",{"title":104,"path":105,"stem":106,"icon":107},"Themes (Obsidian)","\u002Fguides\u002Fthemes","3.guides\u002F12.themes","i-lucide-palette",{"title":109,"path":110,"stem":111,"icon":58},"Composites and the settings UI","\u002Fguides\u002Fcomposites","3.guides\u002F13.composites",{"title":113,"path":114,"stem":115,"icon":78},"AI","\u002Fguides\u002Fai","3.guides\u002F14.ai",{"title":117,"path":118,"stem":119,"icon":120},"Document tree","\u002Fguides\u002Fdocument-tree","3.guides\u002F15.document-tree","i-lucide-folder-tree",{"title":122,"path":123,"stem":124,"icon":125},"Markdown and code","\u002Fguides\u002Fmarkdown-and-code","3.guides\u002F16.markdown-and-code","i-lucide-file-code",{"title":127,"path":128,"stem":129,"icon":83},"Advanced editor in React","\u002Fguides\u002Fadvanced-react","3.guides\u002F17.advanced-react",{"title":131,"path":132,"stem":133,"icon":6},"Kitchen sink: learning path","\u002Fguides\u002Fadvanced-nuxt-example","3.guides\u002F18.advanced-nuxt-example",{"title":135,"path":136,"stem":137,"icon":138},"Production","\u002Fguides\u002Fproduction","3.guides\u002F19.production","i-lucide-server",{"title":140,"path":141,"stem":142,"icon":143},"Register the Nuxt module","\u002Fguides\u002Fnuxt-module","3.guides\u002F2.nuxt-module","i-lucide-package",{"title":145,"path":146,"stem":147,"icon":148},"Storage adapters, comment stores, Nitro host","\u002Fguides\u002Fstorage-adapters","3.guides\u002F20.storage-adapters","i-lucide-database",{"title":150,"path":151,"stem":152,"icon":153},"Migrating from #tiptap-editor","\u002Fguides\u002Fmigration","3.guides\u002F21.migration","i-lucide-arrow-right-left",{"title":155,"path":156,"stem":157,"icon":158},"Content tree mechanics","\u002Fguides\u002Fcontent-tree","3.guides\u002F22.content-tree","i-lucide-git-fork",{"title":160,"path":161,"stem":162,"icon":163},"Block capabilities, abilities and actions","\u002Fguides\u002Fblock-capabilities","3.guides\u002F23.block-capabilities","i-lucide-shield-check",{"title":165,"path":166,"stem":167,"icon":168},"Block types in code and JSON","\u002Fguides\u002Fblock-types","3.guides\u002F24.block-types","i-lucide-shapes",{"title":170,"path":171,"stem":172,"icon":173},"Derive methods and the Derivation index","\u002Fguides\u002Fderive-methods","3.guides\u002F25.derive-methods","i-lucide-git-branch-plus",{"title":175,"path":176,"stem":177,"icon":178},"Block properties and Property definitions","\u002Fguides\u002Fblock-properties","3.guides\u002F26.block-properties","i-lucide-sliders-horizontal",{"title":180,"path":181,"stem":182,"icon":183},"Image studio","\u002Fguides\u002Fimage-studio","3.guides\u002F27.image-studio","i-lucide-image-plus",{"title":185,"path":186,"stem":187,"icon":188},"Prüfung and Freigabestatus","\u002Fguides\u002Fpruefung","3.guides\u002F28.pruefung","i-lucide-stamp",{"title":190,"path":191,"stem":192,"icon":193},"Workspace: find, read, reference and embed Blocks across Documents","\u002Fguides\u002Fworkspace","3.guides\u002F29.workspace","i-lucide-network",{"title":195,"path":196,"stem":197,"icon":198},"EditorPorts: auth and storage","\u002Fguides\u002Feditor-ports","3.guides\u002F3.editor-ports","i-lucide-plug",{"title":200,"path":201,"stem":202,"icon":203},"Collections: an ordered list of Blocks","\u002Fguides\u002Fcollections","3.guides\u002F30.collections","i-lucide-list-checks",{"title":205,"path":206,"stem":207,"icon":208},"Data views: a query shown as table, list or board","\u002Fguides\u002Fdata-views","3.guides\u002F31.data-views","i-lucide-table-properties",{"title":210,"path":211,"stem":212,"icon":193},"Explore: backlinks, related Blocks and the trail","\u002Fguides\u002Fexplore","3.guides\u002F32.explore",{"title":214,"path":215,"stem":216,"icon":217},"Render: export a Block or a Document to a file","\u002Fguides\u002Frender","3.guides\u002F33.render","i-lucide-file-output",{"title":219,"path":220,"stem":221,"icon":222},"Importers: what a dropped file becomes","\u002Fguides\u002Fimporters","3.guides\u002F34.importers","i-lucide-file-input",{"title":224,"path":225,"stem":226,"icon":227},"Templates: start a Document from a Dokumentvorlage","\u002Fguides\u002Ftemplates","3.guides\u002F35.templates","i-lucide-file-stack",{"title":229,"path":230,"stem":231,"icon":232},"Citations","\u002Fguides\u002Fcitations","3.guides\u002F36.citations","i-lucide-quote",{"title":234,"path":235,"stem":236,"icon":163},"AI proposals and the export check","\u002Fguides\u002Fexport-check","3.guides\u002F37.export-check",{"title":238,"path":239,"stem":240,"icon":241},"Query: filter, sort, group and total Blocks","\u002Fguides\u002Fquery","3.guides\u002F38.query","i-lucide-list-filter",{"title":243,"path":244,"stem":245,"icon":246},"Edges: backlinks and authored connections","\u002Fguides\u002Fedges","3.guides\u002F39.edges","i-lucide-link-2",{"title":248,"path":249,"stem":250,"icon":163},"Server routes and authentication","\u002Fguides\u002Froutes-and-auth","3.guides\u002F4.routes-and-auth",{"title":252,"path":253,"stem":254,"icon":255},"Speech: text to audio, and subtitle files","\u002Fguides\u002Fspeech","3.guides\u002F41.speech","i-lucide-audio-lines",{"title":257,"path":258,"stem":259,"icon":260},"Graph: the Edges around a Block","\u002Fguides\u002Fgraph","3.guides\u002F42.graph","i-lucide-waypoints",{"title":262,"path":263,"stem":264,"icon":265},"PDF viewer: passages, anchors and quotes","\u002Fguides\u002Fpdf-viewer","3.guides\u002F43.pdf-viewer","i-lucide-file-search",{"title":267,"path":268,"stem":269,"icon":270},"Obsidian: import and export a vault","\u002Fguides\u002Fobsidian","3.guides\u002F44.obsidian","i-lucide-folder-input",{"title":272,"path":273,"stem":274,"icon":275},"Typst: render a Document as a PDF with citations","\u002Fguides\u002Ftypst","3.guides\u002F45.typst","i-lucide-file-text",{"title":277,"path":278,"stem":279,"icon":280},"Audio: read aloud, mixdown and ElevenLabs","\u002Fguides\u002Faudio","3.guides\u002F46.audio","i-lucide-audio-waveform",{"title":282,"path":283,"stem":284,"icon":285},"Slides: decks, slide layouts and exports","\u002Fguides\u002Fslides","3.guides\u002F47.slides","i-lucide-presentation",{"title":287,"path":288,"stem":289,"icon":290},"Knowledge graph: sources and concepts beside the Documents","\u002Fguides\u002Fknowledge-graph","3.guides\u002F49.knowledge-graph","i-lucide-share-2",{"title":292,"path":293,"stem":294,"icon":78},"AI configuration and secrets","\u002Fguides\u002Fai-configuration","3.guides\u002F5.ai-configuration",{"title":296,"path":297,"stem":298,"children":299,"icon":301},"Index on Postgres: typos, meaning and SQL pushdown","\u002Fguides\u002Findex-pg","3.guides\u002F50.index-pg",[300],{"title":296,"path":297,"stem":298,"icon":301},"i-lucide-database-zap",{"title":303,"path":304,"stem":305,"icon":306},"Charts: bar, line, pie and scatter over a query","\u002Fguides\u002Fcharts","3.guides\u002F51.charts","i-lucide-chart-column",{"title":308,"path":309,"stem":310,"icon":73},"Collaboration on the client","\u002Fguides\u002Fcollaboration","3.guides\u002F6.collaboration",{"title":312,"path":313,"stem":314,"icon":315},"Block UI (drag handle, hover actions)","\u002Fguides\u002Fblock-ui","3.guides\u002F7.block-ui","i-lucide-grip-vertical",{"title":317,"path":318,"stem":319,"icon":320},"Settings and app lifetime","\u002Fguides\u002Fsettings","3.guides\u002F8.settings","i-lucide-settings",{"title":322,"path":323,"stem":324,"icon":325},"Language","\u002Fguides\u002Flanguage","3.guides\u002F9.language","i-lucide-languages",{"title":327,"icon":14,"path":328,"stem":329,"children":330,"page":37},"Reference","\u002Freference","4.reference",[331,335,339,344,348,352,356,360,364,368,373,378,382],{"title":332,"path":333,"stem":334,"icon":143},"Public exports","\u002Freference\u002Fexports","4.reference\u002F1.exports",{"title":336,"path":337,"stem":338,"icon":173},"Derive method contract","\u002Freference\u002Fderive-methods","4.reference\u002F10.derive-methods",{"title":340,"path":341,"stem":342,"icon":343},"Changelog","\u002Freference\u002Fchangelog","4.reference\u002F11.changelog","i-lucide-history",{"title":345,"path":346,"stem":347,"icon":217},"Renderer port","\u002Freference\u002Frenderer-port","4.reference\u002F12.renderer-port",{"title":349,"path":350,"stem":351,"icon":255},"Speech port","\u002Freference\u002Fspeech-port","4.reference\u002F13.speech-port",{"title":353,"path":354,"stem":355,"icon":58},"Presets and features","\u002Freference\u002Fpresets-and-features","4.reference\u002F2.presets-and-features",{"title":357,"path":358,"stem":359,"icon":68},"Feature contract","\u002Freference\u002Ffeature-contract","4.reference\u002F3.feature-contract",{"title":361,"path":362,"stem":363,"icon":107},"CSS and UI-provider requirements","\u002Freference\u002Fcss-and-ui","4.reference\u002F4.css-and-ui",{"title":365,"path":366,"stem":367,"icon":148},"Vue-free advanced schema","\u002Freference\u002Fadvanced-schema","4.reference\u002F5.advanced-schema",{"title":369,"path":370,"stem":371,"icon":372},"Dependency rules","\u002Freference\u002Fdependency-rules","4.reference\u002F6.dependency-rules","i-lucide-git-branch",{"title":374,"path":375,"stem":376,"icon":377},"Commands","\u002Freference\u002Fcommands","4.reference\u002F7.commands","i-lucide-terminal",{"title":379,"path":380,"stem":381,"icon":163},"Block capability contract","\u002Freference\u002Fblock-capabilities","4.reference\u002F8.block-capabilities",{"title":383,"path":384,"stem":385,"icon":168},"Block type contract","\u002Freference\u002Fblock-types","4.reference\u002F9.block-types",{"title":387,"path":388,"stem":389,"children":390,"icon":393},"AI agents","\u002Fai-agents","5.ai-agents\u002F1.index",[391,394,398,402,407],{"title":392,"path":388,"stem":389,"icon":393},"Overview","i-lucide-bot",{"title":395,"path":396,"stem":397,"icon":198},"Integrate the editor","\u002Fai-agents\u002Fintegrate","5.ai-agents\u002F2.integrate",{"title":399,"path":400,"stem":401,"icon":68},"Add a block or feature","\u002Fai-agents\u002Fextend","5.ai-agents\u002F3.extend",{"title":403,"path":404,"stem":405,"icon":406},"Pitfalls and invariants","\u002Fai-agents\u002Finvariants","5.ai-agents\u002F4.invariants","i-lucide-shield-alert",{"title":408,"path":409,"stem":410,"icon":411},"Verify","\u002Fai-agents\u002Fverify","5.ai-agents\u002F5.verify","i-lucide-check-check",{"id":413,"title":349,"body":414,"description":1169,"extension":1170,"links":1171,"meta":1172,"navigation":1173,"path":350,"seo":1174,"stem":351,"__hash__":1175},"docs\u002F4.reference\u002F13.speech-port.md",{"type":415,"value":416,"toc":1157},"minimark",[417,446,453,474,569,573,714,718,793,827,831,899,905,968,973,1080,1087],[418,419,420,421,425,426,429,430,425,433,436,437,440,441,445],"p",{},"The server types come from ",[422,423,424],"code",{},"packages\u002Feditor\u002Fsrc\u002Fserver\u002Fports.ts"," (",[422,427,428],{},"@skaile\u002Fforge-editor\u002Fserver","), the wire types from ",[422,431,432],{},"packages\u002Feditor\u002Fsrc\u002Fcore\u002Fbackend-types.ts",[422,434,435],{},"@skaile\u002Fforge-editor\u002Fcore","), the adapters from ",[422,438,439],{},"@skaile\u002Fforge-editor\u002Fadapters\u002Fspeech",". For how to provide a port and what the editor shows, see ",[442,443,444],"a",{"href":253},"Speech",".",[447,448,450],"h2",{"id":449},"speechprovider",[422,451,452],{},"SpeechProvider",[418,454,455,458,459,462,463,466,467,470,471,445],{},[422,456,457],{},"EditorPorts.speech"," (capability ",[422,460,461],{},"speech","). The audio is stored through ",[422,464,465],{},"EditorPorts.assets","; without it ",[422,468,469],{},"POST \u002Fapi\u002Feditor\u002Fspeech"," answers ",[422,472,473],{},"501",[475,476,477,493],"table",{},[478,479,480],"thead",{},[481,482,483,487,490],"tr",{},[484,485,486],"th",{},"Member",[484,488,489],{},"Type",[484,491,492],{},"Meaning",[494,495,496,512,551],"tbody",{},[481,497,498,504,509],{},[499,500,501],"td",{},[422,502,503],{},"engines",[499,505,506],{},[422,507,508],{},"(user: object) => Promise\u003CSpeechEngineInfo[]>",[499,510,511],{},"The engines this user may use, each with its voices.",[481,513,514,519,524],{},[499,515,516],{},[422,517,518],{},"synthesize",[499,520,521],{},[422,522,523],{},"(request: SpeechRequest, user: object, signal: AbortSignal) => Promise\u003C{ data: Uint8Array, mime: string }>",[499,525,526,527,530,531,534,535,538,539,542,543,546,547,550],{},"Reads ",[422,528,529],{},"request.text"," with ",[422,532,533],{},"request.voice"," of ",[422,536,537],{},"request.engine",". ",[422,540,541],{},"signal"," aborts when the client goes away. Throw to fail the synthesis: the message reaches the client. Throw ",[422,544,545],{},"HttpError"," ",[422,548,549],{},"404"," for an unknown engine or voice.",[481,552,553,558,563],{},[499,554,555],{},[422,556,557],{},"transcribe",[499,559,560],{},[422,561,562],{},"(audio: Uint8Array, mime: string, user: object) => Promise\u003C{ segments: SpeechSegment[] }>",[499,564,565,566,445],{},"Optional. The timed text of ",[422,567,568],{},"audio",[447,570,572],{"id":571},"types","Types",[475,574,575,584],{},[478,576,577],{},[481,578,579,581],{},[484,580,489],{},[484,582,583],{},"Fields",[494,585,586,626,647,668,680,696],{},[481,587,588,593],{},[499,589,590],{},[422,591,592],{},"SpeechEngineInfo",[499,594,595,598,599,602,603,606,607,610,611,614,615,618,619,622,623,625],{},[422,596,597],{},"id",", ",[422,600,601],{},"label"," (already in the user's language), ",[422,604,605],{},"voices: SpeechVoice[]",", optional ",[422,608,609],{},"formats"," (the formats it makes; absent: ",[422,612,613],{},"mp3"," and ",[422,616,617],{},"wav","; ",[422,620,621],{},"createMemorySpeech"," lists ",[422,624,617],{},")",[481,627,628,633],{},[499,629,630],{},[422,631,632],{},"SpeechVoice",[499,634,635,598,637,598,639,642,643,646],{},[422,636,597],{},[422,638,601],{},[422,640,641],{},"lang"," (BCP 47, ",[422,644,645],{},"und"," for any language)",[481,648,649,654],{},[499,650,651],{},[422,652,653],{},"SpeechRequest",[499,655,656,598,659,598,662,598,665],{},[422,657,658],{},"engine",[422,660,661],{},"voice",[422,663,664],{},"text",[422,666,667],{},"format: SpeechFormat",[481,669,670,675],{},[499,671,672],{},[422,673,674],{},"SpeechFormat",[499,676,677],{},[422,678,679],{},"'mp3' | 'wav'",[481,681,682,687],{},[499,683,684],{},[422,685,686],{},"SpeechBody",[499,688,689,691,692,695],{},[422,690,653],{}," plus ",[422,693,694],{},"documentId",", the Document the audio is stored under",[481,697,698,703],{},[499,699,700],{},[422,701,702],{},"SpeechSegment",[499,704,705,598,708,711,712],{},[422,706,707],{},"start",[422,709,710],{},"end"," (seconds into the audio), ",[422,713,664],{},[447,715,717],{"id":716},"routes","Routes",[475,719,720,737],{},[478,721,722],{},[481,723,724,731,734],{},[484,725,726,727,730],{},"Route (",[422,728,729],{},"API"," key)",[484,732,733],{},"Request",[484,735,736],{},"Answer",[494,738,739,757],{},[481,740,741,749,752],{},[499,742,743,425,746,625],{},[422,744,745],{},"GET \u002Fapi\u002Feditor\u002Fspeech\u002Fengines",[422,747,748],{},"speechEngines",[499,750,751],{},"none",[499,753,754],{},[422,755,756],{},"SpeechEngineInfo[]",[481,758,759,766,770],{},[499,760,761,425,763,625],{},[422,762,469],{},[422,764,765],{},"speechSynthesize",[499,767,768],{},[422,769,686],{},[499,771,772,773,546,776,779,780,546,783,786,787,546,790],{},"SSE: ",[422,774,775],{},"progress",[422,777,778],{},"{ phase: string, percent?: number }",", then ",[422,781,782],{},"done",[422,784,785],{},"{ asset: string, fileName: string, mime: string }"," or ",[422,788,789],{},"error",[422,791,792],{},"{ message: string }",[418,794,795,796,799,800,598,803,598,806,598,809,811,812,815,816,819,820,822,823,826],{},"Both routes are served only when ",[422,797,798],{},"ports.speech"," is present. Refusals before the stream starts: ",[422,801,802],{},"400",[422,804,805],{},"401",[422,807,808],{},"403",[422,810,549],{}," (unknown engine or voice), ",[422,813,814],{},"429"," (daily budget, with ",[422,817,818],{},"Retry-After"," in seconds), ",[422,821,473],{}," (no ",[422,824,825],{},"assets"," port).",[447,828,830],{"id":829},"daily-budget","Daily budget",[475,832,833,844],{},[478,834,835],{},[481,836,837,842],{},[484,838,839,840,625],{},"Export (",[422,841,428],{},[484,843,492],{},[494,845,846,859,885],{},[481,847,848,853],{},[499,849,850],{},[422,851,852],{},"SPEECH_CHARS_PER_DAY",[499,854,855,858],{},[422,856,857],{},"50_000",", the characters one user may synthesize per UTC day.",[481,860,861,866],{},[499,862,863],{},[422,864,865],{},"createSpeechBudget({ limit?, now? })",[499,867,868,869,872,873,876,877,880,881,884],{},"A ",[422,870,871],{},"SpeechBudget"," held in memory. ",[422,874,875],{},"charge(key, chars)"," returns ",[422,878,879],{},"0"," when the characters fit, else the seconds until UTC midnight (at least 1) and counts nothing. ",[422,882,883],{},"refund(key, chars)"," gives characters back after a failed synthesis.",[481,886,887,892],{},[499,888,889],{},[422,890,891],{},"HandlerContext.speechBudget",[499,893,894,895,898],{},"The budget the speech handler uses. Without it one budget per ",[422,896,897],{},"ports"," object applies, with the default limit.",[447,900,902],{"id":901},"editorbackendspeech",[422,903,904],{},"EditorBackend['speech']",[475,906,907,917],{},[478,908,909],{},[481,910,911,913,915],{},[484,912,486],{},[484,914,489],{},[484,916,492],{},[494,918,919,933],{},[481,920,921,925,930],{},[499,922,923],{},[422,924,503],{},[499,926,927],{},[422,928,929],{},"(signal?) => Promise\u003CSpeechEngineInfo[]>",[499,931,932],{},"The engines and voices of the user.",[481,934,935,939,944],{},[499,936,937],{},[422,938,518],{},[499,940,941],{},[422,942,943],{},"(request: SpeechBody, { onProgress?, signal? }?) => Promise\u003CRenderResult>",[499,945,946,947,950,951,425,954,598,957,598,960,963,964,967],{},"Streams one synthesis; ",[422,948,949],{},"RenderResult"," is ",[422,952,953],{},"RenderDone",[422,955,956],{},"asset",[422,958,959],{},"fileName",[422,961,962],{},"mime",") plus the ",[422,965,966],{},"url"," of the stored asset. Rejects with the server's message when it fails.",[447,969,971],{"id":970},"skaileforge-editoradaptersspeech",[422,972,439],{},[475,974,975,984],{},[478,976,977],{},[481,978,979,982],{},[484,980,981],{},"Export",[484,983,492],{},[494,985,986,1029,1039,1067],{},[481,987,988,993],{},[499,989,990],{},[422,991,992],{},"createOpenAiSpeech(options)",[499,994,868,995,997,998,1001,1002,598,1005,598,1008,598,1011,1014,1015,1018,1019,598,1022,598,1025,1028],{},[422,996,452],{}," over ",[422,999,1000],{},"POST \u003Cendpoint>\u002Faudio\u002Fspeech",". Options ",[422,1003,1004],{},"endpoint",[422,1006,1007],{},"model",[422,1009,1010],{},"apiKey?",[422,1012,1013],{},"id?"," (default ",[422,1016,1017],{},"openai","), ",[422,1020,1021],{},"label?",[422,1023,1024],{},"voices?",[422,1026,1027],{},"fetch?",". An upstream error rejects with its status and the first 300 characters of its body.",[481,1030,1031,1036],{},[499,1032,1033],{},[422,1034,1035],{},"OPENAI_VOICES",[499,1037,1038],{},"The voices of OpenAI's speech models.",[481,1040,1041,1046],{},[499,1042,1043],{},[422,1044,1045],{},"createMemorySpeech(options?)",[499,1047,868,1048,1050,1051,1053,1054,1057,1058,538,1061,1063,1064,445],{},[422,1049,452],{}," that answers one second of silence as WAV; option ",[422,1052,503],{},". Default engine ",[422,1055,1056],{},"memory",", voice ",[422,1059,1060],{},"silent",[422,1062,613],{}," is refused with ",[422,1065,1066],{},"422",[481,1068,1069,1074],{},[499,1070,1071],{},[422,1072,1073],{},"silentWav(seconds?)",[499,1075,1076,1077,445],{},"The silent mono 16-bit WAV (8 kHz) as ",[422,1078,1079],{},"Uint8Array",[447,1081,1083,1084,625],{"id":1082},"subtitle-export-skaileforge-editortranscript","Subtitle export (",[422,1085,1086],{},"@skaile\u002Fforge-editor\u002Ftranscript",[475,1088,1089,1097],{},[478,1090,1091],{},[481,1092,1093,1095],{},[484,1094,981],{},[484,1096,492],{},[494,1098,1099,1112,1124,1141],{},[481,1100,1101,1106],{},[499,1102,1103],{},[422,1104,1105],{},"vttOf(cues)",[499,1107,1108,1109,445],{},"WebVTT text of ",[422,1110,1111],{},"TranscriptCue[]",[481,1113,1114,1119],{},[499,1115,1116],{},[422,1117,1118],{},"srtOf(cues)",[499,1120,1121,1122,445],{},"SubRip text of ",[422,1123,1111],{},[481,1125,1126,1131],{},[499,1127,1128],{},[422,1129,1130],{},"transcriptCuesOf(node)",[499,1132,1133,1134,1136,1137,1140],{},"The ",[422,1135,1111],{}," of the timed ",[422,1138,1139],{},"transcriptSegment","s in a node.",[481,1142,1143,1148],{},[499,1144,1145],{},[422,1146,1147],{},"TranscriptCue",[499,1149,1150,1153,1154,1156],{},[422,1151,1152],{},"{ start, end, text, speaker? }",", seconds. A ",[422,1155,702],{}," fits.",{"title":1158,"searchDepth":1159,"depth":1159,"links":1160},"",2,[1161,1162,1163,1164,1165,1166,1167],{"id":449,"depth":1159,"text":452},{"id":571,"depth":1159,"text":572},{"id":716,"depth":1159,"text":717},{"id":829,"depth":1159,"text":830},{"id":901,"depth":1159,"text":904},{"id":970,"depth":1159,"text":439},{"id":1082,"depth":1159,"text":1168},"Subtitle export (@skaile\u002Fforge-editor\u002Ftranscript)","The SpeechProvider, SpeechEngineInfo and SpeechRequest types, the speech routes and events, the daily budget, and the createOpenAiSpeech and createMemorySpeech adapters.","md",null,{},{"icon":255},{"title":349,"description":1169},"xGPkLQQgvMiqaHK_jTHHf68Lu2IJe1OeV96Gn5f_FSA",[1177,1179],{"title":345,"path":346,"stem":347,"description":1178,"icon":217,"children":-1},"The Renderer, RenderTargetInfo and RenderInput types, the render routes and events, and the createRenderer and markdownTarget adapter.",{"title":353,"path":354,"stem":355,"description":1180,"icon":58,"children":-1},"Which features each preset contains, which backend it needs and which modules its bundle must not contain.",1793178238158]