メインコンテンツまでスキップ

· 約4分
wen

Background

在 civitai 上看到 DivineEleganceMix 模型 生成的图片,感觉很美,

就想尝试用 Stable Diffusion WebUI 重现一下。(为了方便描述,以下用 WebUI 代替 Stable Diffusion WebUI )

img

过程

1. 获取 prompt 和参数

Prompts 等参数可以在 这个页面 点击 Copy Generation data 复制得到。

(masterpiece, best quality:1.2), (face focus:1.4), back focus, from behind, blonde hair, long hair, high ponytail, long ponytail, red eyes, long eyelashes, thick eyelashes, looking at viewer, red dress, backless dress, gold trim dress, puffy sleeves, juliet sleeves, long sleeves, red sleeves, (black background:1.2), light particles, blurry, bloom, shiny hair, <lora:Add Detail:0.5>
Negative prompt: (EasyNegative:0.8), (worst quality, low quality:1.2),
(from below:1.2), (ass:1.2), collar, tight, skin tight, impossible clothes, bangs, off shoulder, frills, white sleeves, red background, yellow sleeves,
Steps: 30, VAE: kl-f8-anime2.vae.pt, Size: 512x768, Seed: 3842746991, Model: DivineEleganceMix8, "Module: canny, Sampler: Euler a, VAE hash: df3c506e51, CFG scale: 8, Clip skip: 2, Model hash: 4dbe20030f, ADetailer model: face_yolov8n.pt, ADetailer steps: 30, ADetailer sampler: Euler a, ADetailer version: 23.10.1, Denoising strength: 0.3, ADetailer CFG scale: 8.0, ADetailer CLIP skip: 2, ADetailer mask blur: 16, ADetailer confidence: 0.3, ADetailer dilate/erode: 32, ADetailer inpaint width: 768, ADetailer inpaint height: 768, ADetailer inpaint padding: 32, ADetailer mask merge/invert: Merge, ADetailer denoising strength: 0.3, ADetailer use separate steps: True, ADetailer inpaint only masked: True, ADetailer use separate sampler: True, ADetailer use separate CFG scale: True, ADetailer use separate CLIP skip: True, ADetailer use inpaint width/height: True

2. 安装插件

Generation data 中提到了 VAE: kl-f8-anime2.vae.ptAdetailer 插件,需要先安装。

2.1 安装 VAE:kl-f8-anime2.vae.pt

在 HuggingFace 上找到了 kl-f8-anime2.vae.pt , 下载到本地放到 stable-diffusion-webui/models/VAE/ 里面。

stable-diffusion-webui 默认没有启用 VAE,需要手动启用。

如下图所示,在 stable-diffusion-webui 的 Settings 页面,点击 1️⃣ → 2️⃣ , 添加 sd_vae 后,

点击 Apply settingsReload UI

img

如下图所示,刷新界面后就出现了 1️⃣ SD VAE 选项, 选择我们之前下载的 kl-f8-anime2.ckpt

img

2.2 安装 Adetailer

到 stable-diffusion-webui 的 Extensions 页面,

