API attemped fix

79a1b15600fa027527979d26003fac6046b9343a

WBlair1 <wolfgangblair1@gmail.com>

1 files changed, +54 -21Showing whitespace changes
public/scripts/extensions/stable-diffusion/index.js+54 -21
@@ -1642,43 +1642,76 @@ async function loadModels() {
16421642 $('#sd_model').val(extension_settings.sd.model).trigger('change');
16431643 }
16441644}
1645+
16451646async function generateStabilityImage(prompt, negativePrompt) {
1646- let endpoint;
1647+ const payload = {
1648+ prompt: prompt,
1649+ negative_prompt: negativePrompt,
1650+ width: extension_settings.sd.width,
1651+ height: extension_settings.sd.height,
1652+ seed: extension_settings.sd.seed >= 0 ? extension_settings.sd.seed : undefined,
1653+ style_preset: extension_settings.sd.stability_style_preset,
1654+ output_format: extension_settings.sd.stability_output_format,
1655+ };
1656+
1657+ const formData = new FormData();
1658+ for (const [key, value] of Object.entries(payload)) {
1659+ if (value !== undefined) {
1660+ formData.append(key, String(value));
1661+ }
1662+ }
1663+
1664+ let apiUrl;
16471665 switch (extension_settings.sd.model) {
16481666 case 'stable-image-ultra':
16491667 endpointapiUrl = 'https://api.stability.ai/v2beta/stable-image/generate/ultra';
16501668 break;
16511669 case 'stable-image-core':
16521670 endpointapiUrl = 'https://api.stability.ai/v2beta/stable-image/generate/core';
16531671 break;
16541672 case 'stable-diffusion-3':
16551673 endpointapiUrl = 'https://api.stability.ai/v2beta/stable-image/generate/sd3';
16561674 break;
16571675 default:
16581676 throw new Error('Invalid Stability AI model selected');
16591677 }
16601678
1661- const result = await fetch('/api/sd/stability/generate', {
1679+ try {
1680+ const response = await fetch(apiUrl, {
16621681 method: 'POST',
1663- headers: getRequestHeaders(),
1682+ headers: {
1664- body: JSON.stringify({
1683+ 'Authorization': `Bearer ${extension_settings.sd.stability_key}`,
1665- key: extension_settings.sd.stability_key,
1684+ 'Accept': 'image/*',
1666- endpoint: endpoint,
1685+ },
16671686 promptbody: promptformData,
1668- negative_prompt: negativePrompt,
1669- seed: extension_settings.sd.seed >= 0 ? extension_settings.sd.seed : undefined,
1670- style_preset: extension_settings.sd.stability_style_preset,
1671- aspect_ratio: extension_settings.sd.stability_aspect_ratio,
1672- }),
16731687 });
16741688
16751689 if (result!response.ok) {
16761690 const dataerrorText = await resultresponse.jsontext();
1677- return { format: extension_settings.sd.stability_output_format, data: data.image };
1691+ throw new Error(`HTTP ${response.status}: ${errorText}`);
1678- } else {
1692+ }
1679- const text = await result.text();
1693+
1680- throw new Error(text);
1694+ const arrayBuffer = await response.arrayBuffer();
1695+ const base64Image = arrayBufferToBase64(arrayBuffer);
1696+
1697+ return {
1698+ format: extension_settings.sd.stability_output_format,
1699+ data: base64Image,
1700+ };
1701+ } catch (error) {
1702+ console.error('Error generating image with Stability AI:', error);
1703+ throw error;
1704+ }
1705+}
1706+
1707+function arrayBufferToBase64(buffer) {
1708+ let binary = '';
1709+ const bytes = new Uint8Array(buffer);
1710+ const len = bytes.byteLength;
1711+ for (let i = 0; i < len; i++) {
1712+ binary += String.fromCharCode(bytes[i]);
16811713 }
1714+ return btoa(binary);
16821715}
16831716
16841717