|
1 | 1 | import { Computed, Context, Dict, h, Logger, omit, Quester, Session, SessionError, trimSlash } from 'koishi'
|
2 |
| -import { Config, modelMap, models, orientMap, parseInput, sampler, upscalers } from './config' |
| 2 | +import { Config, modelMap, models, orientMap, parseInput, sampler, upscalers, scheduler } from './config' |
3 | 3 | import { ImageData, StableDiffusionWebUI } from './types'
|
4 | 4 | import { closestMultiple, download, forceDataPrefix, getImageSize, login, NetworkError, project, resizeInput, Size } from './utils'
|
5 |
| -import {} from '@koishijs/translator' |
6 |
| -import {} from '@koishijs/plugin-help' |
| 5 | +import { } from '@koishijs/translator' |
| 6 | +import { } from '@koishijs/plugin-help' |
7 | 7 | import AdmZip from 'adm-zip'
|
8 | 8 |
|
9 | 9 | export * from './config'
|
@@ -107,6 +107,10 @@ export function apply(ctx: Context, config: Config) {
|
107 | 107 | .option('noise', '-n <noise:number>', { hidden: some(restricted, thirdParty) })
|
108 | 108 | .option('strength', '-N <strength:number>', { hidden: restricted })
|
109 | 109 | .option('hiresFix', '-H', { hidden: () => config.type !== 'sd-webui' })
|
| 110 | + .option('smea', '-S', { hidden: () => config.model !== 'nai-v3' }) |
| 111 | + .option('smeaDyn', '-d', { hidden: () => config.model !== 'nai-v3' }) |
| 112 | + .option('scheduler', '-C <scheduler> ', { hidden: () => config.model !== 'nai-v3', type: scheduler }) |
| 113 | + .option('decrisper', '-D', { hidden: thirdParty }) |
110 | 114 | .option('undesired', '-u <undesired>')
|
111 | 115 | .option('noTranslator', '-T', { hidden: () => !ctx.translator || !config.translator })
|
112 | 116 | .option('iterations', '-i <iterations:posint>', { fallback: 1, hidden: () => config.maxIterations <= 1 })
|
@@ -306,12 +310,29 @@ export function apply(ctx: Context, config: Config) {
|
306 | 310 | case 'login':
|
307 | 311 | case 'token':
|
308 | 312 | case 'naifu': {
|
309 |
| - parameters.sampler = sampler.sd2nai(options.sampler) |
| 313 | + parameters.sampler = sampler.sd2nai(options.sampler, model) |
310 | 314 | parameters.image = image?.base64 // NovelAI / NAIFU accepts bare base64 encoded image
|
311 | 315 | if (config.type === 'naifu') return parameters
|
312 | 316 | // The latest interface changes uc to negative_prompt, so that needs to be changed here as well
|
313 |
| - parameters.negative_prompt = parameters.uc |
314 |
| - delete parameters.uc |
| 317 | + if (parameters.uc) { |
| 318 | + parameters.negative_prompt = parameters.uc |
| 319 | + delete parameters.uc |
| 320 | + } |
| 321 | + parameters.dynamic_thresholding = options.decrisper ?? config.decrisper |
| 322 | + if (model === 'nai-diffusion-3') { |
| 323 | + parameters.sm_dyn = options.smeaDyn ?? config.smeaDyn |
| 324 | + parameters.sm = (options.smea ?? config.smea) || parameters.sm_dyn |
| 325 | + parameters.noise_schedule = options.scheduler ?? config.scheduler |
| 326 | + if (['k_euler_ancestral', 'k_dpmpp_2s_ancestral'].includes(parameters.sampler) |
| 327 | + && parameters.noise_schedule === 'karras') { |
| 328 | + parameters.noise_schedule = 'native' |
| 329 | + } |
| 330 | + if (parameters.sampler === 'ddim_v3') { |
| 331 | + parameters.sm = false |
| 332 | + parameters.sm_dyn = false |
| 333 | + delete parameters.noise_schedule |
| 334 | + } |
| 335 | + } |
315 | 336 | return { model, input: prompt, parameters: omit(parameters, ['prompt']) }
|
316 | 337 | }
|
317 | 338 | case 'sd-webui': {
|
@@ -436,7 +457,7 @@ export function apply(ctx: Context, config: Config) {
|
436 | 457 | const b64 = Buffer.from(firstImageBuffer).toString('base64')
|
437 | 458 | return forceDataPrefix(b64, 'image/png')
|
438 | 459 | }
|
439 |
| - |
| 460 | + |
440 | 461 | return forceDataPrefix(res.data?.slice(27))
|
441 | 462 | }
|
442 | 463 |
|
@@ -522,7 +543,7 @@ export function apply(ctx: Context, config: Config) {
|
522 | 543 | case 'stable-horde':
|
523 | 544 | return sampler.horde
|
524 | 545 | default:
|
525 |
| - return sampler.nai |
| 546 | + return { ...sampler.nai, ...sampler.nai3 } |
526 | 547 | }
|
527 | 548 | }
|
528 | 549 |
|
|
0 commit comments