AI Voice Designer
Run ID: 69cccce93e7fb09ff16a53382026-04-01Design
PantheraHive BOS
BOS Dashboard

Design a completely custom AI voice by describing the characteristics you want

AI Voice Designer: Detailed Output for Custom Voice Design

This document outlines the detailed specifications, interface design, and user experience recommendations for creating a completely custom AI voice using the ElevenLabs platform (or a similar advanced voice synthesis engine). The goal is to provide a comprehensive and actionable blueprint for a professional, versatile, and highly customizable AI voice.


1. Detailed AI Voice Design Specifications: "Panthera Prime"

We will design a foundational voice profile named "Panthera Prime" as an exemplary custom voice. This voice is engineered for broad applicability, professional contexts, and a sophisticated emotional range.

  • Voice Name: Panthera Prime
  • Target Persona: Professional, Authoritative, Approachable, Intelligent, Versatile.
  • Core Characteristics:

* Gender: Neutral-leaning Male (can be finely adjusted towards more masculine or feminine traits without losing core neutrality).

* Age Range: Adult (mid-30s to early 40s) – suggesting maturity and experience.

* Accent: Standard American English (General American). Clear, crisp, and free from strong regionalisms, ensuring global intelligibility.

* Pitch: Mid-range, comfortable, and well-modulated. Not too high or too low, avoiding monotony.

* Pace: Moderate and adaptable. Capable of natural variations in speed to emphasize points or convey different moods, without sounding rushed or overly slow.

* Timbre:

* Clarity: Exceptionally clear and articulate, ensuring every word is easily understood.

* Warmth: A pleasant, inviting warmth that fosters trust and engagement.

* Smoothness: Silky smooth delivery, free from harshness or excessive breathiness.

* Resonance: Rich, full-bodied resonance that gives the voice depth and presence.

* Volume: Consistent and well-projected, suitable for various listening environments.

  • Emotional Range & Nuance:

* Default State: Professional, informative, calm, and confident.

* Capable of Conveying:

* Sincerity/Empathy: Subtle shifts in tone for empathetic responses, without sounding artificial.

* Enthusiasm/Motivation: Controlled energy for engaging presentations or motivational content.

* Seriousness/Gravity: A more grounded, somber tone for sensitive or critical information.

* Calmness/Reassurance: A soothing, steady delivery for stressful situations or guided meditations.

* Light-heartedness: A touch of gentle humor or conversational ease when appropriate.

Key Principle: All emotional expressions should be subtle and natural*, avoiding exaggerated or theatrical delivery. The goal is human-like nuance.

  • Ideal Use Cases:

* Corporate Narrations & Presentations

* E-learning Modules & Audiobooks

* AI Assistants & Chatbots (Customer Service, IVR)

* Podcast Introductions, Outros, & Segments

* Marketing & Explainer Videos

* Public Service Announcements

* Virtual Event Hosting

  • Unique Characteristics & Anti-Goals:

* Pronunciation: Excellent handling of complex terminology, acronyms, and foreign words with consistent pronunciation.

* Inflection: Natural rise and fall of intonation, avoiding a flat or robotic cadence.

* Pausing: Intelligent and context-aware pausing for readability and emphasis.

* Consistency: Maintains character and quality across extended periods of narration.

* Anti-Goals: Avoid sounding monotonous, overly synthetic, overtly theatrical, or having any strong regional dialect that would limit its universal appeal.


2. Wireframe Descriptions for the Voice Design Interface

The interface will be designed for intuitive control and immediate feedback, allowing users to sculpt their ideal voice.

2.1. Layout & Core Sections

  • Main Layout: A two-column, responsive layout. The left column (or top section on smaller screens) will house all voice parameter controls, while the right column (or bottom section) will be dedicated to text input, preview, and output options.
  • Header:

* Logo/Brand: PantheraHive/ElevenLabs branding.

