制作及运行 WebUI(NovelAI)Docker 镜像

制作及运行 WebUI(NovelAI)Docker 镜像

图源:《天地上等》@banishment 100412674

准备 Novel AI 模型文件

下载地址:

1
magnet:?xt=urn:btih:5bde442da86265b670a3e5ea3163afad2c6f8ecc

只需要部分下载其中的文件;

  • 必须的文件:
    • 文件 stableckpt/animevae.pt
    • 文件夹 stableckpt/animefull-final-pruned
  • 可选的文件:
    • 文件夹 stableckpt/animefull-latest (全量模型,暂时没发现有什么特殊用途)
    • 文件夹 stableckpt/modules/modules (差分模型,针对特定风格强化训练)

Novel AI 文件列表

将下载后的文件重命名,并放到同一个目录下的 models/ 子目录下

  • stableckpt/animevae.pt -> models/nai.vae.pt
  • stableckpt/animefull-final-pruned/model.ckpt -> models/nai.ckpt
  • stableckpt/animefull-final-pruned/config.yaml -> models/nai.yaml

models 文件夹

阅读更多
【WIP】Linux & Windows 小技巧(4):再谈展台模式

【WIP】Linux & Windows 小技巧(4):再谈展台模式

图源:《失われた深淵・宵宫》 @void_0 100377150

Microsoft Edge 展台模式

《小技巧(3)》 中,我以 Microsoft Edge 为例简单描述了 Windows 展台模式的使用场景和设置方法。

展台模式适用于以下情况:

  • 商场电子展柜或企业宣传展板等;
  • 数据可视化大屏、监控大屏、比赛情况大屏等;
  • 图书馆用于书籍查询的公用电脑、机构办事处用于自助办理手续的公用电脑等;

即需要保持全屏情况下限定用户(管理员或使用者)访问某站点内的页面并使用户能正常与页面交互的情况下均可以考虑展台模式。

而 Windows 展台模式为操作系统级功能,配置流程较复杂、可能影响操作系统稳定性,且直接使用设置 App 配置的展台模式同时只能运行 1 个程序(Single-app kiosk mode)。如果只是想临时启动 Edge 的展台模式,或是在运行 Edge 的同时运行其他程序,再或者是在 Linux 或 macOS 下启动展台模式,最简便的办法是直接使用命令行。

启动命令

Edge 是基于 Chromium 二次开发的浏览器。因此,与 Chromium 启动展台模式的命令类似。以百度为例启动展台模式:

1
.\chrome.exe --kiosk 'https://www.baidu.com'

定位到 msedge.exe 所在路径,一般为:

1
C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe

在该路径下启动 PowerShell,启动展台模式:

1
.\msedge.exe --kiosk 'https://www.baidu.com' --edge-kiosk-type=fullscreen

参数

各命令行参数的用途如下1

  • 参数 --kiosk 指定了启动展台模式时默认打开的URL。URL中含有 & 等特殊字符时需用单 / 双引号包裹。
  • 参数 --edge-kiosk-type 指定了展台模式的类型,共有两种:
    • fullscreen:全屏模式,网页将以全屏方式显示,标签栏和地址栏将被隐藏。
    • public-browsing:公共浏览模式,效果同 Windows 展台模式下的 Edge。该模式仅在 Windows 上可用。
    • 以上两种模式均会自动使用隐私模式(InPrivate),并屏蔽鼠标右键菜单。
  • 参数 --no-first-run:当 Edge 没有初始化就进入展台模式时,使其不显示配置向导。
  • 参数 --kiosk-idle-timeout-minutes 用于指定间隔多久重置展台模式,删除浏览数据。

Windows 下命令行启动公共浏览模式

Linux 下命令行启动全屏模式

阅读更多
【WIP】Synthesizer V 插件开发入门(1)

【WIP】Synthesizer V 插件开发入门(1)

图源:紺屋鴉江 - 《銀河》,Pid:94649749

