-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathtask.store.ts
More file actions
104 lines (93 loc) · 2.83 KB
/
task.store.ts
File metadata and controls
104 lines (93 loc) · 2.83 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
import { createIndexedDBStorage } from '@/lib/indexed-db-storage';
import { createTaskStore, type TaskStoreState } from 'kernel-script';
export type ImageGenerationConfig = {
model: string;
resolution: string;
ratio: string;
imageCount: number;
referenceMode: string;
seed: string;
promptList: string;
lockSeed: boolean;
referenceCount: number;
defaultReferences: string[];
};
export interface ReferenceItem {
name: string;
prompt?: string;
type?: 'upload' | 'generated';
image?: {
userUploadedImage: { filePath?: string };
generatedImage?: { prompt?: string };
};
[key: string]: unknown;
}
export interface TestTaskState {
config: ImageGenerationConfig;
referencesStore: ReferenceItem[];
updateConfig: (updates: Partial<ImageGenerationConfig>) => void;
setReferenceStore: (referencesStore: ReferenceItem[]) => void;
addReferenceStore: (
name: string,
fifeUrl: string,
type?: 'upload' | 'generated',
prompt?: string,
dimensions?: { width: number; height: number }
) => void;
removeReferenceStore: (name: string) => void;
}
export type FxGenImageState = TaskStoreState & TestTaskState;
const DEFAULT_CONFIG: ImageGenerationConfig = {
model: 'NARWHAL',
resolution: '2K',
ratio: 'LANDSCAPE',
imageCount: 1,
referenceMode: 'DEFAULT',
seed: '917984',
lockSeed: true,
promptList: 'con cá',
referenceCount: 10,
defaultReferences: [],
};
export const getTestTaskStore = (identifier: string) => {
return createTaskStore<TestTaskState>({
name: `TEST_TASK`,
storage: createIndexedDBStorage(`${identifier}`),
partialize: (state) => ({
config: state.config,
referencesStore: state.referencesStore,
}),
extend: (set, _get) => ({
config: DEFAULT_CONFIG,
referencesStore: [],
updateConfig: (updates: Partial<ImageGenerationConfig>) =>
set((state: FxGenImageState) => ({
config: { ...state.config, ...updates },
})),
setReferenceStore: (referencesStore: ReferenceItem[]) => set({ referencesStore }),
addReferenceStore: (
name: string,
fifeUrl: string,
type: 'upload' | 'generated' = 'upload',
prompt?: string,
dimensions?: { width: number; height: number }
) =>
set((state: FxGenImageState) => {
if (state.referencesStore.some((r) => r.name === name)) {
return state;
}
return {
referencesStore: [
...state.referencesStore,
{ name, fifeUrl, type, prompt, dimensions },
],
};
}),
removeReferenceStore: (name: string) =>
set((state: FxGenImageState) => ({
referencesStore: state.referencesStore.filter((r) => r.name !== name),
})),
}),
});
};
export const useTestTaskStore = getTestTaskStore('Fake_Identifier');