aboutsummaryrefslogtreecommitdiff
path: root/src/client/views/smartdraw/SmartDrawHandler.tsx
diff options
context:
space:
mode:
authorbobzel <zzzman@gmail.com>2025-02-26 18:31:13 -0500
committerbobzel <zzzman@gmail.com>2025-02-26 18:31:13 -0500
commit2e03c9bf1af2796faef8b81b326b48f4cd136d95 (patch)
tree1a368765f65dfbb123de1a2b8b0014b7e47279a7 /src/client/views/smartdraw/SmartDrawHandler.tsx
parent2d73f20b38424119c9419b7b85799eb3aff6c17f (diff)
fixed toggling number dropdown. Added firefly to gpt popup menu.
Diffstat (limited to 'src/client/views/smartdraw/SmartDrawHandler.tsx')
-rw-r--r--src/client/views/smartdraw/SmartDrawHandler.tsx78
1 files changed, 54 insertions, 24 deletions
diff --git a/src/client/views/smartdraw/SmartDrawHandler.tsx b/src/client/views/smartdraw/SmartDrawHandler.tsx
index 7db9ef133..9d67d111b 100644
--- a/src/client/views/smartdraw/SmartDrawHandler.tsx
+++ b/src/client/views/smartdraw/SmartDrawHandler.tsx
@@ -1,6 +1,6 @@
+import { Button, IconButton } from '@dash/components';
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
import { Checkbox, FormControlLabel, Radio, RadioGroup, Slider, Switch } from '@mui/material';
-import { Button, IconButton } from '@dash/components';
import { action, makeObservable, observable, runInAction } from 'mobx';
import { observer } from 'mobx-react';
import React from 'react';
@@ -13,7 +13,9 @@ import { Doc, DocListCast } from '../../../fields/Doc';
import { DocData } from '../../../fields/DocSymbols';
import { InkData, InkField, InkTool } from '../../../fields/InkField';
import { BoolCast, ImageCast, NumCast, StrCast } from '../../../fields/Types';
+import { Networking } from '../../Network';
import { GPTCallType, gptAPICall, gptDrawingColor } from '../../apis/gpt/GPT';
+import { DocumentType } from '../../documents/DocumentTypes';
import { Docs } from '../../documents/Documents';
import { SettingsManager } from '../../util/SettingsManager';
import { undoable } from '../../util/UndoManager';
@@ -21,12 +23,10 @@ import { SVGToBezier, SVGType } from '../../util/bezierFit';
import { InkingStroke } from '../InkingStroke';
import { ObservableReactComponent } from '../ObservableReactComponent';
import { MarqueeView } from '../collections/collectionFreeForm';
-import { ActiveInkArrowEnd, ActiveInkArrowStart, ActiveInkDash, ActiveInkFillColor, ActiveInkBezierApprox, ActiveInkColor, ActiveInkWidth, ActiveIsInkMask, DocumentView, DocumentViewInternal } from '../nodes/DocumentView';
-import './SmartDrawHandler.scss';
-import { Networking } from '../../Network';
+import { ActiveInkArrowEnd, ActiveInkArrowStart, ActiveInkBezierApprox, ActiveInkColor, ActiveInkDash, ActiveInkFillColor, ActiveInkWidth, ActiveIsInkMask, DocumentView, DocumentViewInternal } from '../nodes/DocumentView';
import { OpenWhere } from '../nodes/OpenWhere';
-import { FireflyDimensionsMap, FireflyImageDimensions, FireflyImageData } from './FireflyConstants';
-import { DocumentType } from '../../documents/DocumentTypes';
+import { FireflyDimensionsMap, FireflyImageData, FireflyImageDimensions } from './FireflyConstants';
+import './SmartDrawHandler.scss';
export interface DrawingOptions {
text: string;
@@ -268,28 +268,56 @@ export class SmartDrawHandler extends ObservableReactComponent<object> {
/**
* Calls Firefly API to create an image based on user input
*/
- createImageWithFirefly = (input: string, seed?: number, changeInPlace?: boolean): Promise<FireflyImageData> => {
+ createImageWithFirefly = (input: string, seed?: number): Promise<FireflyImageData | Doc | undefined> => {
+ this._lastInput.text = input;
+ return SmartDrawHandler.CreateWithFirefly(input, this._imgDims, seed);
+ }; /**
+ * Calls Firefly API to create an image based on user input
+ */
+ recreateImageWithFirefly = (input: string, seed?: number): Promise<FireflyImageData | Doc | undefined> => {
this._lastInput.text = input;
- const dims = FireflyDimensionsMap[this._imgDims];
+ return SmartDrawHandler.ReCreateWithFirefly(input, this._imgDims, seed);
+ };
+ public static ReCreateWithFirefly(input: string, imgDims: FireflyImageDimensions, seed?: number): Promise<FireflyImageData | Doc | undefined> {
+ const dims = FireflyDimensionsMap[imgDims];
return Networking.PostToServer('/queryFireflyImage', { prompt: input, width: dims.width, height: dims.height, seed })
.then(img => {
- const newseed = img.accessPaths.agnostic.client.match(/\/(\d+)upload/)[1];
- if (!changeInPlace) {
- const imgDoc: Doc = Docs.Create.ImageDocument(img.accessPaths.agnostic.client, {
- title: input.match(/^(.*?)~~~.*$/)?.[1] || input,
- nativeWidth: dims.width,
- nativeHeight: dims.height,
- ai: 'firefly',
- ai_firefly_seed: newseed,
- ai_firefly_prompt: input,
- });
- DocumentViewInternal.addDocTabFunc(imgDoc, OpenWhere.addRight);
- this._selectedDocs.push(imgDoc);
+ if (img.error) {
+ alert('recreate image failed: ' + img.error);
+ return undefined;
}
return { prompt: input, seed, pathname: img.accessPaths.agnostic.client };
})
- .catch(e => alert('create image failed: ' + e.toString()));
- };
+ .catch(e => {
+ alert('recreate image failed: ' + e.toString());
+ return undefined;
+ });
+ }
+ public static CreateWithFirefly(input: string, imgDims: FireflyImageDimensions, seed?: number): Promise<FireflyImageData | Doc | undefined> {
+ const dims = FireflyDimensionsMap[imgDims];
+ return Networking.PostToServer('/queryFireflyImage', { prompt: input, width: dims.width, height: dims.height, seed })
+ .then(img => {
+ if (img.error) {
+ alert('create image failed: ' + img.error);
+ return undefined;
+ }
+ const newseed = img.accessPaths.agnostic.client.match(/\/(\d+)upload/)[1];
+ const imgDoc: Doc = Docs.Create.ImageDocument(img.accessPaths.agnostic.client, {
+ title: input.match(/^(.*?)~~~.*$/)?.[1] || input,
+ nativeWidth: dims.width,
+ nativeHeight: dims.height,
+ ai: 'firefly',
+ ai_firefly_seed: newseed,
+ ai_firefly_prompt: input,
+ });
+ DocumentViewInternal.addDocTabFunc(imgDoc, OpenWhere.addRight);
+ return imgDoc;
+ })
+ .catch(e => {
+ alert('create image failed: ' + e.toString());
+ return undefined;
+ });
+ }
/**
* Regenerates drawings with the option to add a specific regenerate prompt/request.
@@ -307,10 +335,12 @@ export class SmartDrawHandler extends ObservableReactComponent<object> {
if (this._regenInput) {
// if (this._selectedDoc) {
const newPrompt = doc.ai_firefly_prompt ? `${doc.ai_firefly_prompt} ~~~ ${this._regenInput}` : this._regenInput;
- return this.createImageWithFirefly(newPrompt, NumCast(doc?.ai_firefly_seed), changeInPlace);
+ return changeInPlace ? this.recreateImageWithFirefly(newPrompt, NumCast(doc?.ai_firefly_seed)) : this.createImageWithFirefly(newPrompt, NumCast(doc?.ai_firefly_seed));
// }
}
- return this.createImageWithFirefly(this._lastInput.text || StrCast(doc.ai_firefly_prompt), undefined, changeInPlace);
+ return changeInPlace
+ ? this.recreateImageWithFirefly(this._lastInput.text || StrCast(doc.ai_firefly_prompt), NumCast(doc?.ai_firefly_seed))
+ : this.createImageWithFirefly(this._lastInput.text || StrCast(doc.ai_firefly_prompt), NumCast(doc?.ai_firefly_seed));
case DocumentType.COL: {
try {
let res;