diff --git a/frontend/public/stamps/ai-black.png b/frontend/public/stamps/ai-black.png new file mode 100644 index 0000000..cd64105 Binary files /dev/null and b/frontend/public/stamps/ai-black.png differ diff --git a/frontend/public/stamps/ai-white.png b/frontend/public/stamps/ai-white.png new file mode 100644 index 0000000..20dd6e4 Binary files /dev/null and b/frontend/public/stamps/ai-white.png differ diff --git a/frontend/public/stamps/generated-black.png b/frontend/public/stamps/generated-black.png new file mode 100644 index 0000000..4c2f82f Binary files /dev/null and b/frontend/public/stamps/generated-black.png differ diff --git a/frontend/public/stamps/generated-white.png b/frontend/public/stamps/generated-white.png new file mode 100644 index 0000000..2c056b8 Binary files /dev/null and b/frontend/public/stamps/generated-white.png differ diff --git a/frontend/public/stamps/modified-black.png b/frontend/public/stamps/modified-black.png new file mode 100644 index 0000000..c667e0c Binary files /dev/null and b/frontend/public/stamps/modified-black.png differ diff --git a/frontend/public/stamps/modified-white.png b/frontend/public/stamps/modified-white.png new file mode 100644 index 0000000..1de7f1b Binary files /dev/null and b/frontend/public/stamps/modified-white.png differ diff --git a/frontend/src/App.svelte b/frontend/src/App.svelte index 522a57f..e973161 100644 --- a/frontend/src/App.svelte +++ b/frontend/src/App.svelte @@ -10,6 +10,7 @@ import HowItWorks from './components/HowItWorks.svelte'; import LegalModal from './components/LegalModal.svelte'; import CropModal from './components/CropModal.svelte'; + import AILabelOptions from './components/AILabelOptions.svelte'; import { createProgress } from './stores/progress.svelte.js'; import { BUNDLE_PRESETS, PACK_PRESETS } from './lib/presets.js'; @@ -17,6 +18,10 @@ let files = $state([]); // [{ file, url }] let selectedPresets = $state([]); // preset name strings + let aiLabelEnabled = $state(false); + let aiLabelStyle = $state('generated'); + let aiLabelColor = $state('black'); + let aiLabelPosition = $state('bottom-right'); let legalOpen = $state(null); // 'imprint' | 'privacy' | null // The file entry whose crop is being adjusted, or null. Owned here (not in // Dropzone) so CropModal renders at the page root, escaping the animate-fade-up @@ -70,6 +75,11 @@ for (const entry of files) form.append('files', entry.file); form.append('focals', JSON.stringify(focals)); for (const name of selectedPresets) form.append('presets', name); + if (aiLabelEnabled) { + form.append('aiLabel', aiLabelStyle); + form.append('aiLabelColor', aiLabelColor); + form.append('aiLabelPosition', aiLabelPosition); + } let jobId; try { @@ -91,6 +101,10 @@ progress.reset(); files = []; selectedPresets = []; + aiLabelEnabled = false; + aiLabelStyle = 'generated'; + aiLabelColor = 'black'; + aiLabelPosition = 'bottom-right'; cropping = null; autoDownloaded = false; } @@ -158,11 +172,19 @@
+
+ +