API attemped fix

This commit is contained in:
WBlair1 2024-07-03 16:35:46 -07:00
parent 38da3c22c0
commit 79a1b15600

View File

@ -1642,43 +1642,76 @@ async function loadModels() {
$('#sd_model').val(extension_settings.sd.model).trigger('change'); $('#sd_model').val(extension_settings.sd.model).trigger('change');
} }
} }
async function generateStabilityImage(prompt, negativePrompt) { async function generateStabilityImage(prompt, negativePrompt) {
let endpoint; const payload = {
prompt: prompt,
negative_prompt: negativePrompt,
width: extension_settings.sd.width,
height: extension_settings.sd.height,
seed: extension_settings.sd.seed >= 0 ? extension_settings.sd.seed : undefined,
style_preset: extension_settings.sd.stability_style_preset,
output_format: extension_settings.sd.stability_output_format,
};
const formData = new FormData();
for (const [key, value] of Object.entries(payload)) {
if (value !== undefined) {
formData.append(key, String(value));
}
}
let apiUrl;
switch (extension_settings.sd.model) { switch (extension_settings.sd.model) {
case 'stable-image-ultra': case 'stable-image-ultra':
endpoint = '/v2beta/stable-image/generate/ultra'; apiUrl = 'https://api.stability.ai/v2beta/stable-image/generate/ultra';
break; break;
case 'stable-image-core': case 'stable-image-core':
endpoint = '/v2beta/stable-image/generate/core'; apiUrl = 'https://api.stability.ai/v2beta/stable-image/generate/core';
break; break;
case 'stable-diffusion-3': case 'stable-diffusion-3':
endpoint = '/v2beta/stable-image/generate/sd3'; apiUrl = 'https://api.stability.ai/v2beta/stable-image/generate/sd3';
break; break;
default: default:
throw new Error('Invalid Stability AI model selected'); throw new Error('Invalid Stability AI model selected');
} }
const result = await fetch('/api/sd/stability/generate', { try {
const response = await fetch(apiUrl, {
method: 'POST', method: 'POST',
headers: getRequestHeaders(), headers: {
body: JSON.stringify({ 'Authorization': `Bearer ${extension_settings.sd.stability_key}`,
key: extension_settings.sd.stability_key, 'Accept': 'image/*',
endpoint: endpoint, },
prompt: prompt, body: formData,
negative_prompt: negativePrompt,
seed: extension_settings.sd.seed >= 0 ? extension_settings.sd.seed : undefined,
style_preset: extension_settings.sd.stability_style_preset,
aspect_ratio: extension_settings.sd.stability_aspect_ratio,
}),
}); });
if (result.ok) { if (!response.ok) {
const data = await result.json(); const errorText = await response.text();
return { format: extension_settings.sd.stability_output_format, data: data.image }; throw new Error(`HTTP ${response.status}: ${errorText}`);
} else {
const text = await result.text();
throw new Error(text);
} }
const arrayBuffer = await response.arrayBuffer();
const base64Image = arrayBufferToBase64(arrayBuffer);
return {
format: extension_settings.sd.stability_output_format,
data: base64Image,
};
} catch (error) {
console.error('Error generating image with Stability AI:', error);
throw error;
}
}
function arrayBufferToBase64(buffer) {
let binary = '';
const bytes = new Uint8Array(buffer);
const len = bytes.byteLength;
for (let i = 0; i < len; i++) {
binary += String.fromCharCode(bytes[i]);
}
return btoa(binary);
} }