写在前面

本文并非“零基础入门”型的文章。阅读此文章前,建议你已经:

  • 使用过 Synthesizer V Studio(即 SVR2,以下用此简称代替),了解过 VOCALOID,知道“插件”的作用是什么;
  • 已购买 Synthesizer V Studio Pro 版本,以便于插件的开发与调试;
  • 有一定的编程经验,使用过 Lua 语言;

Synthesizer V Studio Pro的正版授权可从 平行四界官方淘宝店 Dreamtonics官方淘宝店 获取。关于 Lua 编程的资料数不胜数,可从 菜鸟教程 等网站获取。

另外,阅读时,可以配合下面两个文档:

正文部分存在问答部分,可能与后文的知识关联。你可以按顺序阅读,也可以在阅读完其他内容后再阅读问答部分。

以下是文章正文。

脚本存放位置

SVR2 的软件数据默认保存在“我的文档”下,而脚本放置在其中的“scripts”子目录中。

以 Windows 系统为例,如果你没有移动过“我的文档”位置,那么路径应该是:

1
C:\Users\<你的用户名>\Documents\Dreamtonics\Synthesizer V Studio\scripts

你可以在其中创建子目录分类存放不同种类的脚本。SVR2 安装时附带的插件默认放置在“Utilities”子目录下。

image-20220125230306915

插件的基本结构

SVR2 Pro 支持两种插件格式:JavaScript 插件,使用嵌入式的 Duktape 解释器;以及 Lua 插件,使用嵌入式的 Lua 5.4解释器。这里选择 Lua 作为编程示例语言,以便有 VOCALIOID 插件开发经验的人快速转向 SVR2 的插件开发。

SVR2 插件在结构上主要有以下几个部分:

  • 插件信息函数:getClientInfo()
  • 本地化函数:getTranslations()
  • 入口点函数:main()

下面分别进行说明。同时注意,SVR2 软件在启动时会将所有的插件代码载入内存(但不会执行除 getClientInfo()getTranslations() 外的其他部分),因而对插件代码做出的改动需关闭 SVR2 再启动 SVR2 才可生效。

插件信息

插件信息由函数 getClientInfo() 控制。作用与 VOCALOID 的 JobPlugins 中 mainfest() 函数的作用类似,保存插件的名称、维护者、兼容性等信息。

其结构如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
--[[
@function getClientInfo 插件信息函数
@param nil 无参数
@return table 返回列表
@field name string 插件名字
@field author string 插件作者
@field versionNumber num 插件版本
@field minEditorVersion num 最低版本要求
--]]
function getClientInfo()
return {
name = '插件名字',
author = '作者信息',
versionNumber = 1,
minEditorVersion = 65540
}
end

其中:

阅读更多
小技巧(3):peco、bat,软链接与硬链接,Linux Shell Options,Windows 展台模式,给 LTSC 安装 Microsoft Store,与统一写入筛选器

小技巧(3):peco、bat,软链接与硬链接,Linux Shell Options,Windows 展台模式,给 LTSC 安装 Microsoft Store,与统一写入筛选器

图源:Miv4t - 《MACHiNERY》,Pid:77186528

Windows 下的 cat 和 grep

lscatgrep这三个命令,往往是Linux初学者最先了解的、日常使用Linux时不可或缺的。对于Windows系统而言,同样有三个命令可以完成上述工作:dirtypefindstr

例如,用type显示文件内容:

image-20210413151134589

或者用findstr结合管道匹配先前程序输出内容中的字符串:

image-20210413151152079

也可以结合正则表达式:

image-20210413151207393

如果你不满足于系统命令的显示效果,你也可以尝试下面两款开源于Github的工具:

peco

项目链接:https://github.com/peco/peco

