diff --git a/src/components/GenerationPreviewModal.vue b/src/components/GenerationPreviewModal.vue index 6cb1a22..ee31a97 100644 --- a/src/components/GenerationPreviewModal.vue +++ b/src/components/GenerationPreviewModal.vue @@ -231,6 +231,18 @@ const onUseResultAsAsset = () => {
+
+ Model + {{ previewImage.gen.model || 'N/A' }} +
+
+ Seed +
+ {{ previewImage.gen.seed }} +
+
Quality {{ previewImage.gen.quality || 'N/A' }} diff --git a/src/views/CharacterDetailView.vue b/src/views/CharacterDetailView.vue index 3ae3fb0..7f467af 100644 --- a/src/views/CharacterDetailView.vue +++ b/src/views/CharacterDetailView.vue @@ -516,17 +516,7 @@ const prompt = ref('') const isGenerating = ref(false) const generationStatus = ref('') const generationProgress = ref(0) -const sendToTelegram = ref(false) const useProfileImage = ref(true) -const telegramId = ref(localStorage.getItem('telegram_id') || '') -const isTelegramIdSaved = ref(!!localStorage.getItem('telegram_id')) - -const saveTelegramId = () => { - if (telegramId.value) { - localStorage.setItem('telegram_id', telegramId.value) - isTelegramIdSaved.value = true - } -} const generationSuccess = ref(false) const generationError = ref(null) const generatedResult = ref(null) @@ -539,6 +529,12 @@ const previousPrompt = ref('') const isUploading = ref(false) const fileInput = ref(null) +const model = ref({ key: 'gemini-3-pro-image-preview', value: 'Pro' }) +const modelOptions = ref([ + { key: 'gemini-3.1-flash-image-preview', value: '2' }, + { key: 'gemini-3-pro-image-preview', value: 'Pro' } +]) + const selectedAssets = ref([]) const toggleAssetSelection = (asset) => { const index = selectedAssets.value.findIndex(a => a.id === asset.id) @@ -558,9 +554,6 @@ const quality = ref({ value: '2K' }) const qualityOptions = ref([{ - key: 'ONEK', - value: '1K' -}, { key: 'TWOK', value: '2K' }, { @@ -729,6 +722,10 @@ const restoreGeneration = async (gen) => { // 1. Set prompt prompt.value = gen.prompt + // 1.1 Set Model + const foundModel = modelOptions.value.find(opt => opt.key === gen.model) + if (foundModel) model.value = foundModel + // 2. Set Quality const foundQuality = qualityOptions.value.find(opt => opt.key === gen.quality) if (foundQuality) quality.value = foundQuality @@ -898,25 +895,14 @@ const handleGenerate = async () => { generatedResult.value = null try { - if (sendToTelegram.value && !telegramId.value) { - alert("Please enter your Telegram ID") - isGenerating.value = false - return - } - - if (telegramId.value && telegramId.value !== localStorage.getItem('telegram_id')) { - localStorage.setItem('telegram_id', telegramId.value) - isTelegramIdSaved.value = true - } - const payload = { + model: model.value.key, linked_character_id: character.value?.id, environment_id: selectedEnvironment.value?.id || selectedEnvironment.value?._id || null, aspect_ratio: aspectRatio.value.key, quality: quality.value.key, prompt: prompt.value, assets_list: selectedAssets.value.map(a => a.id), - telegram_id: sendToTelegram.value ? telegramId.value : null, use_profile_image: useProfileImage.value, count: generationCount.value } @@ -1047,34 +1033,48 @@ const handleGenerate = async () => {

Settings

-
- -
-
- {{ option.value }} +
+
+ +
+
+ {{ option.value }} +
-
- -
- -
-
- {{ option.value }} +
+ +
+
+ {{ option.value }} +
+
+ +
+
+ {{ option.value }} +
+
+
@@ -1162,18 +1162,6 @@ const handleGenerate = async () => {
-
- - -
-
- -
diff --git a/src/views/FlexibleGenerationView.vue b/src/views/FlexibleGenerationView.vue index 56e2961..e49175f 100644 --- a/src/views/FlexibleGenerationView.vue +++ b/src/views/FlexibleGenerationView.vue @@ -151,12 +151,14 @@ const assetPickerTab = ref('all') // 'all', 'uploaded', 'generated' const modalAssets = ref([]) const isModalLoading = ref(false) const tempSelectedAssets = ref([]) +const model = ref({ key: 'gemini-3-pro-image-preview', value: 'Pro' }) +const modelOptions = ref([ + { key: 'gemini-3.1-flash-image-preview', value: '2' }, + { key: 'gemini-3-pro-image-preview', value: 'Pro' } +]) const quality = ref({ key: 'TWOK', value: '2K' }) const aspectRatio = ref('NINESIXTEEN') // Default to Video (9:16) const generationCount = ref(1) -const sendToTelegram = ref(false) -const telegramId = ref('') -const isTelegramIdSaved = ref(false) const useProfileImage = ref(true) const useEnvironment = ref(false) const isImprovingPrompt = ref(false) @@ -214,7 +216,6 @@ const onlyLiked = ref(false) // Options const qualityOptions = ref([ - { key: 'ONEK', value: '1K' }, { key: 'TWOK', value: '2K' }, { key: 'FOURK', value: '4K' } ]) @@ -225,24 +226,17 @@ const STORAGE_KEY = 'flexible_gen_settings' const saveSettings = () => { const settings = { prompt: prompt.value, + model: model.value, selectedCharacterId: selectedCharacter.value?.id || selectedCharacter.value?._id, selectedEnvironmentId: selectedEnvironment.value?.id || selectedEnvironment.value?._id, selectedAssetIds: selectedAssets.value.map(a => a.id), quality: quality.value, aspectRatio: aspectRatio.value, - sendToTelegram: sendToTelegram.value, - telegramId: telegramId.value, useProfileImage: useProfileImage.value, useEnvironment: useEnvironment.value, generationCount: generationCount.value } localStorage.setItem(STORAGE_KEY, JSON.stringify(settings)) - - // Also save Telegram ID separately as it's used elsewhere - if (telegramId.value) { - localStorage.setItem('telegram_id', telegramId.value) - isTelegramIdSaved.value = true - } } const restoreSettings = () => { @@ -254,6 +248,7 @@ const restoreSettings = () => { // We need characters and assets loaded to fully restore objects // For now, we'll store IDs and restore in loadData + if (settings.model) model.value = settings.model if (settings.quality) quality.value = settings.quality if (settings.aspectRatio) { // Handle legacy object format if present @@ -263,9 +258,6 @@ const restoreSettings = () => { aspectRatio.value = settings.aspectRatio } } - sendToTelegram.value = settings.sendToTelegram || false - telegramId.value = settings.telegramId || localStorage.getItem('telegram_id') || '' - if (telegramId.value) isTelegramIdSaved.value = true if (settings.useProfileImage !== undefined) useProfileImage.value = settings.useProfileImage if (settings.useEnvironment !== undefined) useEnvironment.value = settings.useEnvironment if (settings.generationCount) generationCount.value = Math.min(settings.generationCount, 4) @@ -280,7 +272,7 @@ const restoreSettings = () => { } // Watchers for auto-save -watch([prompt, selectedCharacter, selectedEnvironment, selectedAssets, quality, aspectRatio, sendToTelegram, telegramId, useProfileImage, useEnvironment, generationCount], () => { +watch([prompt, selectedCharacter, selectedEnvironment, selectedAssets, quality, aspectRatio, useProfileImage, useEnvironment, generationCount], () => { saveSettings() }, { deep: true }) @@ -412,11 +404,6 @@ const refreshHistory = async () => { const handleGenerate = async () => { if (!prompt.value.trim()) return - if (sendToTelegram.value && !telegramId.value) { - alert("Please enter your Telegram ID") - return - } - isSubmitting.value = true // Close settings to show gallery/progress (optional preference) @@ -424,13 +411,13 @@ const handleGenerate = async () => { try { const payload = { + model: model.value.key, aspect_ratio: aspectRatio.value, // Now a string quality: quality.value.key, prompt: prompt.value, assets_list: selectedAssets.value.map(a => a.id), linked_character_id: selectedCharacter.value?.id || selectedCharacter.value?._id || null, environment_id: (selectedCharacter.value && useEnvironment.value) ? (selectedEnvironment.value?.id || selectedEnvironment.value?._id || null) : null, - telegram_id: sendToTelegram.value ? telegramId.value : null, use_profile_image: selectedCharacter.value ? useProfileImage.value : false, count: generationCount.value } @@ -1180,31 +1167,42 @@ const confirmAddToAlbum = async () => {
-
-
- - -
-
- -
-
- -
- +
+
+ +
+
+ {{ option.value }}
+
+ +
+
+ {{ option.value }} +
+
+
+
+ +
+ + +
+
@@ -1221,18 +1219,6 @@ const confirmAddToAlbum = async () => {
-
-
- - -
-
- -
-
-
-
+
+
+ +
+
+ {{ option.value }} +
+
+
+ class="w-full !bg-slate-800 !border-white/10 !text-white !rounded-xl !h-[34px]" + :pt="{ input: { class: '!text-white !text-[10px] !py-1 !px-2' }, trigger: { class: '!text-slate-400 !w-6' }, panel: { class: '!bg-slate-800 !border-white/10' }, item: { class: '!text-slate-300 hover:!bg-white/10 hover:!text-white !text-[10px] !py-1' } }" />
-
-
- -
- -
+
+ +
+
@@ -1469,18 +1474,6 @@ const markNsfw = async (gen) => {
-
-
- - -
-
- -
-
-
diff --git a/src/views/IdeasView.vue b/src/views/IdeasView.vue index 6934bfd..2695328 100644 --- a/src/views/IdeasView.vue +++ b/src/views/IdeasView.vue @@ -187,12 +187,15 @@ const startIdeaFromInspiration = (inspiration) => { // --- Generation Settings --- const prompt = ref('') +const model = ref({ key: 'gemini-3-pro-image-preview', value: 'Pro' }) +const modelOptions = ref([ + { key: 'gemini-3.1-flash-image-preview', value: '2' }, + { key: 'gemini-3-pro-image-preview', value: 'Pro' } +]) const selectedModel = ref('flux-schnell') const quality = ref({ key: 'TWOK', value: '2K' }) const aspectRatio = ref({ key: 'NINESIXTEEN', value: '9:16' }) const imageCount = ref(1) -const sendToTelegram = ref(false) -const telegramId = ref('') const useProfileImage = ref(true) const useEnvironment = ref(false) const isSubmittingGen = ref(false) @@ -232,7 +235,6 @@ watch(selectedCharacter, (newChar) => { }) const qualityOptions = ref([ - { key: 'ONEK', value: '1K' }, { key: 'TWOK', value: '2K' }, { key: 'FOURK', value: '4K' } ]) @@ -256,13 +258,12 @@ const restoreSettings = () => { if (!stored) return try { const s = JSON.parse(stored) + if (s.model) model.value = s.model if (s.prompt) prompt.value = s.prompt if (s.quality) quality.value = s.quality if (s.aspectRatio) aspectRatio.value = s.aspectRatio if (s.imageCount) imageCount.value = Math.min(s.imageCount, 4) if (s.selectedModel) selectedModel.value = s.selectedModel - sendToTelegram.value = s.sendToTelegram || false - telegramId.value = s.telegramId || localStorage.getItem('telegram_id') || '' if (s.useProfileImage !== undefined) useProfileImage.value = s.useProfileImage if (s.useEnvironment !== undefined) useEnvironment.value = s.useEnvironment _savedCharacterId = s.selectedCharacterId || null @@ -283,12 +284,11 @@ const restoreSettings = () => { const saveSettings = () => { const settings = { prompt: prompt.value, + model: model.value, quality: quality.value, aspectRatio: aspectRatio.value, imageCount: imageCount.value, selectedModel: selectedModel.value, - sendToTelegram: sendToTelegram.value, - telegramId: telegramId.value, useProfileImage: useProfileImage.value, useEnvironment: useEnvironment.value, selectedCharacterId: selectedCharacter.value?.id || null, @@ -296,10 +296,9 @@ const saveSettings = () => { selectedAssetIds: selectedAssets.value.map(a => a.id), } localStorage.setItem(SETTINGS_KEY, JSON.stringify(settings)) - if (telegramId.value) localStorage.setItem('telegram_id', telegramId.value) } -watch([prompt, quality, aspectRatio, imageCount, selectedModel, sendToTelegram, telegramId, useProfileImage, useEnvironment, selectedCharacter, selectedEnvironment, selectedAssets], saveSettings, { deep: true }) +watch([prompt, quality, aspectRatio, imageCount, model, useProfileImage, useEnvironment, selectedCharacter, selectedEnvironment, selectedAssets], saveSettings, { deep: true }) onMounted(async () => { restoreSettings() @@ -834,18 +833,37 @@ const handleAssetPickerUpload = async (event) => {
-
+
+
+ +
+
+ {{ option.value }} +
+
+
- +
+
+ {{ option.value }} +
+
+ class="w-full !bg-slate-800 !border-white/10 !text-white !rounded-xl !h-[34px]" + :pt="{ + input: { class: '!text-white !text-[10px] !py-1 !px-2 !font-bold' }, + trigger: { class: '!text-slate-400 !w-6' }, + panel: { class: '!bg-slate-800 !border-white/10' }, + item: { class: '!text-slate-300 hover:!bg-white/10 hover:!text-white !text-[10px] !py-1' } + }" />
@@ -863,19 +881,6 @@ const handleAssetPickerUpload = async (event) => {
- -
-
- - -
-
- -
-
-