Spaces:
Running
Running
Major UI cleanup and improvements
Browse files- Fixed duplicate model selector issue in img2video mode
- Replaced width/height with simple Aspect Ratio dropdown
- Collapsed advanced settings (steps, cfg) by default
- Reorganized model dropdowns with clearer categories:
- Recommended, NSFW Friendly, Fast, Other
- Simplified video model selector (removed redundant backend chips)
- Added pricing hints to video models
- Cleaner labels and descriptions throughout
- Added updateDimensions() function for aspect ratio
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- src/content_engine/api/ui.html +126 -147
src/content_engine/api/ui.html
CHANGED
|
@@ -876,75 +876,58 @@ select { cursor: pointer; }
|
|
| 876 |
</div>
|
| 877 |
|
| 878 |
<div id="cloud-model-select" style="display:none">
|
| 879 |
-
<label>
|
| 880 |
<select id="gen-cloud-model">
|
| 881 |
-
<optgroup label="
|
| 882 |
-
<option value="seedream-4.5">SeeDream v4.5 (Best
|
|
|
|
|
|
|
|
|
|
|
|
|
| 883 |
<option value="seedream-4">SeeDream v4</option>
|
| 884 |
<option value="seedream-3.1">SeeDream v3.1</option>
|
| 885 |
</optgroup>
|
| 886 |
-
<optgroup label="
|
| 887 |
-
<option value="gpt-image-1
|
| 888 |
-
<option value="gpt-image-1">GPT Image 1</option>
|
| 889 |
-
<option value="gpt-image-1-mini">GPT Image 1 Mini (Fast)</option>
|
| 890 |
-
</optgroup>
|
| 891 |
-
<optgroup label="NanoBanana (Google)">
|
| 892 |
-
<option value="nano-banana-pro">NanoBanana Pro</option>
|
| 893 |
<option value="nano-banana">NanoBanana</option>
|
| 894 |
</optgroup>
|
| 895 |
-
<optgroup label="
|
| 896 |
<option value="kling-image-o3">Kling Image O3</option>
|
| 897 |
-
|
| 898 |
-
<optgroup label="WAN (Alibaba)">
|
| 899 |
-
<option value="wan-2.6">WAN 2.6 (Latest)</option>
|
| 900 |
<option value="wan-2.5">WAN 2.5</option>
|
| 901 |
-
</optgroup>
|
| 902 |
-
<optgroup label="Other">
|
| 903 |
<option value="qwen-image">Qwen Image</option>
|
| 904 |
<option value="dreamina-3.1">Dreamina v3.1</option>
|
| 905 |
-
<option value="dreamina-3">Dreamina v3</option>
|
| 906 |
</optgroup>
|
| 907 |
</select>
|
| 908 |
</div>
|
| 909 |
|
| 910 |
<div id="cloud-edit-model-select" style="display:none">
|
| 911 |
-
<label>
|
| 912 |
<select id="gen-cloud-edit-model">
|
| 913 |
-
<optgroup label="
|
| 914 |
-
<option value="
|
|
|
|
|
|
|
| 915 |
</optgroup>
|
| 916 |
-
<optgroup label="
|
| 917 |
-
<option value="seedream-4.5-edit">SeeDream v4.5 Edit (Best Quality)</option>
|
| 918 |
<option value="seedream-4-edit">SeeDream v4 Edit</option>
|
| 919 |
-
</optgroup>
|
| 920 |
-
<optgroup label="WAN Edit (Alibaba)">
|
| 921 |
<option value="wan-2.6-edit">WAN 2.6 Edit</option>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 922 |
<option value="wan-2.5-edit">WAN 2.5 Edit</option>
|
| 923 |
<option value="wan-2.2-edit">WAN 2.2 Edit</option>
|
| 924 |
-
</optgroup>
|
| 925 |
-
<optgroup label="Qwen Edit (WaveSpeed)">
|
| 926 |
<option value="qwen-edit-lora">Qwen Edit + LoRA</option>
|
| 927 |
-
<option value="qwen-edit-angles">Qwen Multi-Angle Edit</option>
|
| 928 |
-
<option value="qwen-layered">Qwen Layered</option>
|
| 929 |
-
</optgroup>
|
| 930 |
-
<optgroup label="GPT Image Edit (OpenAI)">
|
| 931 |
-
<option value="gpt-image-1.5-edit">GPT Image 1.5 Edit (Highest Quality)</option>
|
| 932 |
-
<option value="gpt-image-1-edit">GPT Image 1 Edit</option>
|
| 933 |
-
<option value="gpt-image-1-mini-edit">GPT Image 1 Mini Edit (Fastest)</option>
|
| 934 |
-
</optgroup>
|
| 935 |
-
<optgroup label="NanoBanana Edit (Google)">
|
| 936 |
<option value="nano-banana-pro-edit">NanoBanana Pro Edit</option>
|
| 937 |
-
<option value="nano-banana-edit">NanoBanana Edit</option>
|
| 938 |
-
</optgroup>
|
| 939 |
-
<optgroup label="Kling Edit (Kuaishou)">
|
| 940 |
<option value="kling-o3-edit">Kling O3 Edit</option>
|
| 941 |
-
</optgroup>
|
| 942 |
-
<optgroup label="Dreamina Edit (ByteDance)">
|
| 943 |
<option value="dreamina-3-edit">Dreamina v3 Edit</option>
|
| 944 |
</optgroup>
|
| 945 |
</select>
|
| 946 |
<div style="font-size:11px;color:var(--text-secondary);margin-top:4px">
|
| 947 |
-
Upload a reference
|
| 948 |
</div>
|
| 949 |
</div>
|
| 950 |
|
|
@@ -953,109 +936,71 @@ select { cursor: pointer; }
|
|
| 953 |
<div id="pod-status-inline" style="padding:8px 12px; background:var(--bg-primary); border-radius:6px; margin-bottom:12px; font-size:13px">
|
| 954 |
<span id="pod-status-indicator">Checking pod status...</span>
|
| 955 |
</div>
|
| 956 |
-
<label>Model</label>
|
| 957 |
-
<select id="pod-model-select"
|
| 958 |
-
<option value="flux">FLUX.2 Dev (
|
| 959 |
-
<option value="wan-t2i">WAN 2.2
|
| 960 |
</select>
|
| 961 |
-
<label style="margin-top:8px">
|
| 962 |
<select id="pod-lora-select">
|
| 963 |
-
<option value="">None
|
| 964 |
</select>
|
| 965 |
<div style="font-size:11px;color:var(--text-secondary);margin-top:4px">
|
| 966 |
-
|
| 967 |
</div>
|
| 968 |
</div>
|
| 969 |
|
| 970 |
<!-- Image to Video settings -->
|
| 971 |
<div id="img2video-section" style="display:none">
|
| 972 |
-
<div class="section-title">
|
| 973 |
<div class="drop-zone" id="video-drop-zone" onclick="document.getElementById('video-file-input').click()">
|
| 974 |
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" style="width:32px;height:32px;opacity:0.5;margin-bottom:8px"><path d="M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4"/><polyline points="17 8 12 3 7 8"/><line x1="12" y1="3" x2="12" y2="15"/></svg>
|
| 975 |
-
<div>Drop image
|
| 976 |
-
<div style="font-size:11px;margin-top:4px">This image will be animated into a video</div>
|
| 977 |
</div>
|
| 978 |
<input type="file" id="video-file-input" accept="image/*" style="display:none" onchange="handleVideoImage(this)">
|
| 979 |
<div id="video-preview" style="display:none; margin-top:8px">
|
| 980 |
<img id="video-preview-img" style="max-width:100%; border-radius:6px">
|
| 981 |
</div>
|
| 982 |
-
|
| 983 |
-
<div style="margin-
|
| 984 |
-
|
| 985 |
-
<
|
| 986 |
-
<
|
| 987 |
-
<
|
| 988 |
-
|
| 989 |
-
|
| 990 |
-
|
| 991 |
-
|
| 992 |
-
|
| 993 |
-
<
|
| 994 |
-
|
| 995 |
-
|
| 996 |
-
|
| 997 |
-
<
|
| 998 |
-
|
| 999 |
-
|
| 1000 |
-
|
| 1001 |
-
|
| 1002 |
-
|
| 1003 |
-
|
| 1004 |
-
</
|
| 1005 |
-
|
| 1006 |
-
|
| 1007 |
-
|
| 1008 |
-
|
| 1009 |
-
</
|
| 1010 |
-
<
|
| 1011 |
-
|
| 1012 |
-
|
| 1013 |
-
|
| 1014 |
-
|
| 1015 |
-
|
| 1016 |
-
|
| 1017 |
-
|
| 1018 |
-
|
| 1019 |
-
|
| 1020 |
-
|
| 1021 |
-
|
| 1022 |
-
<option value="seedance-1.5-pro">Seedance 1.5 Pro</option>
|
| 1023 |
-
</optgroup>
|
| 1024 |
-
<optgroup label="Dreamina I2V (ByteDance)">
|
| 1025 |
-
<option value="dreamina-i2v-1080p">Dreamina I2V 1080p</option>
|
| 1026 |
-
<option value="dreamina-i2v-720p">Dreamina I2V 720p</option>
|
| 1027 |
-
</optgroup>
|
| 1028 |
-
<optgroup label="Veo (Google)">
|
| 1029 |
-
<option value="veo-3.1">Veo 3.1</option>
|
| 1030 |
-
</optgroup>
|
| 1031 |
-
<optgroup label="Sora (OpenAI)">
|
| 1032 |
-
<option value="sora-2">Sora 2</option>
|
| 1033 |
-
</optgroup>
|
| 1034 |
-
<optgroup label="Vidu">
|
| 1035 |
-
<option value="vidu-q3">Vidu Q3 Turbo</option>
|
| 1036 |
-
</optgroup>
|
| 1037 |
-
</select>
|
| 1038 |
-
</div>
|
| 1039 |
-
<div style="display:grid; grid-template-columns:1fr 1fr; gap:8px; margin-top:8px">
|
| 1040 |
-
<div>
|
| 1041 |
-
<label>Duration</label>
|
| 1042 |
-
<select id="video-duration">
|
| 1043 |
-
<option value="41">~2 seconds (41 frames)</option>
|
| 1044 |
-
<option value="81" selected>~3 seconds (81 frames)</option>
|
| 1045 |
-
<option value="121">~5 seconds (121 frames)</option>
|
| 1046 |
-
</select>
|
| 1047 |
-
</div>
|
| 1048 |
-
<div>
|
| 1049 |
-
<label>FPS</label>
|
| 1050 |
-
<select id="video-fps">
|
| 1051 |
-
<option value="16">16 fps</option>
|
| 1052 |
-
<option value="24" selected>24 fps</option>
|
| 1053 |
-
</select>
|
| 1054 |
-
</div>
|
| 1055 |
-
</div>
|
| 1056 |
-
<div id="video-note" style="font-size:11px;color:var(--text-secondary);margin-top:8px">
|
| 1057 |
-
Cloud API: Fast generation via WaveSpeed. RunPod: Uses WAN 2.2 I2V (~2 sec per frame).
|
| 1058 |
-
</div>
|
| 1059 |
</div>
|
| 1060 |
|
| 1061 |
<!-- Reference image upload for img2img -->
|
|
@@ -1105,29 +1050,39 @@ select { cursor: pointer; }
|
|
| 1105 |
<div class="section-title">Settings</div>
|
| 1106 |
<div class="row" style="display:grid; grid-template-columns:1fr 1fr; gap:8px;">
|
| 1107 |
<div>
|
| 1108 |
-
<label>
|
| 1109 |
-
<
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1110 |
</div>
|
| 1111 |
<div>
|
| 1112 |
-
<label>
|
| 1113 |
-
<input type="number" id="gen-
|
| 1114 |
</div>
|
| 1115 |
</div>
|
| 1116 |
-
<
|
| 1117 |
-
<
|
| 1118 |
-
|
| 1119 |
-
|
| 1120 |
-
<
|
| 1121 |
-
|
| 1122 |
-
<div>
|
| 1123 |
-
<
|
| 1124 |
-
|
| 1125 |
-
|
| 1126 |
-
|
| 1127 |
-
|
| 1128 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1129 |
</div>
|
| 1130 |
-
</
|
| 1131 |
</div>
|
| 1132 |
|
| 1133 |
<button class="btn btn-primary" id="generate-btn" onclick="doGenerate()">
|
|
@@ -2043,6 +1998,20 @@ function selectBackend(chip, backend) {
|
|
| 2043 |
updateCloudModelVisibility();
|
| 2044 |
}
|
| 2045 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 2046 |
function selectVideoBackend(chip, backend) {
|
| 2047 |
chip.parentElement.querySelectorAll('.chip').forEach(c => c.classList.remove('selected'));
|
| 2048 |
chip.classList.add('selected');
|
|
@@ -2065,11 +2034,21 @@ function updateCloudModelVisibility() {
|
|
| 2065 |
const isCloud = selectedBackend === 'cloud';
|
| 2066 |
const isPod = selectedBackend === 'pod';
|
| 2067 |
const isImg2img = selectedMode === 'img2img';
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 2068 |
// Show txt2img cloud models when cloud + txt2img
|
| 2069 |
document.getElementById('cloud-model-select').style.display = (isCloud && !isImg2img) ? '' : 'none';
|
| 2070 |
// Show edit cloud models when cloud + img2img
|
| 2071 |
document.getElementById('cloud-edit-model-select').style.display = (isCloud && isImg2img) ? '' : 'none';
|
| 2072 |
-
// Show pod settings when pod backend selected
|
| 2073 |
document.getElementById('pod-settings-section').style.display = isPod ? '' : 'none';
|
| 2074 |
if (isPod) loadPodLorasForGeneration();
|
| 2075 |
// Show denoise slider only for local img2img (cloud edit doesn't use denoise)
|
|
|
|
| 876 |
</div>
|
| 877 |
|
| 878 |
<div id="cloud-model-select" style="display:none">
|
| 879 |
+
<label>Model</label>
|
| 880 |
<select id="gen-cloud-model">
|
| 881 |
+
<optgroup label="Recommended">
|
| 882 |
+
<option value="seedream-4.5" selected>SeeDream v4.5 (Best)</option>
|
| 883 |
+
<option value="gpt-image-1.5">GPT Image 1.5</option>
|
| 884 |
+
<option value="nano-banana-pro">NanoBanana Pro</option>
|
| 885 |
+
</optgroup>
|
| 886 |
+
<optgroup label="NSFW Friendly">
|
| 887 |
<option value="seedream-4">SeeDream v4</option>
|
| 888 |
<option value="seedream-3.1">SeeDream v3.1</option>
|
| 889 |
</optgroup>
|
| 890 |
+
<optgroup label="Fast">
|
| 891 |
+
<option value="gpt-image-1-mini">GPT Image Mini</option>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 892 |
<option value="nano-banana">NanoBanana</option>
|
| 893 |
</optgroup>
|
| 894 |
+
<optgroup label="Other">
|
| 895 |
<option value="kling-image-o3">Kling Image O3</option>
|
| 896 |
+
<option value="wan-2.6">WAN 2.6</option>
|
|
|
|
|
|
|
| 897 |
<option value="wan-2.5">WAN 2.5</option>
|
|
|
|
|
|
|
| 898 |
<option value="qwen-image">Qwen Image</option>
|
| 899 |
<option value="dreamina-3.1">Dreamina v3.1</option>
|
|
|
|
| 900 |
</optgroup>
|
| 901 |
</select>
|
| 902 |
</div>
|
| 903 |
|
| 904 |
<div id="cloud-edit-model-select" style="display:none">
|
| 905 |
+
<label>Model</label>
|
| 906 |
<select id="gen-cloud-edit-model">
|
| 907 |
+
<optgroup label="Recommended">
|
| 908 |
+
<option value="seedream-4.5-edit" selected>SeeDream v4.5 Edit (Best)</option>
|
| 909 |
+
<option value="higgsfield-soul">Higgsfield Soul (Faces)</option>
|
| 910 |
+
<option value="gpt-image-1.5-edit">GPT Image 1.5 Edit</option>
|
| 911 |
</optgroup>
|
| 912 |
+
<optgroup label="NSFW Friendly">
|
|
|
|
| 913 |
<option value="seedream-4-edit">SeeDream v4 Edit</option>
|
|
|
|
|
|
|
| 914 |
<option value="wan-2.6-edit">WAN 2.6 Edit</option>
|
| 915 |
+
</optgroup>
|
| 916 |
+
<optgroup label="Fast">
|
| 917 |
+
<option value="gpt-image-1-mini-edit">GPT Image Mini Edit</option>
|
| 918 |
+
<option value="nano-banana-edit">NanoBanana Edit</option>
|
| 919 |
+
</optgroup>
|
| 920 |
+
<optgroup label="Other">
|
| 921 |
<option value="wan-2.5-edit">WAN 2.5 Edit</option>
|
| 922 |
<option value="wan-2.2-edit">WAN 2.2 Edit</option>
|
|
|
|
|
|
|
| 923 |
<option value="qwen-edit-lora">Qwen Edit + LoRA</option>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 924 |
<option value="nano-banana-pro-edit">NanoBanana Pro Edit</option>
|
|
|
|
|
|
|
|
|
|
| 925 |
<option value="kling-o3-edit">Kling O3 Edit</option>
|
|
|
|
|
|
|
| 926 |
<option value="dreamina-3-edit">Dreamina v3 Edit</option>
|
| 927 |
</optgroup>
|
| 928 |
</select>
|
| 929 |
<div style="font-size:11px;color:var(--text-secondary);margin-top:4px">
|
| 930 |
+
Upload a reference image and describe changes. The model preserves faces and poses.
|
| 931 |
</div>
|
| 932 |
</div>
|
| 933 |
|
|
|
|
| 936 |
<div id="pod-status-inline" style="padding:8px 12px; background:var(--bg-primary); border-radius:6px; margin-bottom:12px; font-size:13px">
|
| 937 |
<span id="pod-status-indicator">Checking pod status...</span>
|
| 938 |
</div>
|
| 939 |
+
<label>Base Model</label>
|
| 940 |
+
<select id="pod-model-select">
|
| 941 |
+
<option value="flux">FLUX.2 Dev (Realistic)</option>
|
| 942 |
+
<option value="wan-t2i">WAN 2.2 (Stylized/Anime)</option>
|
| 943 |
</select>
|
| 944 |
+
<label style="margin-top:8px">Your LoRA</label>
|
| 945 |
<select id="pod-lora-select">
|
| 946 |
+
<option value="">None (Base model only)</option>
|
| 947 |
</select>
|
| 948 |
<div style="font-size:11px;color:var(--text-secondary);margin-top:4px">
|
| 949 |
+
Start the pod in Status page first.
|
| 950 |
</div>
|
| 951 |
</div>
|
| 952 |
|
| 953 |
<!-- Image to Video settings -->
|
| 954 |
<div id="img2video-section" style="display:none">
|
| 955 |
+
<div class="section-title">Upload Image</div>
|
| 956 |
<div class="drop-zone" id="video-drop-zone" onclick="document.getElementById('video-file-input').click()">
|
| 957 |
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" style="width:32px;height:32px;opacity:0.5;margin-bottom:8px"><path d="M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4"/><polyline points="17 8 12 3 7 8"/><line x1="12" y1="3" x2="12" y2="15"/></svg>
|
| 958 |
+
<div>Drop image or click to upload</div>
|
|
|
|
| 959 |
</div>
|
| 960 |
<input type="file" id="video-file-input" accept="image/*" style="display:none" onchange="handleVideoImage(this)">
|
| 961 |
<div id="video-preview" style="display:none; margin-top:8px">
|
| 962 |
<img id="video-preview-img" style="max-width:100%; border-radius:6px">
|
| 963 |
</div>
|
| 964 |
+
|
| 965 |
+
<div class="section-title" style="margin-top:16px">Video Model</div>
|
| 966 |
+
<select id="video-cloud-model" style="margin-top:0">
|
| 967 |
+
<optgroup label="Recommended">
|
| 968 |
+
<option value="wan-2.6-i2v-pro" selected>WAN 2.6 Pro ($0.05/s)</option>
|
| 969 |
+
<option value="wan-2.6-i2v-flash">WAN 2.6 Flash (Fast)</option>
|
| 970 |
+
<option value="kling-o3-pro">Kling O3 Pro</option>
|
| 971 |
+
</optgroup>
|
| 972 |
+
<optgroup label="Premium (Higgsfield - requires API key)">
|
| 973 |
+
<option value="kling-3.0-pro">Kling 3.0 Pro (15s + Audio)</option>
|
| 974 |
+
<option value="kling-3.0">Kling 3.0</option>
|
| 975 |
+
<option value="sora-2-hf">Sora 2</option>
|
| 976 |
+
<option value="veo-3.1-hf">Veo 3.1</option>
|
| 977 |
+
</optgroup>
|
| 978 |
+
<optgroup label="Budget Friendly">
|
| 979 |
+
<option value="wan-2.2-i2v-720p">WAN 2.2 720p ($0.01/s)</option>
|
| 980 |
+
<option value="wan-2.2-i2v-1080p">WAN 2.2 1080p</option>
|
| 981 |
+
<option value="wan-2.5-i2v">WAN 2.5</option>
|
| 982 |
+
</optgroup>
|
| 983 |
+
<optgroup label="Cinematic">
|
| 984 |
+
<option value="higgsfield-dop">Higgsfield DoP (5s)</option>
|
| 985 |
+
<option value="seedance-1.5-pro">Seedance Pro</option>
|
| 986 |
+
<option value="dreamina-i2v-1080p">Dreamina 1080p</option>
|
| 987 |
+
</optgroup>
|
| 988 |
+
<optgroup label="Other">
|
| 989 |
+
<option value="kling-o3">Kling O3</option>
|
| 990 |
+
<option value="veo-3.1">Veo 3.1 (WaveSpeed)</option>
|
| 991 |
+
<option value="sora-2">Sora 2 (WaveSpeed)</option>
|
| 992 |
+
<option value="vidu-q3">Vidu Q3</option>
|
| 993 |
+
</optgroup>
|
| 994 |
+
</select>
|
| 995 |
+
|
| 996 |
+
<label style="margin-top:12px">Duration</label>
|
| 997 |
+
<select id="video-duration">
|
| 998 |
+
<option value="41">2 seconds</option>
|
| 999 |
+
<option value="81" selected>3 seconds</option>
|
| 1000 |
+
<option value="121">5 seconds</option>
|
| 1001 |
+
<option value="241">10 seconds</option>
|
| 1002 |
+
<option value="361">15 seconds</option>
|
| 1003 |
+
</select>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1004 |
</div>
|
| 1005 |
|
| 1006 |
<!-- Reference image upload for img2img -->
|
|
|
|
| 1050 |
<div class="section-title">Settings</div>
|
| 1051 |
<div class="row" style="display:grid; grid-template-columns:1fr 1fr; gap:8px;">
|
| 1052 |
<div>
|
| 1053 |
+
<label>Aspect Ratio</label>
|
| 1054 |
+
<select id="gen-aspect" onchange="updateDimensions()">
|
| 1055 |
+
<option value="9:16" selected>Portrait (9:16)</option>
|
| 1056 |
+
<option value="2:3">Portrait (2:3)</option>
|
| 1057 |
+
<option value="1:1">Square (1:1)</option>
|
| 1058 |
+
<option value="3:2">Landscape (3:2)</option>
|
| 1059 |
+
<option value="16:9">Landscape (16:9)</option>
|
| 1060 |
+
</select>
|
| 1061 |
</div>
|
| 1062 |
<div>
|
| 1063 |
+
<label>Seed (-1 = random)</label>
|
| 1064 |
+
<input type="number" id="gen-seed" value="-1">
|
| 1065 |
</div>
|
| 1066 |
</div>
|
| 1067 |
+
<!-- Hidden fields for actual dimensions -->
|
| 1068 |
+
<input type="hidden" id="gen-width" value="832">
|
| 1069 |
+
<input type="hidden" id="gen-height" value="1216">
|
| 1070 |
+
<!-- Advanced settings (collapsed by default) -->
|
| 1071 |
+
<details style="margin-top:12px">
|
| 1072 |
+
<summary style="cursor:pointer;color:var(--text-secondary);font-size:12px">Advanced Settings</summary>
|
| 1073 |
+
<div style="padding-top:8px">
|
| 1074 |
+
<div class="row" style="display:grid; grid-template-columns:1fr 1fr; gap:8px;">
|
| 1075 |
+
<div>
|
| 1076 |
+
<label>Steps</label>
|
| 1077 |
+
<input type="number" id="gen-steps" value="28">
|
| 1078 |
+
</div>
|
| 1079 |
+
<div>
|
| 1080 |
+
<label>CFG Scale</label>
|
| 1081 |
+
<input type="number" id="gen-cfg" value="7" min="1" max="20" step="0.5">
|
| 1082 |
+
</div>
|
| 1083 |
+
</div>
|
| 1084 |
</div>
|
| 1085 |
+
</details>
|
| 1086 |
</div>
|
| 1087 |
|
| 1088 |
<button class="btn btn-primary" id="generate-btn" onclick="doGenerate()">
|
|
|
|
| 1998 |
updateCloudModelVisibility();
|
| 1999 |
}
|
| 2000 |
|
| 2001 |
+
function updateDimensions() {
|
| 2002 |
+
const aspect = document.getElementById('gen-aspect').value;
|
| 2003 |
+
const dimensions = {
|
| 2004 |
+
'9:16': [832, 1216],
|
| 2005 |
+
'2:3': [832, 1248],
|
| 2006 |
+
'1:1': [1024, 1024],
|
| 2007 |
+
'3:2': [1248, 832],
|
| 2008 |
+
'16:9': [1216, 832],
|
| 2009 |
+
};
|
| 2010 |
+
const [w, h] = dimensions[aspect] || [832, 1216];
|
| 2011 |
+
document.getElementById('gen-width').value = w;
|
| 2012 |
+
document.getElementById('gen-height').value = h;
|
| 2013 |
+
}
|
| 2014 |
+
|
| 2015 |
function selectVideoBackend(chip, backend) {
|
| 2016 |
chip.parentElement.querySelectorAll('.chip').forEach(c => c.classList.remove('selected'));
|
| 2017 |
chip.classList.add('selected');
|
|
|
|
| 2034 |
const isCloud = selectedBackend === 'cloud';
|
| 2035 |
const isPod = selectedBackend === 'pod';
|
| 2036 |
const isImg2img = selectedMode === 'img2img';
|
| 2037 |
+
const isVideo = selectedMode === 'img2video';
|
| 2038 |
+
|
| 2039 |
+
// Hide all model selectors for video mode (video has its own selector)
|
| 2040 |
+
if (isVideo) {
|
| 2041 |
+
document.getElementById('cloud-model-select').style.display = 'none';
|
| 2042 |
+
document.getElementById('cloud-edit-model-select').style.display = 'none';
|
| 2043 |
+
document.getElementById('pod-settings-section').style.display = 'none';
|
| 2044 |
+
return;
|
| 2045 |
+
}
|
| 2046 |
+
|
| 2047 |
// Show txt2img cloud models when cloud + txt2img
|
| 2048 |
document.getElementById('cloud-model-select').style.display = (isCloud && !isImg2img) ? '' : 'none';
|
| 2049 |
// Show edit cloud models when cloud + img2img
|
| 2050 |
document.getElementById('cloud-edit-model-select').style.display = (isCloud && isImg2img) ? '' : 'none';
|
| 2051 |
+
// Show pod settings when pod backend selected (not in video mode)
|
| 2052 |
document.getElementById('pod-settings-section').style.display = isPod ? '' : 'none';
|
| 2053 |
if (isPod) loadPodLorasForGeneration();
|
| 2054 |
// Show denoise slider only for local img2img (cloud edit doesn't use denoise)
|