peco可以实现对管道输入的文本进行快速搜索、排序、多行选择等功能,使用Golang编写。目前仍不支持中文编码(GBK),且不支持默认的Windows PowerShell终端(你需要使用传统的命令提示符,或者更先进的终端程序,比如Hyper或者Windows Terminal)。该项目仍在活跃开发中,合理的使用可以提升效率。

image-20210413151244160

阅读更多

【WIP】压制技术B:从不熟悉的编码开始

文章摘录和润色于本人的笔记,难免有错漏之处。若您发现了其中的一处或几处,请在评论处指正,我将不胜感激。

什么是压制?

压制的对象

可以是一切种类的音频、视频、图像,比如说:

  • 蓝光光盘(BD)中的视频或音频(m2ts 等格式比较多见)
  • DVD 光盘中的视频或音频(dat 等格式比较多见)
  • CD 光碟中的视频或音频
  • 通过 Web 下载的各流媒体网站的视频或音频
  • 各种剪辑软件、合成软件、特效软件、DAW 等渲染的视频或音频
  • 图片(或者动态图片)转换为视频,例如“一图流 MV”等

注意:要区分压制(Rip)和混流(Mix)。

压制是进行编码,或在编码间转换的过程。

混流是将特定编码的视频轨/音频轨放入容器,或在容器间转换的过程。

注意:要区分编码(Encoding)和容器(Container)。

举例说明如下:

  • H.264 是一种视频编码,aac 是一种音频编码。
  • mp4 是一种视频容器,wav 是一种音频容器。
  • avi 既是一种视频编码也是一种视频容器。
  • mp3 既是一种音频编码也是一种音频容器。

压制的目标

对视频、音频等的压制,不全面地、概括地来说,有以下几点主要目标:

  • 使音频/视频的编码符合要求。例如符合视频网站点播视频的要求、直播网站直播串流的要求、流水线中剪辑代理的要求等。
  • 使音频/视频的数据总量(可以理解为音频/视频的体积)或音频/视频在单位时间内的数据量(可以理解为音频/视频的码率)符合要求。例如符合蓝光光盘的码率要求、窄带(依照2010年新的标准为4Mbps以下)情况下视频点播的要求等。
  • 尽可能地保留音频/视频中的有效信息。可以理解为视频画面中物体的轮廓、音频的频段细节等。
  • 去除或降低音频/视频中的干扰信息。可以理解为视频画面中的噪点、音频中的杂音等。
阅读更多
【WIP】算法与数据结构回顾 - 广义表

【WIP】算法与数据结构回顾 - 广义表

图源:@Rella 《glow》 91882132

简述

广义表是线性表的一种推广。线性表要求表中元素拥有统一的类型,而广义表无此限制。需要注意的是,广义表和线性表长度一般认为是有限的,但广义表的深度可以是无限的(即递归表)。

广义表是一种数据结构。对广义表的常见操作包括:

  • 创建
  • 从字符串形式创建
  • 销毁
  • 复制
  • 取表头
  • 取表尾
  • 判空
  • 求长度
  • 求深度
  • 从表头插入
  • 从表头删除
  • 遍历

广义表是Lisp语言的基本数据结构。后文以Common Lisp和C++给出各基本操作的示例。

名词注解

长度

指广义表中的元素个数。举例如下:

例一

1
(a, b)

该表中共有两个元素:原子项a,原子项b。因而该表的长度为2。

例二

1
(a, (b, c))

该表中共有两个元素:原子项a,广义表(b, c)。因而该表的长度为2。

深度

指广义表中子表的嵌套层数。举例如下:

例一

1
(a, b)

该表中没有子表,因而该表的深度为1。

例二

1
(a, (b, c))

该表中嵌套了一个无嵌套的子表,因而该表的深度为2。

阅读更多

【持续更新】算法与数据结构回顾 - 大纲

由于高中接触过,大学本科期间又深入了些,以防忘记记一些注意事项、概念和模板之类的东西。

简单分类

