@innovastudio/contentbuilder 1.5.122 → 1.5.124

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/index.d.ts CHANGED
@@ -120,7 +120,6 @@ interface ContentBuilderOptions {
120
120
  audioSelectMaxWidth?: string;
121
121
  mediaSelectMaxWidth?: string;
122
122
  otherSelectMaxWidth?: string;
123
- assetPanelFullScreen?: boolean;
124
123
  codeEditorWidth?: string;
125
124
  codeEditorHeight?: string;
126
125
  codeEditorMaxWidth?: string;
@@ -215,6 +214,36 @@ interface ContentBuilderOptions {
215
214
  commandInfoCanvasMode?: any[];
216
215
  onStartRequest?: () => void;
217
216
 
217
+ imageModel?: string;
218
+ defaultImageGenerationProvider?: string;
219
+
220
+ //-- Asset Manager
221
+ listFilesUrl?: string;
222
+ listFoldersUrl?: string;
223
+ deleteFilesUrl?: string;
224
+ moveFilesUrl?: string;
225
+ createFolderUrl?: string;
226
+ uploadFilesUrl?: string;
227
+ renameFileUrl?: string;
228
+ getMmodelsUrl?: string;
229
+ textToImageUrl?: string;
230
+ upscaleImageUrl?: string;
231
+ controlNetUrl?: string;
232
+ saveTextUrl?: string;
233
+ viewUrl?: string;
234
+ viewFileUrl?: string;
235
+ assetFolderTree?: boolean;
236
+ assetFilesOnly?: boolean;
237
+ assetPanelReverse?: boolean;
238
+ assetRefreshButton?: boolean;
239
+ assetAllowedFileTypes?: any[];
240
+ assetShowRelativeTime?: boolean;
241
+ assetLocale?: string;
242
+ assetDateShortOptions?: any[];
243
+ assetDateLongOptions?: any[];
244
+ assetPanelFullScreen?: boolean;
245
+ //---
246
+
218
247
  //-- Form Builder
219
248
  defaultTextGenerationProvider?: string;
220
249
  model?: string;
@@ -239,9 +268,9 @@ interface ContentBuilderOptions {
239
268
  generateMediaUrl_Google?: string;
240
269
  assetsFolder?: string;
241
270
  templatesUrl?: string;
242
- templateFilters: any[];
271
+ templateFilters?: any[];
243
272
  templatesConfig?: Record<string, any>;
244
- customData: Record<string, any>;
273
+ customData?: Record<string, any>;
245
274
  exampleImageUrl?: string;
246
275
  exampleVideoUrl?: string;
247
276
  exampleAudioUrl?: string;
@@ -281,5 +310,7 @@ declare class ContentBuilder {
281
310
  setPageSize(s?: string)
282
311
  openPageOptions(): void;
283
312
  print(): void;
313
+
314
+ generateImage(prompt: string, callback?: () => void): void;
284
315
  }
285
316
  export default ContentBuilder;
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@innovastudio/contentbuilder",
3
3
  "type": "module",
4
- "version": "1.5.122",
4
+ "version": "1.5.124",
5
5
  "description": "",
6
6
  "main": "public/contentbuilder/contentbuilder.esm.js",
7
7
  "types": "index.d.ts",
@@ -97944,11 +97944,151 @@ Add an image for each feature.`, 'Create a new content showcasing a photo galler
97944
97944
  }
97945
97945
  return closestRatio;
97946
97946
  }
97947
+ async waitingResultFal(jsonBody, requestId) {
97948
+ jsonBody.request_id = requestId;
97949
+ const getResultEndpoint = (model, requestId) => {
97950
+ let endpoint = `https://queue.fal.run/${model}/requests/${requestId}`;
97951
+ let firstTwoParts = model.split('/').slice(0, 2).join('/');
97952
+ endpoint = endpoint.replace('{MODEL}', firstTwoParts);
97953
+ return endpoint;
97954
+ };
97955
+ const resultEndpoint = getResultEndpoint(jsonBody.model, requestId);
97956
+ jsonBody.endpoint = resultEndpoint;
97957
+ let url = this.getResultUrl_Fal;
97958
+ let headers = {
97959
+ ...this.headers,
97960
+ ...this.defaultHeaders
97961
+ };
97962
+ const response = await fetch(url, {
97963
+ signal: this.signal,
97964
+ method: 'POST',
97965
+ headers,
97966
+ body: JSON.stringify(jsonBody)
97967
+ });
97968
+ // const result = await response.json();
97969
+ let text = await response.text(); // Read response as text first
97970
+ let result;
97971
+ try {
97972
+ result = JSON.parse(text); // Attempt to parse JSON
97973
+ } catch (e) {
97974
+ // console.log(text);
97975
+ return;
97976
+ }
97977
+ if (!result.error) {
97978
+ const data = result.data;
97979
+ let output = [];
97980
+ let output2 = [];
97981
+ data.entries && data.entries.forEach(item => {
97982
+ output.push(item.url);
97983
+ output2.push(item.file_url);
97984
+ });
97985
+ return {
97986
+ mediaGenerated: true,
97987
+ status: 'success',
97988
+ output,
97989
+ output2
97990
+ };
97991
+ } else {
97992
+ return {
97993
+ mediaGenerated: false,
97994
+ status: 'error',
97995
+ message: result.error //this.out('Request failed.')
97996
+ };
97997
+ }
97998
+ }
97999
+
98000
+ async generateImage_Fal(prompt, callback) {
98001
+ this.controller = new AbortController();
98002
+ this.signal = this.controller.signal;
98003
+ let model = this.imageModel || 'flux-schnell';
98004
+ let jsonBody = {};
98005
+ jsonBody.model = model;
98006
+ jsonBody.customData = this.customData;
98007
+ jsonBody.endpoint = `https://queue.fal.run/${model}`;
98008
+ jsonBody.payload = {
98009
+ prompt
98010
+ };
98011
+ let url = this.generateMediaUrl_Fal;
98012
+ let headers = {
98013
+ ...this.headers,
98014
+ ...this.defaultHeaders
98015
+ };
98016
+ const response = await fetch(url, {
98017
+ signal: this.signal,
98018
+ method: 'POST',
98019
+ headers,
98020
+ body: JSON.stringify(jsonBody)
98021
+ });
98022
+ const result = await response.json();
98023
+ if (result.error) {
98024
+ // console.log(result.error);
98025
+ this.dictation.finish();
98026
+ }
98027
+ let requestId = result.request_id;
98028
+ const getStatusEndpoint = (model, requestId) => {
98029
+ let endpoint = `https://queue.fal.run/${model}/requests/${requestId}`;
98030
+ let firstTwoParts = model.split('/').slice(0, 2).join('/');
98031
+ endpoint = endpoint.replace('{MODEL}', firstTwoParts);
98032
+ return endpoint;
98033
+ };
98034
+ const statusEndpoint = getStatusEndpoint(model, requestId);
98035
+ let inputCheckStatus = {
98036
+ model,
98037
+ endpoint: statusEndpoint,
98038
+ request_id: requestId
98039
+ // customData: this.customData
98040
+ };
98041
+
98042
+ let status;
98043
+ do {
98044
+ const response = await fetch(this.checkRequestStatusUrl_Fal, {
98045
+ signal: this.signal,
98046
+ method: 'POST',
98047
+ headers,
98048
+ body: JSON.stringify(inputCheckStatus)
98049
+ });
98050
+ const result = await response.json();
98051
+ if (result.ok && result.status) {
98052
+ // From endpoint that uses SDK
98053
+ status = result.status;
98054
+ } else if (result.data) {
98055
+ // From endpoint that uses API
98056
+ let data = result.data;
98057
+ if (data.image || data.audio || data.audio_file || data.video) {
98058
+ status = 'COMPLETED';
98059
+ } else if (data.detail && typeof data.detail === 'string' && data.detail.startsWith('Request is still in progress')) {
98060
+ //Request is still in progress
98061
+ status = 'IN_PROGRESS';
98062
+ } else if (data.status && !data.error) {
98063
+ status = data.status;
98064
+ }
98065
+ }
98066
+ if (!status) {
98067
+ // const message = result.error || (result.data && JSON.stringify(result.data)) || this.out('Request failed.');
98068
+ // console.log(message);
98069
+ return;
98070
+ }
98071
+ if (status !== 'COMPLETED') {
98072
+ await new Promise(resolve => setTimeout(resolve, 5000)); // Wait before retrying
98073
+ }
98074
+ } while (status !== 'COMPLETED');
98075
+ if (status === 'COMPLETED') {
98076
+ const mediaResult = await this.waitingResultFal(jsonBody, requestId);
98077
+ if (mediaResult.output && mediaResult.output.length === 1) {
98078
+ let imageUrl = mediaResult.output[0];
98079
+ callback(imageUrl);
98080
+ }
98081
+ }
98082
+ }
97947
98083
  async generateImage(prompt, callback) {
98084
+ if (this.defaultImageGenerationProvider === 'fal') {
98085
+ this.generateImage_Fal(prompt, callback);
98086
+ return;
98087
+ }
97948
98088
  this.controller = new AbortController(); // Create a new AbortController
97949
98089
  this.signal = this.controller.signal; // Get a new signal object
97950
98090
 
97951
- let model = this.imageModel || 'realistic-vision-v3';
98091
+ let model = this.imageModel || 'flux-schnell'; //realistic-vision-v3
97952
98092
  let negative_prompt = this.imageNegativePrompt || 'duplicate, (deformed iris, deformed pupils, semi-realistic, cgi, 3d, render, sketch, cartoon, drawing, anime:1.4), text, close up, cropped, out of frame, worst quality, low quality, jpeg artifacts, ugly, duplicate, morbid, mutilated, extra fingers, mutated hands, poorly drawn hands, poorly drawn face, mutation, deformed, blurry, dehydrated, bad anatomy, bad proportions, extra limbs, cloned face, disfigured, gross proportions, malformed limbs, missing arms, missing legs, extra arms, extra legs, fused fingers, too many fingers, long neck, bad_prompt_version2, bad-hands-5, badhandv4, bad anatomy, deformed, mutated, amputated, missing finger, extra finger, fused fingers, missing leg, extra leg, fused legs, missing digit, extra digit, fused digits, missing hand, extra hand, fused hands, missing arm, extra arm, fused arms, missing limb, extra limb, fused limbs, fused bodies, merged bodies, extra bodies, dual bodies, extra navel, elongated body, missing joint, extra joint, fused joints, deformed hip, twisted limbs, twisted legs, twisted arms, missing head, extra head, double head, twins, missing ear, extra ear, deformed ear, black and white, monochrome, multiple views, blurry, text, signature, head out of frame, paintings, sketches, (worst quality:2), (low quality:2), (normal quality:2), lowres, grayscale, glans, bad hands, error, extra digit, fewer digits, cropped, jpeg artifacts, watermark, username, bad feet, poorly drawn hands, poorly drawn face, mutation, too many fingers, long neck, long body, long arms, cross-eyed, mutated hands, polar lowres, bad body, bad proportions, gross proportions, cropped head , bad eyes, extra breast, missing breast, fused breasts, unnatural proportions, necklace';
97953
98093
  let steps = this.imageSteps || 25;
97954
98094
  let guidance = this.imageGuidance || 7.5;