按照 [Adetailer](https://github.com/Bing-su/adetailer) 的说明安装。

3. 导入参数

如下图所示,在 WebUItxt2img 页面,点击 1️⃣ 的箭头按钮,粘贴 prompt。

然后点击 2️⃣ 的箭头按钮,在弹出窗口中点击 3️⃣ 按钮粘贴参数。

img img

有些参数好像不能直接粘贴,需要手动修改一下。

比如 Height, ADetailerEnable 选项等。

4. 生成图片

还不错,不过和模型作者的图片好像还是有差距,可能有些设置没改好,有时间再看看。 img

  • 修改了下眼睛部分的 prompt,效果好了点。 img

Appendix

  • ADetailer 的作用是什么?

    • ADetailer 是一个插件,对模型生成的图片中的手部(比如 6 手指问题)、脸部的变形等问题进行处理,使得生成的图片更加真实。
  • 为什么要用 VAE?

Reference

WebUI の拡張機能で 手軽に CivitAI のモデルを利用する

· 約3分
wen

Background

之前试了 Diffusers 等软件,生成的图片都不太理想(甚至难看 😸 ),

有些甚至不能选择模型,UI 也不太好用。

所以这次试试 Stable Diffusion WebUI,据说他的 UI 很好用。

我的环境

我的环境是 MacBook Pro M2 Pro。

$ system_profiler SPHardwareDataType

Hardware Overview:
Model Name: MacBook Pro
Chip: Apple M2 Pro
Total Number of Cores: 12 (8 performance and 4 efficiency)
Memory: 16 GB

安装方法&运行

安装方法很简单,具体看Github 的 readme

brew install cmake protobuf rust [email protected] git wget # install dependencies
git clone https://github.com/AUTOMATIC1111/stable-diffusion-webui # clone the repo
cd stable-diffusion-webui # enter the directory
./weiui.sh # start the app

脚本运行后,会自动打开一个网页。

如果没有自动打开,可以手动打开 http://127.0.0.1:7860/ , 就可以看到界面了。

使用方法

下载模型

ヒント

默认提供一个模型 Stable Diffusion v1-5-pruned-emaonly.safetensors,效果惨不忍睹。

建议直接从 Hugging Face 或者 Civitai 下载。

不相信我提示的可以点击这里看看😄
  • 例 1: Prompts: a little boy playing with a puppy img

  • 例 2: Prompts: 1girl,face,white background img

  • 例 3: Prompts: 1girl,face,white background

  • Negative Prompts: (worst quality:2),(low quality:2),(normal quality:2),lowres,watermark img

我从 Civitai 下载了一个比较有人气的模型 majicMIX realistic, 再用之前的 prompt 试了试,效果比默认的模型好太多了 😄。

生成结果

  • Prompts: 1girl,face,white background img

  • Prompts: 1girl,face,white background

    Negative Prompts: (worst quality:2),(low quality:2),(normal quality:2),lowres,watermark img

ヒント

Negative Prompts : 用来指定不想要的图片特征,比如 lowres 代表不想要低分辨率的图片。

Reference

Stable Diffusion モデルの探し方

Stable Diffusion WebUI のおすすめモデル 10 選をご紹介!導入方法も解説

· 約1分
wen

背景

刚加入新公司,接手了一个项目,什么资料也没有。 🥲

想要了解这个项目,一个比较直接的办法就是先看看数据库的 ER 图,手动画图太麻烦,

Google 了下, 发现可以用 JetBrainsDataGrip 来导出 ER 图。

步骤

1. Connect to database

1️⃣. Click + button in the left panel

2️⃣. Select Data Source -> MySQL(or other database)

3️⃣. Fill in the your database information

img

2. Show diagram

1️⃣. Right click the database you want to show

2️⃣ 3️⃣. Select Diagram -> Show Diagram

4️⃣. Then you will see the ER diagram

img

扩展

DataGrip 还有很多功能,比如可以直接在里面写 SQL,还可以直接导出 SQL Script,等等。

点击这里查看更多功能。

· 約1分
wen

背景

Diffuses Apphuggingface 推出的一个 App。

结论

以下基于 Version 1.1 (20230222.140932) 进行介绍.

先说结论,让它画猫画狗可能还行,画人就惨不忍睹了。😄

而且除了默认提供的 5 个模型(选择后会自动下载),不能加载其他模型。

一些生成结果

画狗

  • Prompt: Labrador in the style of Vermeer
  • Model: stabilityai/stable-diffusion-2-base

img

画人

危険

下面的图片有点恐怖哦。。。 😨 而且我都是我重复多次,选相对好的结果。

  • Prompt: Japanese beauty
  • Model: stabilityai/stable-diffusion-2-base

img

  • Prompt: Chinese beauty
  • Model: stabilityai/stable-diffusion-2-base

img

  • Prompt: Korean beauty
  • Model: stabilityai/stable-diffusion-2-base

img

  • Prompt: American beauty
  • Model: stabilityai/stable-diffusion-2-base

img

· 約2分
wen

Update Docusaurus to v3

Docuaurus v3 已经发布了, 官方提供了升级指南, 这里还是记录一下升级过程吧。😄

升级依赖

  • docusaurus.config.js
docusaurus.config.js

-const lightCodeTheme = require('prism-react-renderer/themes/github');
-const darkCodeTheme = require('prism-react-renderer/themes/dracula');
+const { themes } = require('prism-react-renderer');
+const lightTheme = themes.github;
+const darkTheme = themes.dracula;

prism: {
- theme: lightCodeTheme,
- darkTheme: darkCodeTheme,
+ theme: lightTheme,
+ darkTheme: darkTheme,
},

  • package.json
package.json
   "dependencies": {
- "@docusaurus/core": "2.4.3",
- "@docusaurus/preset-classic": "2.4.3",
- "@docusaurus/theme-mermaid": "^2.4.3",
- "@mdx-js/react": "^1.6.22",
+ "@docusaurus/core": "3.0.0",
+ "@docusaurus/preset-classic": "3.0.0",
+ "@docusaurus/theme-mermaid": "^3.0.0",
+ "@mdx-js/react": "^3.0.0",
"clsx": "^1.2.1",
- "prism-react-renderer": "^1.3.5",
- "react": "^17.0.2",
- "react-dom": "^17.0.2"
+ "prism-react-renderer": "^2.1.0",
+ "react": "^18.2.0",
+ "react-dom": "^18.2.0"
},
"devDependencies": {
- "@docusaurus/module-type-aliases": "2.4.3"
+ "@docusaurus/module-type-aliases": "3.0.0",
+ "@docusaurus/types": "3.0.0"
},


"engines": {
- "node": ">=16.14"
+ "node": ">=18.0"
}

重新安装依赖

删除 node_modules 目录和 package-lock.json 文件,然后重新安装依赖。

npm install

检查 md/mdx 文件

  • 官方提供了工具来检查 md/mdx 文件中的 frontmatter 是否符合 MDX v3。
npx docusaurus-mdx-checker

你可能需要修改一些文件,比如我升级到 v3 后,就遇到了一个格式问题:

  • 修改前
<details><summary>xxx</summary>
...
</details>
  • 修改后
<details>
<summary>xxx</summary>
...
</details>

· 約2分
wen

git commit --amend --no-edit

当你觉得你已经把某个 issue 修改好了,可实际上你没能一次性修改好(也许只是有些 typo);

OR

当你确实已经把某个 issue 修改好了,可你忘记了 add 一些文件时,

你可以这么做:

git add .
git commit --amend --no-edit # --no-edit 选项表示不修改 commit message。
git push -f # 如果你已经 push 过了,需要添加 -f 来强制 push。
注記

其实我就是为了体验下 mermaidjs 的 gitGraph 功能而写的这篇文章 😄。

BTW, gitGraph 的 commit message 默认是 rotated 的。

如果你想要更改成水平的,需要在 docusaurus.config.js 中添加如下配置:

+      mermaid: {
+ options: {
+ gitGraph: { rotateCommitLabel: false },
+ },
+ },

· 約5分
wen

刚过了不惑之年,有点感伤,碰巧听到这首歌,很有感触。

是不是该写封信给 10 年后的自己呢?😀

LRC 歌词:

曲名 : letter song (10年後の私へ)
作词 : doriko
作曲 : doriko
好きな人と歩いた場所も (曾和喜欢的人一起走过的地方)
その時見た景色も (那时曾看到的景色)
振り返らず 今を駆け抜け (统统抛掉 不再回头 向前飞奔)
私は何と出会うの (我将会遇见些什么呢)
立ち止まるほど (驻足不前)
意味を問うほど (探索意义)
きっとまだ大人ではなくて (一定是我还不够成熟)
今見てるもの (现在看到的事物)
今出会う人 (现在遇见的人)
その中でただ前だけを見てる (在这片纷繁喧嚣之中 我只会看向前方)
10年後の私へ (致十年以后的我)
今は幸せでしょうか (现在的你感到幸福么?)
それとも悲しみで (还是正沉浸在悲伤中)
泣いているのでしょうか (默默地流着泪?)
けどあなたの傍に (不过在你的身旁)
変わらないものがあり (依然会有不变的存在)
気付いていないだけで (未能察觉的你)
守られていませんか (依然在被守护着吧)
過ぎし日々に 想いを預け (把思念寄托于流逝的日子里)
時間だけ ただ追いかけてく (只有时间在不停的追赶)
背に寄り添った 誰かの夢に (托付在我肩上的 是谁的梦想)
振り向ける日がいつか来るのかな (总有一天必须要面对的吧)
10年後の私へ (致十年以后的我)
今は誰を好きですか (现在的你喜欢着谁呢?)
それとも変わらずに (还是和以前一样)
あの人が好きですか (继续喜欢着那个人呢?)
けどいつか (不过 现在的你)
知らない誰かを愛する前に (在爱上某个人之前)
自分のことを好きと (“喜欢自己”这句话)
言えるようになりましたか (能否先说出来呢)
大切な人たちは (我所珍爱的朋友们)
今も変わらずいますか (依然在反复平凡地生活吗?)
それとも遠く離れ (还是已经远去)
それぞれ歩んでますか (踏上了各自的旅途)
けど そんな出会いを (但是在重复了无数次的相遇)
别れを 缲り返して (和离别之后)
今の私よりも (是否比现在的我)
すてきになっていますか (更有魅力呢?)
10年後の私へ (致十年后的我)
今がもし幸せなら (如果现在的你是幸福的)
あの日の私のこと (从前的我)
思い出してくれますか (能否请你想起来呢)
そこにはつらいことに (回忆中的我)
泣いた私がいるけど (一定在伤心的哭泣吧)
その涙を優しく (请将这眼泪温柔地)
思い出に変えてください (融入记忆的海洋)

· 約3分
wen

0. 背景

换电脑的时候,需要把一些配置文件从旧电脑迁移到新电脑上,比如 .zshrc.vimrc.gitconfig 等等。 有些文件不一定放在 home 目录下,比如 .ssh/config.config/.starship.yaml , 这些文件手动迁移的话,比较麻烦。 所以需要一个工具来管理这些配置文件。

1. 具体需求

  • 支持多平台,比如 macOS、Linux、Windows。
  • 支持版本管理,比如 git。
  • 支持模版。

大概调研了一下,发现有这么几个工具可以管理 dotfiles:

  • chezmoi
    • Golang 写的
    • Github Star 10.2k
  • dotbot
    • Python 写的
    • Github Star 6.5k

chezmoi 满足要求,而且是用 Golang 写的,没有什么依赖,所以就用 chezmoi 了。

2. 安装

sh -c "$(curl -fsLS get.chezmoi.io)"

其他安装方式见 Install

3. 使用

3.1 初始化

ヒント

初始化之后,会在 home 目录下生成一个 ~/.local/share/chezmoi 目录(本地仓库),用来存放 chezmoi 的配置文件。 可以通过 chezmoi cd 命令进入该目录。

3.2 添加文件

3.3 更新文件

ヒント

更新了文件了之后,记得提交到远程仓库。可以参考上一节。

3.4 从远程仓库拉取文件

远程仓库有更新了,需要拉取到本地。

chezmoi update

等价于

chezmoi git pull origin main
chezmoi apply

3.5 扩展使用

3.5.1 模版

chezmoi 支持模版,可以为不同的 host 生成不同的配置文件。

比如,我要为不同的电脑配置不同的账号名,可以这样做:

  • 创建 ~/.account.json 文件,内容如下:
~/.account.json
{
"name": "thewang"
}
  • ~/.config/chezmoi/chezmoi.toml 中配置 data 字段。
~/.config/chezmoi/chezmoi.toml
[data]
name = "thewang"
  • 添加文件
chezmoi add --autotemplate ~/.account.json

{
"name": "{{ .name }}"
}

· 約3分
wen

0. 背景

之前一直用Alfred 3的 snippets 功能,但是Alfred的 snippets 功能是收费的。

最近发现了RaycastRaycast的 snippets 功能是免费的,而且Raycast的 snippets 功能是开源的,可以自己写。

所以打算把Alfred的 snippets 迁移到Raycast上。

1. 迁移 Alfred 的 snippets 到 Raycast

Alfred 的 snippets 文件的格式与 Raycast 的 snippets 文件的格式不同, 所以需要先将 Alfred 的 snippets 文件转换成 Raycast 的 snippets 文件。

1.1 Get Alfred Snippets Files

打开AlfredSnippets功能,点击Export按钮,导出Alfred的 snippets 文件。 Alfred 3 的 collections 不支持批量导出,所以需要一个一个导出。🐶

img

1.2 Convert Alfred Snippets to Raycast Snippets

新建一个文件夹,把导出的 Alfred的 snippets 文件放到这个文件夹里面。

然后在这个文件夹里面新建一个 convert-alfred-snippets-to-raycast-snippets.sh 文件,内容如下:

convert-alfred-snippets-to-raycast-snippets.sh
#!/bin/sh -e
# Script for converting Alfred snippets to Raycast snippets
# Usage: chmod +x convert-alfred-snippets-to-raycast-snippets.sh; ./convert-alfred-snippets-to-raycast-snippets.sh
# NOTE: Install jq before running this script

# List up all *.alfredsnippets files and rename them to *.zip
for file in *.alfredsnippets; do
mv "$file" "${file%.alfredsnippets}.zip"
done

# Unzip all *.zip files and get the folders name
for file in *.zip; do
unzip -o "$file" # -o: overwrite existing files without prompting
done


# Merge all *.json files to one file for Raycast snippets
jq -s 'map(.alfredsnippet | {name, keyword, text: .snippet})' *.json > ./output.json

# Clean up all files except output.json
for file in *.json; do
if [ "$file" = "output.json" ]; then
continue
fi
rm "$file"
done

for file in *.zip; do
rm "$file"
done

for file in *.plist; do
rm "$file"
done

# You can now import the output.json file to Raycast

echo "Done! 🎉 You can now import the output.json file to Raycast -> Import Snippets"

也可以从 Github gist: convert-alfred-snippets-to-raycast-snippets.sh 下载。

注記

该脚本执行需要先安装jqjq是一个命令行下的JSON处理工具。

jq的 mac 的安装方法: brew install jq。 也可以参考官网

执行下面的命令:

chmod +x convert-alfred-snippets-to-raycast-snippets.sh
./convert-alfred-snippets-to-raycast-snippets.sh

会在当前文件夹生成一个 output.json 文件。

1.3 Import Raycast Snippets

打开Raycast,然后点击Import Snippets, 选择上一步生成的output.json文件,导入Raycast的 snippets。

Reference

Migrating Alfred Snippets to Raycast