数据结构

  • 一维:

    • 基础:数组(Array),链表(Linked list)

    • 高级:栈(Stack),队列(Queue),双端队列(Deque),集合(Set),映射(Map)等。

  • 二维:

    • 基础:树(Tree),图(Graph)

    • 高级:二叉搜索树(BST),堆(Heap),并查集(Disjoint Set),字典树(Trie)等。

  • 特殊结构:

    • 位运算(Bitwise),布隆过滤器(BloomFilter)

    • 缓存(LRU)

    • ……

  • ……

算法

  • 分支(if-else,switch)

  • 迭代(for,while)

  • 递归(分治法,回溯法等)

  • 搜索(深搜,广搜,A*等)

  • 动态规划

  • 二分查找

  • 贪心

  • 计算几何

  • ……

阅读更多

【WIP】C 语言拾遗 Part.1

long 与 long long

long 一般占用4~8字节,long long 至少 占用8个字节。不同的平台和编译器,长度可能不同。

sizeof() 运算符

注意 sizeof() 属于运算符的一种,这个运算符用于测量括号内的变量(或类型)占用的字节数量。多数情况下,这一数量在编译时确定,因此 sizeof() 的运行结果是一个编译时常量。但也有例外,如C99标准引入的变长数组特性。该类数组的size需在程序运行时、数组开辟后确定。

由于是编译时常量,括号内如果是表达式,则表达式不会被执行。

1
2
3
int a = 1; // a = 1
int b = sizeof(a++); // b = 4
// a = 1, a++ 没有执行

浮点数精度问题

老生长谈的话题了。由于误差,以下的逻辑判断结果都是成立(1):

1
2
(0.1 + 0.1 + 0.1) != 0.3; // 1;
1 + (1e123 - 1e123) != (1 + 1e123) - 1e123; // 1;

没有 body 的 for 循环

可以写成如下形式:

1
2
3
for(i = 0; i < 10; i++) {
;
}

或者如下形式:

1
for(i = 0; i < 10; i++);
阅读更多
【WIP】CMU 15-462 笔记 Part.1

【WIP】CMU 15-462 笔记 Part.1

图片来源:@Lifeline 88401620

增补(感谢@oyiadin):本系列笔记将添加《Games 101:现代计算机图形学入门》、《Games 102:几何建模与处理》、“龙书”(《Introduction to 3D Game Programming with DirectX 12》)三个额外来源的笔记。大段的非CMU课程的笔记会在显著位置标识。

Lecture 1

什么是计算机图形学

计算机图形学:利用计算机合成视觉信息或利用计算机合成/操控感官信息的学科。

计算机图形学的应用

  • 影视

  • 动画

  • 游戏

  • 数据可视化

  • 工业设计,平面设计

  • 数字绘画

  • 虚拟现实

    相同的内容后续整理VR课笔记时不再赘述。

    • 虚拟现实(VR):指所看到的一切均为虚拟的,比如虚拟现实游戏、虚拟现实视频等。

    • 增强现实(AR):指看到的是真实的现实 + 虚拟的、对当前现实进行分析处理或修改等生成的虚拟事物,比如Apple ARkit。

    • 混合现实(MR):VR + AR,使用类似VR的手段,达到AR这种结合当前现实与虚拟事物的效果,比如Hololens。

  • 制造业(3D打印)

  • 模拟

  • 排版与字体设计

    • “The Quick Brown Fox Jumps Over The Lazy Dog”:一句有意义的英文句子,内含全部的26个英文字母,常用来对字体(字形、字号、间距等)进行测试。

    • “Lorem ipsum dolor sit amet, consectetur adipisicing elit.”:又叫“乱数假文”或者“哑元文本”。主要的目的为测试文章或文字在不同字型、版型下看起来的效果。更多资料请查阅:https://cn.lipsum.com/

  • ……

计算机图形学与计算机视觉的区别

计算机图形学:将数据转化为图形。也就是“画出来”。

计算机视觉:将图形转化为数据。也就是“看到”。

