Update index.html
Browse files- index.html +29 -12
index.html
CHANGED
|
@@ -119,7 +119,6 @@
|
|
| 119 |
<h1>🎬 Veo3 JSON Prompt Generator <span style="font-size: 1rem; font-weight: 400;">(Pro)</span></h1>
|
| 120 |
<div class="subtitle">Slect Options • Smart Mode • Copy‑ready JSON Prompt</div>
|
| 121 |
|
| 122 |
-
<!-- Toolbar (Quality only) -->
|
| 123 |
<div class="toolbar">
|
| 124 |
<div class="group">
|
| 125 |
<label for="qualityPreset" style="margin:0">Quality</label>
|
|
@@ -131,7 +130,6 @@
|
|
| 131 |
</div>
|
| 132 |
</div>
|
| 133 |
|
| 134 |
-
<!-- Core choices: minimal inputs -->
|
| 135 |
<div class="row">
|
| 136 |
<div>
|
| 137 |
<label for="domain">🎯 Select Domain</label>
|
|
@@ -162,6 +160,9 @@
|
|
| 162 |
</optgroup>
|
| 163 |
<option value="custom">🛠️ Custom Character or Product</option>
|
| 164 |
</select>
|
|
|
|
|
|
|
|
|
|
| 165 |
</div>
|
| 166 |
</div>
|
| 167 |
|
|
@@ -208,6 +209,9 @@
|
|
| 208 |
<option value="comedy-sketch">🤣 Comedy Sketch</option>
|
| 209 |
<option value="custom">✍️ Custom Variant</option>
|
| 210 |
</select>
|
|
|
|
|
|
|
|
|
|
| 211 |
</div>
|
| 212 |
<div>
|
| 213 |
<label for="aspectRatio">🖼️ Aspect Ratio</label>
|
|
@@ -372,7 +376,6 @@
|
|
| 372 |
</div>
|
| 373 |
</div>
|
| 374 |
|
| 375 |
-
<!-- Voiceover Block -->
|
| 376 |
<div id="voiceoverBlock" style="margin-top:.5rem;">
|
| 377 |
<label style="display:flex; align-items:center; gap:8px; font-weight:600;">
|
| 378 |
<input type="checkbox" id="useVoiceover" checked /> Enable Voiceover
|
|
@@ -643,17 +646,17 @@
|
|
| 643 |
|
| 644 |
const qp = QUALITY_PRESET[qualEl.value] || QUALITY_PRESET.pro;
|
| 645 |
|
| 646 |
-
const variant = el("variant")?.value || "cinematic";
|
| 647 |
-
const ar
|
| 648 |
-
const domain
|
| 649 |
-
const scene
|
| 650 |
|
| 651 |
-
const lookOn
|
| 652 |
-
const voOn
|
| 653 |
|
| 654 |
let subjectLook = null;
|
| 655 |
if (lookOn) {
|
| 656 |
-
const type = el("characterType")?.value;
|
| 657 |
const tone = el("skinTone")?.value;
|
| 658 |
const hc = el("headCover")?.value;
|
| 659 |
subjectLook = { type, skin_tone: tone, head_cover: hc };
|
|
@@ -722,15 +725,29 @@
|
|
| 722 |
|
| 723 |
// Events
|
| 724 |
aspectEl?.addEventListener("change", syncPlatformsFromAspect);
|
| 725 |
-
varEl?.addEventListener("change", ()=>{ autoFromVariantAndDomain(); });
|
| 726 |
domEl?.addEventListener("change", ()=>{ autoFromVariantAndDomain(); });
|
| 727 |
|
|
|
|
| 728 |
const taskFocus = el('taskFocus');
|
| 729 |
const customTaskWrap = el('customTaskWrapper');
|
| 730 |
taskFocus?.addEventListener('change', ()=>{
|
| 731 |
customTaskWrap.style.display = taskFocus.value === 'custom' ? 'block' : 'none';
|
| 732 |
});
|
| 733 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 734 |
document.addEventListener("DOMContentLoaded", ()=>{
|
| 735 |
autoFromVariantAndDomain();
|
| 736 |
syncPlatformsFromAspect();
|
|
@@ -738,4 +755,4 @@
|
|
| 738 |
});
|
| 739 |
</script>
|
| 740 |
</body>
|
| 741 |
-
</html>
|
|
|
|
| 119 |
<h1>🎬 Veo3 JSON Prompt Generator <span style="font-size: 1rem; font-weight: 400;">(Pro)</span></h1>
|
| 120 |
<div class="subtitle">Slect Options • Smart Mode • Copy‑ready JSON Prompt</div>
|
| 121 |
|
|
|
|
| 122 |
<div class="toolbar">
|
| 123 |
<div class="group">
|
| 124 |
<label for="qualityPreset" style="margin:0">Quality</label>
|
|
|
|
| 130 |
</div>
|
| 131 |
</div>
|
| 132 |
|
|
|
|
| 133 |
<div class="row">
|
| 134 |
<div>
|
| 135 |
<label for="domain">🎯 Select Domain</label>
|
|
|
|
| 160 |
</optgroup>
|
| 161 |
<option value="custom">🛠️ Custom Character or Product</option>
|
| 162 |
</select>
|
| 163 |
+
<div id="customCharacterTypeWrapper" style="display:none; margin-top:.5rem;">
|
| 164 |
+
<input type="text" id="customCharacterType" placeholder="Enter custom character or product" />
|
| 165 |
+
</div>
|
| 166 |
</div>
|
| 167 |
</div>
|
| 168 |
|
|
|
|
| 209 |
<option value="comedy-sketch">🤣 Comedy Sketch</option>
|
| 210 |
<option value="custom">✍️ Custom Variant</option>
|
| 211 |
</select>
|
| 212 |
+
<div id="customVariantWrapper" style="display:none; margin-top:.5rem;">
|
| 213 |
+
<input type="text" id="customVariant" placeholder="Enter custom video type" />
|
| 214 |
+
</div>
|
| 215 |
</div>
|
| 216 |
<div>
|
| 217 |
<label for="aspectRatio">🖼️ Aspect Ratio</label>
|
|
|
|
| 376 |
</div>
|
| 377 |
</div>
|
| 378 |
|
|
|
|
| 379 |
<div id="voiceoverBlock" style="margin-top:.5rem;">
|
| 380 |
<label style="display:flex; align-items:center; gap:8px; font-weight:600;">
|
| 381 |
<input type="checkbox" id="useVoiceover" checked /> Enable Voiceover
|
|
|
|
| 646 |
|
| 647 |
const qp = QUALITY_PRESET[qualEl.value] || QUALITY_PRESET.pro;
|
| 648 |
|
| 649 |
+
const variant = (el("variant")?.value === "custom" ? el("customVariant")?.value : el("variant")?.value) || "cinematic";
|
| 650 |
+
const ar = el("aspectRatio")?.value || "16:9";
|
| 651 |
+
const domain = el("domain")?.value || "advertisement";
|
| 652 |
+
const scene = (el("taskFocus")?.value === "custom" ? el("customTask")?.value : el("taskFocus")?.value) || "Product Reveal";
|
| 653 |
|
| 654 |
+
const lookOn = el("useLookPreset")?.checked;
|
| 655 |
+
const voOn = el("useVoiceover")?.checked;
|
| 656 |
|
| 657 |
let subjectLook = null;
|
| 658 |
if (lookOn) {
|
| 659 |
+
const type = (el("characterType")?.value === "custom" ? el("customCharacterType")?.value : el("characterType")?.value);
|
| 660 |
const tone = el("skinTone")?.value;
|
| 661 |
const hc = el("headCover")?.value;
|
| 662 |
subjectLook = { type, skin_tone: tone, head_cover: hc };
|
|
|
|
| 725 |
|
| 726 |
// Events
|
| 727 |
aspectEl?.addEventListener("change", syncPlatformsFromAspect);
|
|
|
|
| 728 |
domEl?.addEventListener("change", ()=>{ autoFromVariantAndDomain(); });
|
| 729 |
|
| 730 |
+
// Task Focus Custom Input
|
| 731 |
const taskFocus = el('taskFocus');
|
| 732 |
const customTaskWrap = el('customTaskWrapper');
|
| 733 |
taskFocus?.addEventListener('change', ()=>{
|
| 734 |
customTaskWrap.style.display = taskFocus.value === 'custom' ? 'block' : 'none';
|
| 735 |
});
|
| 736 |
|
| 737 |
+
// Character/Product Custom Input
|
| 738 |
+
const characterType = el('characterType');
|
| 739 |
+
const customCharacterWrap = el('customCharacterTypeWrapper');
|
| 740 |
+
characterType?.addEventListener('change', () => {
|
| 741 |
+
customCharacterWrap.style.display = characterType.value === 'custom' ? 'block' : 'none';
|
| 742 |
+
});
|
| 743 |
+
|
| 744 |
+
// Variant Custom Input & Auto-preset trigger
|
| 745 |
+
const customVariantWrap = el('customVariantWrapper');
|
| 746 |
+
varEl?.addEventListener("change", ()=>{
|
| 747 |
+
autoFromVariantAndDomain();
|
| 748 |
+
customVariantWrap.style.display = varEl.value === 'custom' ? 'block' : 'none';
|
| 749 |
+
});
|
| 750 |
+
|
| 751 |
document.addEventListener("DOMContentLoaded", ()=>{
|
| 752 |
autoFromVariantAndDomain();
|
| 753 |
syncPlatformsFromAspect();
|
|
|
|
| 755 |
});
|
| 756 |
</script>
|
| 757 |
</body>
|
| 758 |
+
</html>
|