* Voice Name Display: "Panthera Prime" (editable text field).

* Save/Share Buttons: Prominent "Save Voice Profile" and "Share" options.

* Credits/Usage Indicator: Real-time display of estimated character usage for the current voice.

2.2. Left Column: Voice Parameter Controls

  • A. Basic Characteristics (Sliders & Dropdowns):

* Gender: Horizontal slider with labels "Feminine <-> Masculine" and a central "Neutral" point.

* Age: Horizontal slider with labels "Young <-> Mature" and specific age range indicators (e.g., 20s, 30s, 40s, 50s+).

* Accent: Dropdown menu with a comprehensive list of accents (e.g., "Standard American", "British RP", "Australian", "Indian English", etc.).

* Pitch: Horizontal slider "Lower <-> Higher".

* Pace: Horizontal slider "Slower <-> Faster".

* Volume: Horizontal slider "Softer <-> Louder".

  • B. Timbre & Tone (Multi-Axis Sliders/Descriptors):

* Clarity: Horizontal slider "Muted <-> Articulate".

* Warmth: Horizontal slider "Cool <-> Warm".

* Smoothness: Horizontal slider "Textured <-> Smooth".

* Resonance: Horizontal slider "Thin <-> Rich".

* Breathiness: Horizontal slider "Less <-> More".

* Vocal Fry: Horizontal slider "Absent <-> Present".

  • C. Emotional Range & Style (Presets & Fine-tuning):

* Style Presets (Radio Buttons/Dropdown):

* "Professional Narrator" (default)

* "Friendly AI Assistant"

* "Empathetic Guide"

* "Energetic Presenter"

* "Calm & Reassuring"

* "Custom" (activates fine-tuning sliders below)

* Emotional Fine-tuning (Sliders, visible when "Custom" is selected):

* "Enthusiasm": Low <-> High

* "Seriousness": Low <-> High

* "Calmness": Low <-> High

* "Empathy": Low <-> High

* "Confidence": Low <-> High

* Intensity Slider: Global slider "Subtle <-> Pronounced" for the selected emotions.

  • D. Advanced Settings (Collapsible Section):

* Pronunciation Editor: Link to a dedicated interface for custom lexicon/pronunciation rules (e.g., "AI" pronounced "A. I." vs. "A.Y.").

* Pause Duration Control: Sliders for short, medium, and long pauses.

* Speech-to-Text Conversion (Optional): Input an audio file to analyze and suggest initial voice parameters.

* Voice Cloning (If available): Option to upload a longer audio sample for custom voice cloning/transfer learning.

2.3. Right Column: Preview & Output

  • A. Text Input Area:

* Large, multi-line text area with a character count.

* Placeholder text: "Enter text to preview your custom voice here..."

* "Generate Preview" Button: Prominently displayed below the text area.

  • B. Audio Player:

* Standard audio controls: Play/Pause, Stop, Volume, Seek bar with current time/total duration.

* Waveform Visualization: Real-time visual representation of the audio being played.

  • C. Output & Actions:

* "Download Audio" Button: Download the current preview as an MP3/WAV.

* "Integrate Voice (API/SDK)" Button: Provides code snippets and API keys for integrating the designed voice into applications.

* "Compare Voices" Button: Allows side-by-side comparison with other saved voices or stock voices.

* "Reset to Default" Button: Reverts all parameters to initial "Panthera Prime" settings.


3. Color Palettes

The color scheme aims for a professional, modern, and engaging aesthetic, ensuring excellent readability and user comfort.