计算机图形学需要哪些基础

  • 表示方法(编码)

  • 采样与混叠

  • 数学方法(表示动态和三位形体)

  • 光线

  • 透视

  • ……

对正方体建个模?

  • 如何表示

    • 顶点:利用坐标

    • 边:利用边的两个顶点唯一确定

  • 如何绘制

    • 三维图形转化为二维图形:小孔成像模型

      设相机坐标为 $(a,b,c)$ ,待确定点的坐标为 $(x,y,z)$ 。要得到该点在二维平面上的坐标,可进行如下算法步骤:

      1. $(x,y,z)$ 与 $(a,b,c)$ 相减,得到原三维点与摄像机的相对位置;

      2. 将其中的 $(x,y)$ 与 $z$ 相除,得到 $(\frac{x}{z},\frac{y}{z})$,即是所求的 $(u,v)$。

    • 连线。这就要细说到电脑如何绘制直线。

阅读更多

【WIP】CMU 15-213 笔记 Part.1

Lecture 1

实验

Lab1:数据实验,用位运算方式实现计算器

Lab2:炸弹实验,学会GDB

Lab3:攻击实验,代码注入和ROP

Lab4:缓存实验,写个缓存模拟器并优化

Lab5:Shell实验,写一个完整的Linux Shell

Lab6:Malloc实验,写自己的Malloc库

Lab7:代理实验,写自己的Web Proxy

Lecture 2

比特、字节和整数

  • long double数据类型:在传统的32位架构或64位架构中是没有的。但在x86-64架构中占10或16字节(内存对齐)。

  • 32位架构的指针为32位(4字节),64位架构的指针为64位(8字节)。

  • 布尔代数:和 或 非 异或

  • 位运算符 & | ~ ^,逻辑运算符 && || !

  • 逻辑运算的短路特性

  • 逻辑位移和算数位移:

    • 在位移运算符之前的数(比如$x<<y$中的$x$)是无符号数的话,位移运算对应的汇编指令为逻辑位移。若是有符号数,该运算对应的汇编指令是算数位移。
    • 对于左移:二者都是在右侧补0。
    • 对于右移:逻辑位移补0,算数位移补最高有效位(符号位)。如:令$x=10100000_{(2)}$,右移3位,逻辑位移结果$x>>3=00010100_{(2)}$,算数位移结果$x>>3=11110100_{(2)}$。
  • 位移数小于0(即$x<<y$中的$y$小于0)或大于数据类型占用的长度(如char类型中y大于8)是未定义的操作。结果和编译情况依编译器和架构变化。

  • 正数原码转十进制:求2的幂次加和即可。

$$ B2U(X) = \sum^{w-1}_{i=0}{x_i \cdot 2^i} $$

  • 补码转十进制:注意符号位。也可写成公式。

$$ B2T(X) = -x_{w-1} \cdot 2^{w-1} + \sum^{w-2}_{i=0}{x_i \cdot 2^i} $$

  • 补码计算举例:将补码$101101_{(2)}$化为十进制。

$$ 依据公式,\\ 101101_{2} = 2^{0} \cdot 1 + 2^{1} \cdot 0 + 2^{2} \cdot 1 + 2^{3} \cdot 1 + 2^{4} \cdot 0 + 2^{5} \cdot (-1) \\ = 1 + 0 + 4 + 8 + 0 - 32 = -19 $$

  • 无符号数最大值$2^w - 1$,最小值$0$。有符号数最大值$2^{w-1} - 1$,最小值$-2^{w-1}$。
阅读更多
小技巧(2):git over ssh、lsof 与 readelf

小技巧(2):git over ssh、lsof 与 readelf

图源:《ソード・アート・オンライン(刀剑神域)》第一季第二集 CM

博客一直在慢速更新…之前一直忙于各种事情,学校的课、比赛、不断接触和学习新的东西,因此没什么机会静下心来好好整理、记录我学到的东西,也就没有办法一并记下我对某些问题的理解和思考。

