mirror of
https://github.com/koishijs/novelai-bot
synced 2025-01-08 13:27:33 +08:00
feat: support config maxSteps
and maxResolution
This commit is contained in:
parent
834f702d39
commit
9ce387d7a2
@ -55,7 +55,7 @@ API 服务器地址。如果你搭建了私服,可以将此项设置为你的
|
|||||||
|
|
||||||
要附加的额外请求头。如果你的 `endpoint` 是第三方服务器,你可能需要设置正确的请求头,否则请求可能会被拒绝。
|
要附加的额外请求头。如果你的 `endpoint` 是第三方服务器,你可能需要设置正确的请求头,否则请求可能会被拒绝。
|
||||||
|
|
||||||
## 功能设置
|
## 参数设置
|
||||||
|
|
||||||
### model
|
### model
|
||||||
|
|
||||||
@ -78,19 +78,19 @@ API 服务器地址。如果你搭建了私服,可以将此项设置为你的
|
|||||||
|
|
||||||
默认的采样器。
|
默认的采样器。
|
||||||
|
|
||||||
### output
|
### maxSteps
|
||||||
|
|
||||||
- 类型:`'minimal' | 'default' | 'verbose'`
|
- 类型:`number`
|
||||||
- 默认值:`'default'`
|
|
||||||
|
|
||||||
输出方式。`minimal` 表示只发送图片,`default` 表示发送图片和关键信息,`verbose` 表示发送全部信息。
|
选项 `--steps` 的最大值。
|
||||||
|
|
||||||
### allowAnlas
|
### maxResolution
|
||||||
|
|
||||||
- 类型:`boolean`
|
- 类型:`number`
|
||||||
- 默认值:`true`
|
|
||||||
|
|
||||||
是否允许使用点数。禁用后部分功能 (如图片增强和步数设置) 将无法使用。
|
选项 `--resolution` 中边长的最大值。
|
||||||
|
|
||||||
|
## 输入设置
|
||||||
|
|
||||||
### basePrompt
|
### basePrompt
|
||||||
|
|
||||||
@ -120,6 +120,20 @@ API 服务器地址。如果你搭建了私服,可以将此项设置为你的
|
|||||||
|
|
||||||
## 高级设置
|
## 高级设置
|
||||||
|
|
||||||
|
### output
|
||||||
|
|
||||||
|
- 类型:`'minimal' | 'default' | 'verbose'`
|
||||||
|
- 默认值:`'default'`
|
||||||
|
|
||||||
|
输出方式。`minimal` 表示只发送图片,`default` 表示发送图片和关键信息,`verbose` 表示发送全部信息。
|
||||||
|
|
||||||
|
### allowAnlas
|
||||||
|
|
||||||
|
- 类型:`boolean`
|
||||||
|
- 默认值:`true`
|
||||||
|
|
||||||
|
是否允许使用点数。禁用后部分功能 (如图片增强和步数设置) 将无法使用。
|
||||||
|
|
||||||
### requestTimeout
|
### requestTimeout
|
||||||
|
|
||||||
- 类型:`number`
|
- 类型:`number`
|
||||||
@ -127,12 +141,12 @@ API 服务器地址。如果你搭建了私服,可以将此项设置为你的
|
|||||||
|
|
||||||
当请求超过这个时间时会中止并提示超时。
|
当请求超过这个时间时会中止并提示超时。
|
||||||
|
|
||||||
### recallTimeout
|
<!-- ### recallTimeout
|
||||||
|
|
||||||
- 类型:`number`
|
- 类型:`number`
|
||||||
- 默认值:`0`
|
- 默认值:`0`
|
||||||
|
|
||||||
图片发送后自动撤回的时间 (设置为 `0` 禁用此功能)。
|
图片发送后自动撤回的时间 (设置为 `0` 禁用此功能)。 -->
|
||||||
|
|
||||||
### maxConcurrency
|
### maxConcurrency
|
||||||
|
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"name": "koishi-plugin-novelai",
|
"name": "koishi-plugin-novelai",
|
||||||
"description": "Generate images by NovelAI",
|
"description": "Generate images by NovelAI",
|
||||||
"version": "1.12.3",
|
"version": "1.12.4",
|
||||||
"main": "lib/index.js",
|
"main": "lib/index.js",
|
||||||
"typings": "lib/index.d.ts",
|
"typings": "lib/index.d.ts",
|
||||||
"files": [
|
"files": [
|
||||||
|
@ -77,12 +77,14 @@ export interface Options {
|
|||||||
|
|
||||||
export interface Config {
|
export interface Config {
|
||||||
type: 'token' | 'login' | 'naifu' | 'sd-webui'
|
type: 'token' | 'login' | 'naifu' | 'sd-webui'
|
||||||
token: string
|
token?: string
|
||||||
email: string
|
email?: string
|
||||||
password: string
|
password?: string
|
||||||
model?: Model
|
model?: Model
|
||||||
orient?: Orient
|
orient?: Orient
|
||||||
sampler?: string
|
sampler?: string
|
||||||
|
maxSteps?: number
|
||||||
|
maxResolution?: number
|
||||||
anatomy?: boolean
|
anatomy?: boolean
|
||||||
output?: 'minimal' | 'default' | 'verbose'
|
output?: 'minimal' | 'default' | 'verbose'
|
||||||
allowAnlas?: boolean | number
|
allowAnlas?: boolean | number
|
||||||
@ -150,32 +152,40 @@ export const Config = Schema.intersect([
|
|||||||
Schema.object({
|
Schema.object({
|
||||||
type: Schema.const('sd-webui'),
|
type: Schema.const('sd-webui'),
|
||||||
sampler: sampler.createSchema(sampler.sd),
|
sampler: sampler.createSchema(sampler.sd),
|
||||||
}).description('功能设置'),
|
}).description('参数设置'),
|
||||||
Schema.object({
|
Schema.object({
|
||||||
type: Schema.const('naifu'),
|
type: Schema.const('naifu'),
|
||||||
sampler: sampler.createSchema(sampler.nai),
|
sampler: sampler.createSchema(sampler.nai),
|
||||||
}).description('功能设置'),
|
}).description('参数设置'),
|
||||||
Schema.object({
|
Schema.object({
|
||||||
model: Schema.union(models).description('默认的生成模型。').default('nai'),
|
model: Schema.union(models).description('默认的生成模型。').default('nai'),
|
||||||
sampler: sampler.createSchema(sampler.nai),
|
sampler: sampler.createSchema(sampler.nai),
|
||||||
}).description('功能设置'),
|
}).description('参数设置'),
|
||||||
] as const),
|
] as const),
|
||||||
|
|
||||||
Schema.object({
|
Schema.object({
|
||||||
orient: Schema.union(orients).description('默认的图片方向。').default('portrait'),
|
orient: Schema.union(orients).description('默认的图片方向。').default('portrait'),
|
||||||
|
maxSteps: Schema.natural().description('允许的最大迭代步数。').default(0),
|
||||||
|
maxResolution: Schema.natural().description('生成图片的最大尺寸。').default(0),
|
||||||
|
}),
|
||||||
|
|
||||||
|
Schema.object({
|
||||||
|
basePrompt: Schema.string().role('textarea').description('默认附加的标签。').default('masterpiece, best quality'),
|
||||||
|
negativePrompt: Schema.string().role('textarea').description('默认附加的反向标签。').default(ucPreset),
|
||||||
|
forbidden: Schema.string().role('textarea').description('违禁词列表。含有违禁词的请求将被拒绝。').default(''),
|
||||||
|
}).description('输入设置'),
|
||||||
|
|
||||||
|
Schema.object({
|
||||||
output: Schema.union([
|
output: Schema.union([
|
||||||
Schema.const('minimal').description('只发送图片'),
|
Schema.const('minimal').description('只发送图片'),
|
||||||
Schema.const('default').description('发送图片和关键信息'),
|
Schema.const('default').description('发送图片和关键信息'),
|
||||||
Schema.const('verbose').description('发送全部信息'),
|
Schema.const('verbose').description('发送全部信息'),
|
||||||
]).description('输出方式。').default('default'),
|
]).description('输出方式。').default('default'),
|
||||||
basePrompt: Schema.string().role('textarea').description('默认附加的标签。').default('masterpiece, best quality'),
|
|
||||||
negativePrompt: Schema.string().role('textarea').description('默认附加的反向标签。').default(ucPreset),
|
|
||||||
forbidden: Schema.string().role('textarea').description('违禁词列表。含有违禁词的请求将被拒绝。').default(''),
|
|
||||||
maxRetryCount: Schema.natural().description('连接失败时最大的重试次数。').default(3),
|
maxRetryCount: Schema.natural().description('连接失败时最大的重试次数。').default(3),
|
||||||
requestTimeout: Schema.number().role('time').description('当请求超过这个时间时会中止并提示超时。').default(Time.minute),
|
requestTimeout: Schema.number().role('time').description('当请求超过这个时间时会中止并提示超时。').default(Time.minute),
|
||||||
recallTimeout: Schema.number().role('time').description('图片发送后自动撤回的时间 (设置为 0 以禁用此功能)。').default(0),
|
recallTimeout: Schema.number().role('time').description('图片发送后自动撤回的时间 (设置为 0 以禁用此功能)。').default(0),
|
||||||
maxConcurrency: Schema.number().description('单个频道下的最大并发数量 (设置为 0 以禁用此功能)。').default(0),
|
maxConcurrency: Schema.number().description('单个频道下的最大并发数量 (设置为 0 以禁用此功能)。').default(0),
|
||||||
}),
|
}).description('高级设置'),
|
||||||
]) as Schema<Config>
|
]) as Schema<Config>
|
||||||
|
|
||||||
interface Forbidden {
|
interface Forbidden {
|
||||||
|
13
src/index.ts
13
src/index.ts
@ -61,6 +61,12 @@ export function apply(ctx: Context, config: Config) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const step = (source: string) => {
|
||||||
|
const value = +source
|
||||||
|
if (value * 0 === 0 && Math.floor(value) === value && value > 0 && value <= (config.maxSteps || Infinity)) return value
|
||||||
|
throw new Error()
|
||||||
|
}
|
||||||
|
|
||||||
const resolution = (source: string, session: Session<'authority'>): Size => {
|
const resolution = (source: string, session: Session<'authority'>): Size => {
|
||||||
if (source in orientMap) return orientMap[source]
|
if (source in orientMap) return orientMap[source]
|
||||||
if (restricted(session)) throw new Error()
|
if (restricted(session)) throw new Error()
|
||||||
@ -68,6 +74,9 @@ export function apply(ctx: Context, config: Config) {
|
|||||||
if (!cap) throw new Error()
|
if (!cap) throw new Error()
|
||||||
const width = closestMultiple(+cap[1])
|
const width = closestMultiple(+cap[1])
|
||||||
const height = closestMultiple(+cap[2])
|
const height = closestMultiple(+cap[2])
|
||||||
|
if (Math.max(width, height) > (config.maxResolution || Infinity)) {
|
||||||
|
throw new Error()
|
||||||
|
}
|
||||||
return { width, height }
|
return { width, height }
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -82,11 +91,11 @@ export function apply(ctx: Context, config: Config) {
|
|||||||
.shortcut('增強', { fuzzy: true, options: { enhance: true } })
|
.shortcut('增強', { fuzzy: true, options: { enhance: true } })
|
||||||
.option('enhance', '-e', { hidden: restricted })
|
.option('enhance', '-e', { hidden: restricted })
|
||||||
.option('model', '-m <model>', { type: models, hidden: thirdParty })
|
.option('model', '-m <model>', { type: models, hidden: thirdParty })
|
||||||
.option('resolution', '-o, -r <resolution>', { type: resolution })
|
.option('resolution', '-r <resolution>', { type: resolution })
|
||||||
.option('override', '-O')
|
.option('override', '-O')
|
||||||
.option('sampler', '-s <sampler>')
|
.option('sampler', '-s <sampler>')
|
||||||
.option('seed', '-x <seed:number>')
|
.option('seed', '-x <seed:number>')
|
||||||
.option('steps', '-t <step:number>', { hidden: restricted })
|
.option('steps', '-t <step>', { type: step, hidden: restricted })
|
||||||
.option('scale', '-c <scale:number>')
|
.option('scale', '-c <scale:number>')
|
||||||
.option('noise', '-n <noise:number>', { hidden: restricted })
|
.option('noise', '-n <noise:number>', { hidden: restricted })
|
||||||
.option('strength', '-N <strength:number>', { hidden: restricted })
|
.option('strength', '-N <strength:number>', { hidden: restricted })
|
||||||
|
Loading…
Reference in New Issue
Block a user