@@ -14,9 +14,9 @@ const INITIAL_PROVIDERS = [
1414] ;
1515
1616const IMAGE_PROVIDERS = [
17- { id : 'openai' , name : 'OpenAI (DALL-E)' , defaultModel : 'dall-e-3' } ,
18- { id : 'gemini' , name : 'Gemini Imagen' , defaultModel : 'gemini-2.0-flash-preview-image-generation' } ,
19- { id : 'stability' , name : 'Stability AI' , defaultModel : 'sd3.5-large' } ,
17+ { id : 'openai' , name : 'OpenAI (DALL-E)' , models : [ 'dall-e-3' , 'dall-e-2' ] } ,
18+ { id : 'gemini' , name : 'Gemini Imagen' , models : [ 'gemini-2.0-flash-preview-image-generation' , 'imagen-3.0-generate-002' ] } ,
19+ { id : 'stability' , name : 'Stability AI' , models : [ 'sd3.5-large' , 'sd3.5-medium' , 'sd3-large' ] } ,
2020] ;
2121
2222export default function Settings ( ) {
@@ -339,13 +339,13 @@ export default function Settings() {
339339 < span className = "bg-amber-100 text-amber-600 p-2 rounded-lg mr-3" >
340340 < ImagePlus size = { 20 } />
341341 </ span >
342- { t ( 'settings.imageGeneration' ) || 'Bildgenerierung' }
342+ { t ( 'settings.imageGeneration' ) }
343343 </ h2 >
344344
345345 < div className = "space-y-4" >
346346 < div >
347347 < label className = "block text-sm font-medium text-gray-700 mb-1" >
348- { t ( 'settings.imageProvider' ) || 'Anbieter' }
348+ { t ( 'settings.imageProvider' ) }
349349 </ label >
350350 < select
351351 value = { settings . image_provider }
@@ -354,7 +354,7 @@ export default function Settings() {
354354 setSettings ( {
355355 ...settings ,
356356 image_provider : e . target . value ,
357- image_model : ''
357+ image_model : imgProvider ?. models [ 0 ] || ''
358358 } ) ;
359359 } }
360360 className = "w-full border border-gray-200 rounded-xl px-4 py-3 focus:ring-2 focus:ring-emerald-500 outline-none bg-white"
@@ -367,30 +367,32 @@ export default function Settings() {
367367
368368 < div >
369369 < label className = "block text-sm font-medium text-gray-700 mb-1" >
370- { t ( 'settings.imageModel' ) || 'Modell' }
370+ { t ( 'settings.imageModel' ) }
371371 </ label >
372- < input
373- type = "text"
374- value = { settings . image_model }
372+ < select
373+ value = { settings . image_model || currentImageProvider ?. models [ 0 ] || '' }
375374 onChange = { e => setSettings ( { ...settings , image_model : e . target . value } ) }
376- className = "w-full border border-gray-200 rounded-xl px-4 py-3 focus:ring-2 focus:ring-emerald-500 outline-none"
377- placeholder = { currentImageProvider ?. defaultModel || 'dall-e-3' }
378- />
375+ className = "w-full border border-gray-200 rounded-xl px-4 py-3 focus:ring-2 focus:ring-emerald-500 outline-none bg-white"
376+ >
377+ { currentImageProvider ?. models . map ( m => (
378+ < option key = { m } value = { m } > { m } </ option >
379+ ) ) }
380+ </ select >
379381 < p className = "text-xs text-gray-500 mt-1" >
380- { t ( 'settings.imageModelHint' ) || 'Leer lassen für Standardmodell' }
382+ { t ( 'settings.imageModelHint' ) }
381383 </ p >
382384 </ div >
383385
384386 < div >
385387 < label className = "block text-sm font-medium text-gray-700 mb-1 flex items-center" >
386- < Key size = { 14 } className = "mr-1" /> { t ( 'settings.imageApiKey' ) || 'API-Schlüssel' }
388+ < Key size = { 14 } className = "mr-1" /> { t ( 'settings.imageApiKey' ) }
387389 </ label >
388390 < input
389391 type = "password"
390392 value = { settings . image_api_key }
391393 onChange = { e => setSettings ( { ...settings , image_api_key : e . target . value } ) }
392394 className = "w-full border border-gray-200 rounded-xl px-4 py-3 focus:ring-2 focus:ring-emerald-500 outline-none"
393- placeholder = { `API Key für ${ currentImageProvider ?. name || 'OpenAI (DALL-E)' } ` }
395+ placeholder = { t ( 'settings.imageApiKeyPlaceholder' , { provider : currentImageProvider ?. name || 'OpenAI' } ) }
394396 />
395397 </ div >
396398 </ div >
0 commit comments