之前一度认为,“有写博客文章的时间,还不如好好学点新的东西”。但是自从领悟到我和舍友之间记忆力和知识熟练程度的差距之后,终于肯下定决心好好写自己的博客了——我比不上他们,我真的不是那种过目不忘的人,所以只能通过不断的复习和总结才能勉强记住些东西。

有人说,初学者是“什么都不会,同时自己不知道自己会什么”,稍有学识的普通人是“自己会些东西,但是自己觉得自己会的很多”,而大神则是“自己会很多东西,但是自己觉得自己学的不多而且不知道自己已经会了什么”。

可能我还是初学者吧。

git push 反复输密码很烦?

有的时候可能会遇到一种极端情况:假设你要编写脚本,比如:自动化运维脚本。其中涉及到一些对 git 仓库的操作,而且需要密码,比如:在自动脚本中让部署机器拉取私有仓库,或是让部署机器将构建后的代码使用某个 github 账号推送到某个 git 仓库。这个时候需要用户手动输入用户名和密码,但是我们往往不能手动输入——比如公用的 docker build machine,根本不允许用户在构建过程中进行交互。

阅读更多
小技巧(1):Linux 下查看进程依赖,不同的16进制编辑器,与关掉Windows驱动签名认证

小技巧(1):Linux 下查看进程依赖,不同的16进制编辑器,与关掉Windows驱动签名认证

图源:《三色绘恋》 游戏背景图

最近又学到了一些零零碎碎的 Linux、Windows 命令,和一些可能今后会用得着的小技巧,怕自己忘记,所以把它们写在博客里面提醒一下自己,免得到时候再花费大量时间去百度、Google 找文章。

Linux 下查看进程树?

查看进程有好几种方式,tophtop 这种可视化的,还有 ps 这种纯文本输出的程序都可以做到。但是如果想要查看某一进程的父进程或者子进程PID该怎么办?可以借助另一个程序,pstree。参数很灵活,可以根据需要启用或关闭。程序截图如下:

image-20210411152055083

WinHex 的替代品?

WinHex是很强大的一个二进制文件查看和编辑工具(尤其是做 CTF 杂项题的时候 :)。虽然说现在全网随便搜搜就有破解版(Cracked Version)可以用,但是多了解几个 WinHex 的替代品,有备无患。

EditPlus

说起来很巧,这个神器还是我在学校图书馆电脑上发现的。本来以为这东西只能编辑编辑文本,做 Notepad++ 的小弟,没想到这还能打开二进制文件查看16进制数据(emmm,不能编辑),而且…还支持 Windows ARM。

image-20210411151916081

打开文件之后,点击 Edit->Hex Viewer 即可查看十六进制数据。

阅读更多
压制技术 A:光盘的种类、资源发布标注与常见名词解释

压制技术 A:光盘的种类、资源发布标注与常见名词解释

图源:《终将成为你》BD-1 声优特典 背景图

常见光盘种类

CD

Compact Disc,又叫做“小型镭射盘”、“激光唱片”,通过激光来读写数据。单层容量大概 700MB。其中一般存储的是音乐,但也有存储视频、相片、软件(多数是游戏)的 CD。常见分类如下:

  1. 按存储内容分类:
    • CD-DA: 音乐 CD
    • CD-I: 交互式 CD(游戏CD)
    • VCD: 视频 CD
    • CD+G: 带有专辑图片和歌词的音乐 CD
    • Photo CD: 图片 CD
  2. 按读写情况分类:
    • CD-ROM: 只读光盘。光盘背面的凹槽为厂家印制。
    • CD-R: 一次性写入光盘。 光盘背面的凹槽为刻录机烧制。
    • CD-RW: 可读写光盘。
阅读更多
Your browser is out-of-date!

Update your browser to view this website correctly.&npsb;Update my browser now

×