aboutsummaryrefslogtreecommitdiff
path: root/src/server/ApiManagers/FireflyManager.ts
diff options
context:
space:
mode:
authorbobzel <zzzman@gmail.com>2025-03-11 18:15:34 -0400
committerbobzel <zzzman@gmail.com>2025-03-11 18:15:34 -0400
commit79f44d95eb789d7b3cca33eedc38072f2bb43d2a (patch)
tree3f3556b129668633cc3d51104721744a5b1023d3 /src/server/ApiManagers/FireflyManager.ts
parent53b6682830fc5331a22db94e779bc17089d906cb (diff)
fixed calling firefly api for expand image
Diffstat (limited to 'src/server/ApiManagers/FireflyManager.ts')
-rw-r--r--src/server/ApiManagers/FireflyManager.ts363
1 files changed, 64 insertions, 299 deletions
diff --git a/src/server/ApiManagers/FireflyManager.ts b/src/server/ApiManagers/FireflyManager.ts
index 1e0fdb595..8b0fa6ec7 100644
--- a/src/server/ApiManagers/FireflyManager.ts
+++ b/src/server/ApiManagers/FireflyManager.ts
@@ -8,7 +8,7 @@ import { DashUploadUtils } from '../DashUploadUtils';
import { _error, _invalid, _success, Method } from '../RouteManager';
import { Directory, filesDirectory } from '../SocketData';
import ApiManager, { Registration } from './ApiManager';
-import { Upload } from '../SharedMediaTypes';
+import { Upload } from '../SharedMediaTypes';
export default class FireflyManager extends ApiManager {
getBearerToken = () =>
@@ -332,315 +332,80 @@ export default class FireflyManager extends ApiManager {
register({
method: Method.POST,
- subscription: '/outpaintImageFour',
+ subscription: '/outpaintImage',
secureHandler: ({ req, res }) =>
-
- this.uploadImageToDropbox(req.body.imageUrl, req.user as DashUserModel)
- .then(uploadUrl => {
- if (uploadUrl instanceof Error) {
- _invalid(res, uploadUrl.message);
- return;
- }
- return this.getBearerToken()
- .then(tokenResponse => tokenResponse?.json())
- .then((tokenData: { access_token: string }) =>
- fetch('https://firefly-api.adobe.io/v3/images/expand', {
- method: 'POST',
- headers: {
- //'Content-Type': 'application/json',
- 'Accept': 'application/json',
- 'x-api-key': process.env._CLIENT_FIREFLY_CLIENT_ID ?? '',
- 'Authorization': `Bearer ${tokenData.access_token}`,
+ this.uploadImageToDropbox(req.body.imageUrl, req.user as DashUserModel).then(uploadUrl => {
+ if (uploadUrl instanceof Error) {
+ _invalid(res, uploadUrl.message);
+ return;
+ }
+ return this.getBearerToken()
+ .then(tokenResponse => tokenResponse?.json())
+ .then((tokenData: { access_token: string }) =>
+ fetch('https://firefly-api.adobe.io/v3/images/expand', {
+ method: 'POST',
+ headers: [
+ ['Content-Type', 'application/json'],
+ ['Accept', 'application/json'],
+ ['x-api-key', process.env._CLIENT_FIREFLY_CLIENT_ID ?? ''],
+ ['Authorization', `Bearer ${tokenData.access_token}`],
+ ],
+ body: JSON.stringify({
+ image: {
+ source: { url: uploadUrl },
},
- body: JSON.stringify({
- image: {
- source: { url: uploadUrl },
- },
- size: {
- width: req.body.newDimensions.width,
- height: req.body.newDimensions.height,
+ // mask: {
+ // source: { url: uploadUrl },
+ // },
+ size: {
+ width: Math.round(req.body.newDimensions.width),
+ height: Math.round(req.body.newDimensions.height),
+ },
+ prompt: req.body.prompt ?? '',
+ numVariations: 1,
+ placement: {
+ inset: {
+ left: 0,
+ top: 0,
+ right: Math.round(req.body.newDimensions.width - req.body.originalDimensions.width),
+ bottom: Math.round(req.body.newDimensions.height - req.body.originalDimensions.height),
},
- prompt: req.body.prompt ?? '',
- numVariations: 1,
- placement: {
- inset: {
- left: 0,
- top: 0,
- right: req.body.newDimensions.width - req.body.originalDimensions.width,
- bottom: req.body.newDimensions.height - req.body.originalDimensions.height,
- },
- alignment: {
- horizontal: 'center',
- vertical: 'center',
- },
+ alignment: {
+ horizontal: 'center',
+ vertical: 'center',
},
- }),
- })
- )
- .then(expandResp => expandResp?.json())
- .then(expandData => {
- if (expandData.error_code || !expandData.outputs?.[0]?.image?.url) {
- console.error('Firefly validation error:', expandData);
- _error(res, expandData.message ?? 'Failed to generate image');
- } else {
- DashUploadUtils.UploadImage(expandData.outputs[0].image.url)
- .then((info: Upload.ImageInformation | Error) => {
- if (info instanceof Error) {
- _invalid(res, info.message);
- } else {
- _success(res, { url: info.accessPaths.agnostic.client });
- }
- })
- .catch(uploadErr => {
- console.error('DashUpload Error:', uploadErr);
- _error(res, 'Failed to upload generated image.');
- });
- }
+ },
+ }),
})
- .catch(err => {
- console.error('Firefly request error:', err);
- _error(res, 'Failed to expand image');
- });
- }),
- });
- register({
- method: Method.POST,
- subscription: '/outpaintImageThree',
- secureHandler: ({ req, res }) =>
- new Promise<void>(resolver => {
- this.uploadImageToDropbox(req.body.imageUrl, req.user as DashUserModel)
- .then(dropboxImgUrl => {
- if (dropboxImgUrl instanceof Error) {
- _invalid(res, dropboxImgUrl.message);
- throw new Error('Error uploading image to dropbox');
+ )
+ .then(expandResp => expandResp?.json())
+ .then(expandData => {
+ if (expandData.error_code || !expandData.outputs?.[0]?.image?.url) {
+ console.error('Firefly validation error:', expandData);
+ _error(res, expandData.message ?? 'Failed to generate image');
+ } else {
+ return DashUploadUtils.UploadImage(expandData.outputs[0].image.url)
+ .then((info: Upload.ImageInformation | Error) => {
+ if (info instanceof Error) {
+ _invalid(res, info.message);
+ } else {
+ _success(res, { url: info.accessPaths.agnostic.client });
+ }
+ })
+ .catch(uploadErr => {
+ console.error('DashUpload Error:', uploadErr);
+ _error(res, 'Failed to upload generated image.');
+ });
}
- return dropboxImgUrl;
})
- .then(dropboxImgUrl =>
- this.getBearerToken().then(tokenResponse =>
- tokenResponse?.json().then((tokenData: { access_token: string }) =>
- fetch('https://firefly-api.adobe.io/v3/images/expand', {
- method: 'POST',
- headers: [
- ['Content-Type', 'application/json'],
- ['Accept', 'application/json'],
- ['x-api-key', process.env._CLIENT_FIREFLY_CLIENT_ID ?? ''],
- ['Authorization', `Bearer ${tokenData.access_token}`],
- ],
- body: JSON.stringify({
- image: {
- source: {
- url: dropboxImgUrl,
- },
- },
- numVariations: 1,
- prompt: req.body.prompt,
- size: {
- width: req.body.newDimensions.width,
- height: req.body.newDimensions.height,
- },
- placement: {
- inset: {
- left: 0,
- top: 0,
- right: req.body.newDimensions.width - req.body.originalDimensions.width,
- bottom: req.body.newDimensions.height - req.body.originalDimensions.height,
- },
- alignment: {
- horizontal: 'center',
- vertical: 'center',
- },
- },
- }),
- })
- .then(resp => resp.json())
- .then(expandData => {
- if (expandData.error_code || !expandData.outputs?.[0]?.image?.url) {
- _invalid(res, expandData.message ?? 'Failed to expand image');
- resolver();
- } else {
- DashUploadUtils.UploadImage(expandData.outputs[0].image.url)
- .then(info => {
- if (info instanceof Error) {
- _invalid(res, info.message);
- } else {
- _success(res, { url: info.accessPaths.agnostic.client });
- }
- })
- .then(resolver)
- .catch(uploadErr => {
- console.error('DashUpload Error:', uploadErr);
- _invalid(res, 'Failed to upload generated image.');
- resolver();
- });
- }
- })
- .catch(err => {
- console.error('Firefly API Error:', err);
- _error(res, 'Failed to expand image');
- resolver();
- })
- )
- )
- )
.catch(err => {
- console.error('Dropbox Error:', err);
- _error(res, 'Failed to upload image to Dropbox');
- resolver();
+ console.error('Firefly request error:', err);
+ _error(res, 'Failed to expand image');
});
}),
});
-
-
- register({
- method: Method.POST,
- subscription: '/outpaintImageTwo',
- secureHandler: async ({ req, res }) => {
- try {
- const uploadUrl = await this.uploadImageToDropbox(req.body.imageUrl, req.user as DashUserModel);
-
- if (uploadUrl instanceof Error) {
- _invalid(res, uploadUrl.message);
- return;
- }
-
- const tokenResponse = await this.getBearerToken();
- const tokenData = await tokenResponse?.json();
-
- const body = JSON.stringify({
- image: { source: { url: uploadUrl } },
- prompt: req.body.prompt,
- numVariations: 1,
- size: {
- width: req.body.newDimensions.width,
- height: req.body.newDimensions.height,
- },
- placement: {
- inset: {
- left: 0,
- top: 0,
- right: req.body.newDimensions.width - req.body.originalDimensions.width,
- bottom: req.body.newDimensions.height - req.body.originalDimensions.height,
- },
- alignment: {
- horizontal: 'center',
- vertical: 'center',
- },
- },
- });
-
- console.log('Sending outpainting request:', body);
-
- const expandResp = await fetch('https://firefly-api.adobe.io/v3/images/expand', {
- method: 'POST',
- headers: {
- 'Content-Type': 'application/json',
- Accept: 'application/json',
- 'x-api-key': process.env._CLIENT_FIREFLY_CLIENT_ID ?? '',
- Authorization: `Bearer ${tokenData.access_token}`,
- },
- body,
- });
-
- const expandData = await expandResp.json();
- console.log('Received expandData:', expandData);
-
- if (expandData.error_code || !expandData.outputs?.[0]?.image?.url) {
- console.error('Expand API Error:', expandData);
- _error(res, expandData.message ?? 'Failed to generate image');
- return;
- }
-
- const uploadedInfo = await DashUploadUtils.UploadImage(expandData.outputs[0].image.url);
-
- if (uploadedInfo instanceof Error) {
- console.error('Upload Error:', uploadedInfo.message);
- _invalid(res, uploadedInfo.message);
- return;
- }
-
- console.log('Successfully uploaded image URL:', uploadedInfo.accessPaths.agnostic.client);
- _success(res, { url: uploadedInfo.accessPaths.agnostic.client });
- } catch (err) {
- console.error('Unexpected error during outpainting:', err);
- _error(res, 'Unexpected error during outpainting');
- }
- },
- });
-
- register({
-
-
- method: Method.POST,
- subscription: '/outpaintImage',
- secureHandler: ({ req, res }) =>
- this.uploadImageToDropbox(req.body.imageUrl, req.user as DashUserModel).then(uploadUrl =>
- uploadUrl instanceof Error
- ? _invalid(res, uploadUrl.message)
- : this.getBearerToken()
- .then(tokenResponse => tokenResponse?.json())
- .then((tokenData: { access_token: string }) =>
- fetch('https://firefly-api.adobe.io/v3/images/expand', {
- method: 'POST',
- headers: [
- ['Content-Type', 'application/json'],
- ['Accept', 'application/json'],
- ['x-api-key', process.env._CLIENT_FIREFLY_CLIENT_ID ?? ''],
- ['Authorization', `Bearer ${tokenData.access_token}`],
- ],
- body: JSON.stringify({
- image: { source: { url: uploadUrl } },
- numVariations: 1,
- size: {
- width: req.body.newDimensions.width,
- height: req.body.newDimensions.height,
- },
- prompt: req.body.prompt,
- placement: {
- inset: {
- left: 0,
- top: 0,
- right: 0, //req.body.newDimensions.width - req.body.originalDimensions.width,
- bottom: 0 //req.body.newDimensions.height - req.body.originalDimensions.height,
- },
- alignment: {
- horizontal: 'center',
- vertical: 'center',
- },
- },
- }),
- })
- )
- .then(expandResp => expandResp.json())
- .then(expandData => {
- if (expandData.error_code || !expandData.outputs?.[0]?.image?.url) {
- _error(res, expandData.message ?? "Failed to generate image");
- } else {
- DashUploadUtils.UploadImage(expandData.outputs[0].image.url)
- .then((info: Upload.ImageInformation | Error) => {
- if (info instanceof Error) {
- _invalid(res, info.message);
- } else {
- // THIS IS CRUCIAL: Respond exactly how your front end expects
- console.log("Successfully uploaded image. URL:", info.accessPaths.agnostic.client);
- _success(res, { url: info.accessPaths.agnostic.client });
- }
- })
- .catch(uploadErr => {
-
- console.error('DashUpload Error:', uploadErr);
- _error(res, 'Failed to upload generated image.');
- });
- }
- })
- .catch(err => {
- console.error(err);
- _error(res, 'Failed to expand image');
- })
- ),
- });
- /* register({
+ /* register({
method: Method.POST
subscription: '/queryFireflyOutpaint',
secureHandler: ({req, res}) =>
@@ -683,7 +448,7 @@ export default class FireflyManager extends ApiManager {
: this.expandImage(uploadUrl, req.body.prompt).then(text => {
if (text.error_code) _error(res, text.message);
else
- DashUploadUtils.UploadImage(text.outputs[0].image.url).then(info => {
+ return DashUploadUtils.UploadImage(text.outputs[0].image.url).then(info => {
if (info instanceof Error) _invalid(res, info.message);
else _success(res, info);
});