3.1. Primary Palette (Professional & Trustworthy)

  • Primary Background: Deep Navy Blue (#1A2E47) or Charcoal Gray (#2C3E50) - Used for main layout backgrounds, headers.
  • Accent Color: Vibrant Teal (#00B8D4) or Azure Blue (#007bff) - For interactive elements (buttons, sliders, selected states), highlights, and branding.
  • Text Color (on dark background): Soft White (#F8F8F8) or Light Gray (#E0E0E0) - Ensures high contrast and readability.
  • Card/Section Background: Light Gray (#EEEEEE) or Off-White (#FFFFFF) - For individual parameter cards or content sections, providing visual separation.
  • Secondary Text (on light background): Dark Gray (#333333) or #4A4A4A.
  • Borders/Dividers: Subtle Gray (#5A6F8F) or Lighter Gray (#D0D0D0).

3.2. Secondary Palette (Warm & Engaging - for accents or alternative themes)

  • Dominant: Muted Indigo (#3F51B5) or Dark Slate Gray (#4A4E69).
  • Accent: Warm Gold (#FFC107) or Sunset Orange (#FF9800) - For call-to-action buttons, warnings, or specific highlights.
  • Text/Backgrounds: Similar contrast principles as the primary palette.

3.3. Status Colors

  • Success: Bright Green (#4CAF50)
  • Error:
ai_voice_designer.md
Download as Markdown
Copy all content
Full output as text
Download ZIP
IDE-ready project ZIP
Copy share link
Permanent URL for this run
Get Embed Code
Embed this result on any website
Print / Save PDF
Use browser print dialog
"); var hasSrcMain=Object.keys(extracted).some(function(k){return k.indexOf("src/main")>=0;}); if(!hasSrcMain) zip.file(folder+"src/main."+ext,"import React from 'react' import ReactDOM from 'react-dom/client' import App from './App' import './index.css' ReactDOM.createRoot(document.getElementById('root')!).render( ) "); var hasSrcApp=Object.keys(extracted).some(function(k){return k==="src/App."+ext||k==="App."+ext;}); if(!hasSrcApp) zip.file(folder+"src/App."+ext,"import React from 'react' import './App.css' function App(){ return(

"+slugTitle(pn)+"

Built with PantheraHive BOS

) } export default App "); zip.file(folder+"src/index.css","*{margin:0;padding:0;box-sizing:border-box} body{font-family:system-ui,-apple-system,sans-serif;background:#f0f2f5;color:#1a1a2e} .app{min-height:100vh;display:flex;flex-direction:column} .app-header{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:12px;padding:40px} h1{font-size:2.5rem;font-weight:700} "); zip.file(folder+"src/App.css",""); zip.file(folder+"src/components/.gitkeep",""); zip.file(folder+"src/pages/.gitkeep",""); zip.file(folder+"src/hooks/.gitkeep",""); Object.keys(extracted).forEach(function(p){ var fp=p.startsWith("src/")?p:"src/"+p; zip.file(folder+fp,extracted[p]); }); zip.file(folder+"README.md","# "+slugTitle(pn)+" Generated by PantheraHive BOS. ## Setup ```bash npm install npm run dev ``` ## Build ```bash npm run build ``` ## Open in IDE Open the project folder in VS Code or WebStorm. "); zip.file(folder+".gitignore","node_modules/ dist/ .env .DS_Store *.local "); } /* --- Vue (Vite + Composition API + TypeScript) --- */ function buildVue(zip,folder,app,code,panelTxt){ var pn=pkgName(app); var C=cc(pn); var extracted=extractCode(panelTxt); zip.file(folder+"package.json",'{ "name": "'+pn+'", "version": "0.0.0", "type": "module", "scripts": { "dev": "vite", "build": "vue-tsc -b && vite build", "preview": "vite preview" }, "dependencies": { "vue": "^3.5.13", "vue-router": "^4.4.5", "pinia": "^2.3.0", "axios": "^1.7.9" }, "devDependencies": { "@vitejs/plugin-vue": "^5.2.1", "typescript": "~5.7.3", "vite": "^6.0.5", "vue-tsc": "^2.2.0" } } '); zip.file(folder+"vite.config.ts","import { defineConfig } from 'vite' import vue from '@vitejs/plugin-vue' import { resolve } from 'path' export default defineConfig({ plugins: [vue()], resolve: { alias: { '@': resolve(__dirname,'src') } } }) "); zip.file(folder+"tsconfig.json",'{"files":[],"references":[{"path":"./tsconfig.app.json"},{"path":"./tsconfig.node.json"}]} '); zip.file(folder+"tsconfig.app.json",'{ "compilerOptions":{ "target":"ES2020","useDefineForClassFields":true,"module":"ESNext","lib":["ES2020","DOM","DOM.Iterable"], "skipLibCheck":true,"moduleResolution":"bundler","allowImportingTsExtensions":true, "isolatedModules":true,"moduleDetection":"force","noEmit":true,"jsxImportSource":"vue", "strict":true,"paths":{"@/*":["./src/*"]} }, "include":["src/**/*.ts","src/**/*.d.ts","src/**/*.tsx","src/**/*.vue"] } '); zip.file(folder+"env.d.ts","/// "); zip.file(folder+"index.html"," "+slugTitle(pn)+"
"); var hasMain=Object.keys(extracted).some(function(k){return k==="src/main.ts"||k==="main.ts";}); if(!hasMain) zip.file(folder+"src/main.ts","import { createApp } from 'vue' import { createPinia } from 'pinia' import App from './App.vue' import './assets/main.css' const app = createApp(App) app.use(createPinia()) app.mount('#app') "); var hasApp=Object.keys(extracted).some(function(k){return k.indexOf("App.vue")>=0;}); if(!hasApp) zip.file(folder+"src/App.vue"," "); zip.file(folder+"src/assets/main.css","*{margin:0;padding:0;box-sizing:border-box}body{font-family:system-ui,sans-serif;background:#fff;color:#213547} "); zip.file(folder+"src/components/.gitkeep",""); zip.file(folder+"src/views/.gitkeep",""); zip.file(folder+"src/stores/.gitkeep",""); Object.keys(extracted).forEach(function(p){ var fp=p.startsWith("src/")?p:"src/"+p; zip.file(folder+fp,extracted[p]); }); zip.file(folder+"README.md","# "+slugTitle(pn)+" Generated by PantheraHive BOS. ## Setup ```bash npm install npm run dev ``` ## Build ```bash npm run build ``` Open in VS Code or WebStorm. "); zip.file(folder+".gitignore","node_modules/ dist/ .env .DS_Store *.local "); } /* --- Angular (v19 standalone) --- */ function buildAngular(zip,folder,app,code,panelTxt){ var pn=pkgName(app); var C=cc(pn); var sel=pn.replace(/_/g,"-"); var extracted=extractCode(panelTxt); zip.file(folder+"package.json",'{ "name": "'+pn+'", "version": "0.0.0", "scripts": { "ng": "ng", "start": "ng serve", "build": "ng build", "test": "ng test" }, "dependencies": { "@angular/animations": "^19.0.0", "@angular/common": "^19.0.0", "@angular/compiler": "^19.0.0", "@angular/core": "^19.0.0", "@angular/forms": "^19.0.0", "@angular/platform-browser": "^19.0.0", "@angular/platform-browser-dynamic": "^19.0.0", "@angular/router": "^19.0.0", "rxjs": "~7.8.0", "tslib": "^2.3.0", "zone.js": "~0.15.0" }, "devDependencies": { "@angular-devkit/build-angular": "^19.0.0", "@angular/cli": "^19.0.0", "@angular/compiler-cli": "^19.0.0", "typescript": "~5.6.0" } } '); zip.file(folder+"angular.json",'{ "$schema": "./node_modules/@angular/cli/lib/config/schema.json", "version": 1, "newProjectRoot": "projects", "projects": { "'+pn+'": { "projectType": "application", "root": "", "sourceRoot": "src", "prefix": "app", "architect": { "build": { "builder": "@angular-devkit/build-angular:application", "options": { "outputPath": "dist/'+pn+'", "index": "src/index.html", "browser": "src/main.ts", "tsConfig": "tsconfig.app.json", "styles": ["src/styles.css"], "scripts": [] } }, "serve": {"builder":"@angular-devkit/build-angular:dev-server","configurations":{"production":{"buildTarget":"'+pn+':build:production"},"development":{"buildTarget":"'+pn+':build:development"}},"defaultConfiguration":"development"} } } } } '); zip.file(folder+"tsconfig.json",'{ "compileOnSave": false, "compilerOptions": {"baseUrl":"./","outDir":"./dist/out-tsc","forceConsistentCasingInFileNames":true,"strict":true,"noImplicitOverride":true,"noPropertyAccessFromIndexSignature":true,"noImplicitReturns":true,"noFallthroughCasesInSwitch":true,"paths":{"@/*":["src/*"]},"skipLibCheck":true,"esModuleInterop":true,"sourceMap":true,"declaration":false,"experimentalDecorators":true,"moduleResolution":"bundler","importHelpers":true,"target":"ES2022","module":"ES2022","useDefineForClassFields":false,"lib":["ES2022","dom"]}, "references":[{"path":"./tsconfig.app.json"}] } '); zip.file(folder+"tsconfig.app.json",'{ "extends":"./tsconfig.json", "compilerOptions":{"outDir":"./dist/out-tsc","types":[]}, "files":["src/main.ts"], "include":["src/**/*.d.ts"] } '); zip.file(folder+"src/index.html"," "+slugTitle(pn)+" "); zip.file(folder+"src/main.ts","import { bootstrapApplication } from '@angular/platform-browser'; import { appConfig } from './app/app.config'; import { AppComponent } from './app/app.component'; bootstrapApplication(AppComponent, appConfig) .catch(err => console.error(err)); "); zip.file(folder+"src/styles.css","* { margin: 0; padding: 0; box-sizing: border-box; } body { font-family: system-ui, -apple-system, sans-serif; background: #f9fafb; color: #111827; } "); var hasComp=Object.keys(extracted).some(function(k){return k.indexOf("app.component")>=0;}); if(!hasComp){ zip.file(folder+"src/app/app.component.ts","import { Component } from '@angular/core'; import { RouterOutlet } from '@angular/router'; @Component({ selector: 'app-root', standalone: true, imports: [RouterOutlet], templateUrl: './app.component.html', styleUrl: './app.component.css' }) export class AppComponent { title = '"+pn+"'; } "); zip.file(folder+"src/app/app.component.html","

"+slugTitle(pn)+"

Built with PantheraHive BOS

"); zip.file(folder+"src/app/app.component.css",".app-header{display:flex;flex-direction:column;align-items:center;justify-content:center;min-height:60vh;gap:16px}h1{font-size:2.5rem;font-weight:700;color:#6366f1} "); } zip.file(folder+"src/app/app.config.ts","import { ApplicationConfig, provideZoneChangeDetection } from '@angular/core'; import { provideRouter } from '@angular/router'; import { routes } from './app.routes'; export const appConfig: ApplicationConfig = { providers: [ provideZoneChangeDetection({ eventCoalescing: true }), provideRouter(routes) ] }; "); zip.file(folder+"src/app/app.routes.ts","import { Routes } from '@angular/router'; export const routes: Routes = []; "); Object.keys(extracted).forEach(function(p){ var fp=p.startsWith("src/")?p:"src/"+p; zip.file(folder+fp,extracted[p]); }); zip.file(folder+"README.md","# "+slugTitle(pn)+" Generated by PantheraHive BOS. ## Setup ```bash npm install ng serve # or: npm start ``` ## Build ```bash ng build ``` Open in VS Code with Angular Language Service extension. "); zip.file(folder+".gitignore","node_modules/ dist/ .env .DS_Store *.local .angular/ "); } /* --- Python --- */ function buildPython(zip,folder,app,code){ var title=slugTitle(app); var pn=pkgName(app); var src=code.replace(/^```[w]* ?/m,"").replace(/ ?```$/m,"").trim(); var reqMap={"numpy":"numpy","pandas":"pandas","sklearn":"scikit-learn","tensorflow":"tensorflow","torch":"torch","flask":"flask","fastapi":"fastapi","uvicorn":"uvicorn","requests":"requests","sqlalchemy":"sqlalchemy","pydantic":"pydantic","dotenv":"python-dotenv","PIL":"Pillow","cv2":"opencv-python","matplotlib":"matplotlib","seaborn":"seaborn","scipy":"scipy"}; var reqs=[]; Object.keys(reqMap).forEach(function(k){if(src.indexOf("import "+k)>=0||src.indexOf("from "+k)>=0)reqs.push(reqMap[k]);}); var reqsTxt=reqs.length?reqs.join(" "):"# add dependencies here "; zip.file(folder+"main.py",src||"# "+title+" # Generated by PantheraHive BOS print(title+" loaded") "); zip.file(folder+"requirements.txt",reqsTxt); zip.file(folder+".env.example","# Environment variables "); zip.file(folder+"README.md","# "+title+" Generated by PantheraHive BOS. ## Setup ```bash python3 -m venv .venv source .venv/bin/activate pip install -r requirements.txt ``` ## Run ```bash python main.py ``` "); zip.file(folder+".gitignore",".venv/ __pycache__/ *.pyc .env .DS_Store "); } /* --- Node.js --- */ function buildNode(zip,folder,app,code){ var title=slugTitle(app); var pn=pkgName(app); var src=code.replace(/^```[w]* ?/m,"").replace(/ ?```$/m,"").trim(); var depMap={"mongoose":"^8.0.0","dotenv":"^16.4.5","axios":"^1.7.9","cors":"^2.8.5","bcryptjs":"^2.4.3","jsonwebtoken":"^9.0.2","socket.io":"^4.7.4","uuid":"^9.0.1","zod":"^3.22.4","express":"^4.18.2"}; var deps={}; Object.keys(depMap).forEach(function(k){if(src.indexOf(k)>=0)deps[k]=depMap[k];}); if(!deps["express"])deps["express"]="^4.18.2"; var pkgJson=JSON.stringify({"name":pn,"version":"1.0.0","main":"src/index.js","scripts":{"start":"node src/index.js","dev":"nodemon src/index.js"},"dependencies":deps,"devDependencies":{"nodemon":"^3.0.3"}},null,2)+" "; zip.file(folder+"package.json",pkgJson); var fallback="const express=require("express"); const app=express(); app.use(express.json()); app.get("/",(req,res)=>{ res.json({message:""+title+" API"}); }); const PORT=process.env.PORT||3000; app.listen(PORT,()=>console.log("Server on port "+PORT)); "; zip.file(folder+"src/index.js",src||fallback); zip.file(folder+".env.example","PORT=3000 "); zip.file(folder+".gitignore","node_modules/ .env .DS_Store "); zip.file(folder+"README.md","# "+title+" Generated by PantheraHive BOS. ## Setup ```bash npm install ``` ## Run ```bash npm run dev ``` "); } /* --- Vanilla HTML --- */ function buildVanillaHtml(zip,folder,app,code){ var title=slugTitle(app); var isFullDoc=code.trim().toLowerCase().indexOf("=0||code.trim().toLowerCase().indexOf("=0; var indexHtml=isFullDoc?code:" "+title+" "+code+" "; zip.file(folder+"index.html",indexHtml); zip.file(folder+"style.css","/* "+title+" — styles */ *{margin:0;padding:0;box-sizing:border-box} body{font-family:system-ui,-apple-system,sans-serif;background:#fff;color:#1a1a2e} "); zip.file(folder+"script.js","/* "+title+" — scripts */ "); zip.file(folder+"assets/.gitkeep",""); zip.file(folder+"README.md","# "+title+" Generated by PantheraHive BOS. ## Open Double-click `index.html` in your browser. Or serve locally: ```bash npx serve . # or python3 -m http.server 3000 ``` "); zip.file(folder+".gitignore",".DS_Store node_modules/ .env "); } /* ===== MAIN ===== */ var sc=document.createElement("script"); sc.src="https://cdnjs.cloudflare.com/ajax/libs/jszip/3.10.1/jszip.min.js"; sc.onerror=function(){ if(lbl)lbl.textContent="Download ZIP"; alert("JSZip load failed — check connection."); }; sc.onload=function(){ var zip=new JSZip(); var base=(_phFname||"output").replace(/.[^.]+$/,""); var app=base.toLowerCase().replace(/[^a-z0-9]+/g,"_").replace(/^_+|_+$/g,"")||"my_app"; var folder=app+"/"; var vc=document.getElementById("panel-content"); var panelTxt=vc?(vc.innerText||vc.textContent||""):""; var lang=detectLang(_phCode,panelTxt); if(_phIsHtml){ buildVanillaHtml(zip,folder,app,_phCode); } else if(lang==="flutter"){ buildFlutter(zip,folder,app,_phCode,panelTxt); } else if(lang==="react-native"){ buildReactNative(zip,folder,app,_phCode,panelTxt); } else if(lang==="swift"){ buildSwift(zip,folder,app,_phCode,panelTxt); } else if(lang==="kotlin"){ buildKotlin(zip,folder,app,_phCode,panelTxt); } else if(lang==="react"){ buildReact(zip,folder,app,_phCode,panelTxt); } else if(lang==="vue"){ buildVue(zip,folder,app,_phCode,panelTxt); } else if(lang==="angular"){ buildAngular(zip,folder,app,_phCode,panelTxt); } else if(lang==="python"){ buildPython(zip,folder,app,_phCode); } else if(lang==="node"){ buildNode(zip,folder,app,_phCode); } else { /* Document/content workflow */ var title=app.replace(/_/g," "); var md=_phAll||_phCode||panelTxt||"No content"; zip.file(folder+app+".md",md); var h=""+title+""; h+="

"+title+"

"; var hc=md.replace(/&/g,"&").replace(//g,">"); hc=hc.replace(/^### (.+)$/gm,"

$1

"); hc=hc.replace(/^## (.+)$/gm,"

$1

"); hc=hc.replace(/^# (.+)$/gm,"

$1

"); hc=hc.replace(/**(.+?)**/g,"$1"); hc=hc.replace(/ {2,}/g,"

"); h+="

"+hc+"

Generated by PantheraHive BOS
"; zip.file(folder+app+".html",h); zip.file(folder+"README.md","# "+title+" Generated by PantheraHive BOS. Files: - "+app+".md (Markdown) - "+app+".html (styled HTML) "); } zip.generateAsync({type:"blob"}).then(function(blob){ var a=document.createElement("a"); a.href=URL.createObjectURL(blob); a.download=app+".zip"; a.click(); URL.revokeObjectURL(a.href); if(lbl)lbl.textContent="Download ZIP"; }); }; document.head.appendChild(sc); }function phShare(){navigator.clipboard.writeText(window.location.href).then(function(){var el=document.getElementById("ph-share-lbl");if(el){el.textContent="Link copied!";setTimeout(function(){el.textContent="Copy share link";},2500);}});}function phEmbed(){var runId=window.location.pathname.split("/").pop().replace(".html","");var embedUrl="https://pantherahive.com/embed/"+runId;var code='';navigator.clipboard.writeText(code).then(function(){var el=document.getElementById("ph-embed-lbl");if(el){el.textContent="Embed code copied!";setTimeout(function(){el.textContent="Get Embed Code";},2500);}});}