Skip to content

Commit 79eddde

Browse files
committed
Remove legacy command, introduce quick imagine, consolodate similar embeds
1 parent e49a4e5 commit 79eddde

10 files changed

+382
-223
lines changed

src/commands/imagineLegacy.ts renamed to src/commands/imagineQuick.ts

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@ import { SlashCommandBuilder } from 'discord.js';
22
import { BotCommand } from '../types';
33
export default function(): BotCommand {
44
const command = new SlashCommandBuilder()
5-
.setName('imagine-legacy')
6-
.setDescription('Generate images from prompts')
5+
.setName('imagine-quick')
6+
.setDescription('Generate a single image based on a prompt. Faster.')
77
.addStringOption(option =>
88
option.setName('prompt')
99
.setDescription('The prompt to generate an image with')
@@ -43,11 +43,6 @@ export default function(): BotCommand {
4343
.setDescription('Prompt strength when using init image. 1.0 corresponds to full destruction of information in image')
4444
.setMinValue(0)
4545
.setMaxValue(1))
46-
.addIntegerOption(option =>
47-
option.setName('numout')
48-
.setDescription('How many images to generate with this prompt')
49-
.setMinValue(1)
50-
.setMaxValue(4))
5146
.addIntegerOption(option =>
5247
option.setName('numsteps')
5348
.setDescription('Number of denoising steps. Default 50')

src/embeds/addedToQueue.ts

Lines changed: 61 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,66 @@
1-
import { EmbedBuilder, codeBlock } from 'discord.js'
1+
import { EmbedBuilder, codeBlock, ActionRowBuilder } from 'discord.js'
22
import { BotEmbed, QueueItem } from '../types'
33

4-
export default function(queuePosition: number, queueItem: QueueItem): BotEmbed {
4+
export enum QueueType {
5+
Instant,
6+
Queued
7+
}
8+
9+
export default function(queueType: QueueType, queueItem: QueueItem, queuePosition?: number): BotEmbed {
10+
let embeds: EmbedBuilder[] = []
11+
let components: ActionRowBuilder<any>[] = []
12+
13+
switch (queueType) {
14+
case QueueType.Queued:
15+
embeds = [
16+
new EmbedBuilder()
17+
.setColor('#030354')
18+
.setTitle('Prompt added to queue')
19+
.setDescription(`Your prompt has been added to the image generation queue and is currently in position number ${queuePosition}.`)
20+
.setThumbnail('https://i.imgur.com/pXmPAAG.gif')
21+
.setTimestamp()
22+
.addFields([
23+
{name: 'Prompt', value: codeBlock(queueItem.prediction.prompt), inline: false},
24+
{name: 'Width', value: queueItem.prediction.width.toString(), inline: true},
25+
{name: 'Height', value: queueItem.prediction.height.toString(), inline: true},
26+
{name: 'Prompt Strength', value: queueItem.prediction.promptStrength.toString(), inline: true},
27+
{name: 'Steps', value: queueItem.prediction.numInferenceSteps.toString(), inline: true},
28+
{name: 'Guidance Scale', value: queueItem.prediction.guidanceScale.toString(), inline: true},
29+
{name: 'Has Mask', value: typeof queueItem.prediction.mask === 'undefined' ? 'No' : 'Yes', inline: true},
30+
{name: 'Has Base Image', value: typeof queueItem.prediction.initImage === 'undefined' ? 'No' : 'Yes', inline: true},
31+
{name: 'Seed', value: codeBlock(queueItem.seed.toString()), inline: false},
32+
{name: 'Prompt ID', value: codeBlock(queueItem.uuid), inline: false}
33+
])
34+
]
35+
break
36+
37+
case QueueType.Instant:
38+
default:
39+
embeds = [
40+
new EmbedBuilder()
41+
.setColor('#030354')
42+
.setTitle('Prompt will generate shortly')
43+
.setDescription(`Your prompt is currently first in the queue and will begin generating shortly.`)
44+
.setThumbnail('https://i.imgur.com/pXmPAAG.gif')
45+
.setTimestamp()
46+
.addFields([
47+
{name: 'Prompt', value: codeBlock(queueItem.prediction.prompt), inline: false},
48+
{name: 'Width', value: queueItem.prediction.width.toString(), inline: true},
49+
{name: 'Height', value: queueItem.prediction.height.toString(), inline: true},
50+
{name: 'Prompt Strength', value: queueItem.prediction.promptStrength.toString(), inline: true},
51+
{name: 'Steps', value: queueItem.prediction.numInferenceSteps.toString(), inline: true},
52+
{name: 'Guidance Scale', value: queueItem.prediction.guidanceScale.toString(), inline: true},
53+
{name: 'Has Mask', value: typeof queueItem.prediction.mask === 'undefined' ? 'No' : 'Yes', inline: true},
54+
{name: 'Has Base Image', value: typeof queueItem.prediction.initImage === 'undefined' ? 'No' : 'Yes', inline: true},
55+
{name: 'Seed', value: codeBlock(queueItem.seed.toString()), inline: false},
56+
{name: 'Prompt ID', value: codeBlock(queueItem.uuid), inline: false}
57+
])
58+
]
59+
}
60+
61+
562
return {
6-
embeds: [
7-
new EmbedBuilder()
8-
.setColor('#030354')
9-
.setTitle('Prompt added to queue')
10-
.setDescription(`Your prompt has been added to the image generation queue and is currently in position number ${queuePosition}.`)
11-
.setThumbnail('https://i.imgur.com/pXmPAAG.gif')
12-
.setTimestamp()
13-
.addFields([
14-
{name: 'Prompt', value: codeBlock(queueItem.prediction.prompt), inline: false},
15-
{name: 'Width', value: queueItem.prediction.width.toString(), inline: true},
16-
{name: 'Height', value: queueItem.prediction.height.toString(), inline: true},
17-
{name: 'Prompt Strength', value: queueItem.prediction.promptStrength.toString(), inline: true},
18-
{name: 'Steps', value: queueItem.prediction.numInferenceSteps.toString(), inline: true},
19-
{name: 'Guidance Scale', value: queueItem.prediction.guidanceScale.toString(), inline: true},
20-
{name: 'Has Mask', value: typeof queueItem.prediction.mask === 'undefined' ? 'No' : 'Yes', inline: true},
21-
{name: 'Has Base Image', value: typeof queueItem.prediction.initImage === 'undefined' ? 'No' : 'Yes', inline: true},
22-
{name: 'Seed', value: codeBlock(queueItem.seed.toString()), inline: false},
23-
{name: 'Prompt ID', value: codeBlock(queueItem.uuid), inline: false}
24-
])
25-
]
63+
embeds,
64+
components
2665
}
2766
}
28-

src/embeds/addedToQueueNoWait.ts

Lines changed: 0 additions & 27 deletions
This file was deleted.

src/embeds/imageResult.ts

Lines changed: 127 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -1,43 +1,134 @@
11
import { EmbedBuilder, ActionRowBuilder, ButtonBuilder, ButtonStyle, codeBlock } from 'discord.js'
2-
import { BotEmbed, QueueItem } from '../types'
2+
import { BotEmbed, QueueItem, QueueItemType } from '../types'
33

44
export default function(queueItem: QueueItem): BotEmbed {
5+
let embeds: EmbedBuilder[] = []
6+
let components: ActionRowBuilder<any>[] = []
57

6-
return {
7-
embeds: [
8-
new EmbedBuilder()
9-
.setColor('#6aaa64')
10-
.setTitle('Processing Complete')
11-
.setDescription('Result for parameters')
12-
.setTimestamp()
13-
.addFields([
14-
{name: 'Prompt', value: codeBlock(queueItem.prediction.prompt), inline: false},
15-
{name: 'Prompt Strength', value: queueItem.prediction.promptStrength.toString(), inline: true},
16-
{name: 'Steps', value: queueItem.prediction.numInferenceSteps.toString(), inline: true},
17-
{name: 'Guidance Scale', value: queueItem.prediction.guidanceScale.toString(), inline: true},
18-
{name: 'Has Mask', value: typeof queueItem.prediction.mask === 'undefined' ? 'No' : 'Yes', inline: true},
19-
{name: 'Has Base Image', value: typeof queueItem.prediction.initImage === 'undefined' ? 'No' : 'Yes', inline: true},
20-
{name: 'Seed', value: codeBlock(queueItem.seed.toString()), inline: false},
21-
{name: 'Prompt ID', value: codeBlock(queueItem.uuid), inline: false}
22-
])
23-
.setImage(`attachment://stable-confusion_${queueItem.uuid}_collage.png`)
24-
],
25-
components: [
26-
new ActionRowBuilder()
27-
.addComponents([
28-
new ButtonBuilder()
29-
.setCustomId('button-imagine-result-regenerate')
30-
.setLabel('🔁 Regenerate All')
31-
.setStyle(ButtonStyle.Primary),
32-
new ButtonBuilder()
33-
.setCustomId('button-imagine-result-upscale')
34-
.setLabel('⬆️ Upscale..')
35-
.setStyle(ButtonStyle.Primary),
36-
new ButtonBuilder()
37-
.setCustomId('button-imagine-result-variant-of')
38-
.setLabel('🆎 Variant of..')
39-
.setStyle(ButtonStyle.Primary),
40-
])
8+
switch (queueItem.type) {
9+
case QueueItemType.Quick:
10+
embeds = [
11+
new EmbedBuilder()
12+
.setColor('#6aaa64')
13+
.setTitle('Processing Complete')
14+
.setDescription('Result for parameters\n\nGenerated using the quick imagine command. Check out `/imagine` for new features!')
15+
.setTimestamp()
16+
.addFields([
17+
{name: 'Prompt', value: codeBlock(queueItem.prediction.prompt), inline: false},
18+
{name: 'Width', value: queueItem.prediction.width.toString(), inline: true},
19+
{name: 'Height', value: queueItem.prediction.height.toString(), inline: true},
20+
{name: 'Prompt Strength', value: queueItem.prediction.promptStrength.toString(), inline: true},
21+
{name: 'Steps', value: queueItem.prediction.numInferenceSteps.toString(), inline: true},
22+
{name: 'Guidance Scale', value: queueItem.prediction.guidanceScale.toString(), inline: true},
23+
{name: 'Has Mask', value: typeof queueItem.prediction.mask === 'undefined' ? 'No' : 'Yes', inline: true},
24+
{name: 'Has Base Image', value: typeof queueItem.prediction.initImage === 'undefined' ? 'No' : 'Yes', inline: true},
25+
{name: 'Seed', value: codeBlock(queueItem.seed.toString()), inline: false},
26+
{name: 'Prompt ID', value: codeBlock(queueItem.uuid), inline: false}
27+
])
28+
.setImage(`attachment://stable-confusion_${queueItem.uuid}.jpeg`)
29+
]
30+
break
31+
32+
case QueueItemType.Upscaled:
33+
embeds = [
34+
new EmbedBuilder()
35+
.setColor('#6aaa64')
36+
.setTitle('Upscaling Complete')
37+
.setDescription('Result for upscale')
38+
.setTimestamp()
39+
.addFields([
40+
{name: 'Prompt', value: codeBlock(queueItem.prediction.prompt), inline: false},
41+
{name: 'Prompt Strength', value: queueItem.prediction.promptStrength.toString(), inline: true},
42+
{name: 'Steps', value: queueItem.prediction.numInferenceSteps.toString(), inline: true},
43+
{name: 'Guidance Scale', value: queueItem.prediction.guidanceScale.toString(), inline: true},
44+
{name: 'Has Mask', value: typeof queueItem.prediction.mask === 'undefined' ? 'No' : 'Yes', inline: true},
45+
{name: 'Has Base Image', value: typeof queueItem.prediction.initImage === 'undefined' ? 'No' : 'Yes', inline: true},
46+
{name: 'Seed', value: codeBlock(queueItem.seed.toString()), inline: false},
47+
{name: 'Prompt ID', value: codeBlock(queueItem.uuid), inline: false}
48+
])
49+
.setImage(`attachment://stable-confusion_${queueItem.uuid}_upscale.png`)
50+
]
51+
break
52+
53+
case QueueItemType.Variant:
54+
embeds = [
55+
new EmbedBuilder()
56+
.setColor('#6aaa64')
57+
.setTitle('Processing Complete')
58+
.setDescription('Variant results are displayed below')
59+
.setTimestamp()
60+
.addFields([
61+
{name: 'Prompt', value: codeBlock(queueItem.prediction.prompt), inline: false},
62+
{name: 'Prompt Strength', value: queueItem.prediction.promptStrength.toString(), inline: true},
63+
{name: 'Steps', value: queueItem.prediction.numInferenceSteps.toString(), inline: true},
64+
{name: 'Guidance Scale', value: queueItem.prediction.guidanceScale.toString(), inline: true},
65+
{name: 'Has Mask', value: typeof queueItem.prediction.mask === 'undefined' ? 'No' : 'Yes', inline: true},
66+
{name: 'Has Base Image', value: typeof queueItem.prediction.initImage === 'undefined' ? 'No' : 'Yes', inline: true},
67+
{name: 'Seed', value: codeBlock(queueItem.seed.toString()), inline: false},
68+
{name: 'Prompt ID', value: codeBlock(queueItem.uuid), inline: false}
69+
])
70+
.setImage(`attachment://stable-confusion_${queueItem.uuid}_collage.png`)
71+
]
72+
components = [
73+
new ActionRowBuilder()
74+
.addComponents([
75+
new ButtonBuilder()
76+
.setCustomId('button-imagine-result-regenerate')
77+
.setLabel('🔁 Regenerate All')
78+
.setStyle(ButtonStyle.Primary),
79+
new ButtonBuilder()
80+
.setCustomId('button-imagine-result-upscale')
81+
.setLabel('⬆️ Upscale..')
82+
.setStyle(ButtonStyle.Primary),
83+
new ButtonBuilder()
84+
.setCustomId('button-imagine-result-variant-of')
85+
.setLabel('🆎 Variant of..')
86+
.setStyle(ButtonStyle.Primary),
87+
])
4188
]
89+
break
90+
case QueueItemType.Regenerated:
91+
case QueueItemType.Default:
92+
default:
93+
embeds = [
94+
new EmbedBuilder()
95+
.setColor('#6aaa64')
96+
.setTitle('Processing Complete')
97+
.setDescription('Result for parameters')
98+
.setTimestamp()
99+
.addFields([
100+
{name: 'Prompt', value: codeBlock(queueItem.prediction.prompt), inline: false},
101+
{name: 'Prompt Strength', value: queueItem.prediction.promptStrength.toString(), inline: true},
102+
{name: 'Steps', value: queueItem.prediction.numInferenceSteps.toString(), inline: true},
103+
{name: 'Guidance Scale', value: queueItem.prediction.guidanceScale.toString(), inline: true},
104+
{name: 'Has Mask', value: typeof queueItem.prediction.mask === 'undefined' ? 'No' : 'Yes', inline: true},
105+
{name: 'Has Base Image', value: typeof queueItem.prediction.initImage === 'undefined' ? 'No' : 'Yes', inline: true},
106+
{name: 'Seed', value: codeBlock(queueItem.seed.toString()), inline: false},
107+
{name: 'Prompt ID', value: codeBlock(queueItem.uuid), inline: false}
108+
])
109+
.setImage(`attachment://stable-confusion_${queueItem.uuid}_collage.png`)
110+
]
111+
components = [
112+
new ActionRowBuilder()
113+
.addComponents([
114+
new ButtonBuilder()
115+
.setCustomId('button-imagine-result-regenerate')
116+
.setLabel('🔁 Regenerate All')
117+
.setStyle(ButtonStyle.Primary),
118+
new ButtonBuilder()
119+
.setCustomId('button-imagine-result-upscale')
120+
.setLabel('⬆️ Upscale..')
121+
.setStyle(ButtonStyle.Primary),
122+
new ButtonBuilder()
123+
.setCustomId('button-imagine-result-variant-of')
124+
.setLabel('🆎 Variant of..')
125+
.setStyle(ButtonStyle.Primary),
126+
])
127+
]
128+
}
129+
130+
return {
131+
embeds,
132+
components
42133
}
43134
}

0 commit comments

Comments
 (0)