misskey – matoken's blog https://matoken.org/blog Is there no plan B? Wed, 24 Dec 2025 21:45:48 +0000 ja hourly 1 https://wordpress.org/?v=7.0 https://matoken.org/blog/wp-content/uploads/2025/03/cropped-1865f695c4eecc844385acef2f078255036adccd42c254580ea3844543ab56d9-32x32.jpeg misskey – matoken's blog https://matoken.org/blog 32 32 ターミナル特化MisskeyクライアントのsayakaちゃんとBlurHash https://matoken.org/blog/2025/12/24/sataka-and-blurhash/ https://matoken.org/blog/2025/12/24/sataka-and-blurhash/#respond Wed, 24 Dec 2025 13:37:08 +0000 https://matoken.org/blog/?p=5089

ターミナルに特化した Misskey ストリームクライアントのsayaka ちゃんというソフトウェアがあります.Sixel 対応端末で実行すると画像付きでMisskey をストリーミングしてとても楽しいです.

このsayaka ちゃんに --force-blurhash オプションが実装されたので少し試してみました.

BlurHash?

BlurHash はフードデリバリーサービスのWolt の開発した画像読み込みのプレースホルダーなどに利用できるコンパクトな20〜30文字で表せるぼかした画像です.
この容量の小さい画像をプレースホルダーに埋め込むと空っぽより彩りが豊かになったり,NSFW 画像をモザイクする代わりに使ったり出来ます.
BlurHash はJSON, HTML, Shell で安全な次のキャラクタを使ったBase 83 で表現されます.

0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz#$%*+,-.:;=?@[]^_{|}~

BlurHash はMITライセンスでたくさんの言語で実装されています.

以下はDebian logo をC 実装のBlurHash にコンポーネント数ごとにかけてみています.コンポーネント数により7〜133byteで表されています.

$ git clone https://github.com/woltapp/blurhash (1)
$ cd blurhash/C/
$ make blurhash_encoder (2)
$ make blurhash_decoder (3)
$ wget https://www.debian.org/logos/openlogo-nd-100.png (4)
$ file openlogo-nd-100.png
openlogo-nd-100.png: PNG image data, 101 x 124, 8-bit colormap, non-interlaced
$ for i in {1..8}; do ./blurhash_encoder $i $i openlogo-nd-100.png; done (5)
00SFLy
AJSFLyixHXx]
KJSFLyixR5HXx]kCWBj[%#
UJSFLyixR5xuHXx]kCofWBj[%#yDeTV@yXR5
eJSFLyixR5xuVsHXx]kCofj[WBj[%#yD%#eTV@yXR5tRV@o|%}kCRP
oJSFLyixR5xuVsiwHXx]kCofj[VsWBj[%#yD%#tleTV@yXR5tRofV@o|%}kCRPMJ%gV@ozozRPoz
yJSFLyixR5xuVsiwtlHXx]kCofj[VsozWBj[%#yD%#tlkCeTV@yXR5tRofkCV@o|%}kCRPMJMd%gV@ozozRPozRPozaytlR5H?kBRP
:JSFLyixR5xuVsiwtlt7HXx]kCofj[VsozVsWBj[%#yD%#tlkCj[eTV@yXR5tRofkCtRV@o|%}kCRPMJMdV@%gV@ozozRPozRPozozaytlR5H?kBRPtRxukCtRVsR5kCfkae
$ for i in {1..8}; do ./blurhash_encoder $i $i openlogo-nd-100.png | wc -c; done (6)
7
13
23
37
55
77
103
133
$ for i in {1..8}; do ./blurhash_decoder $( ./blurhash_encoder $i $i openlogo-nd-100.png ) 101 124 blur-$i.png; done (7)
$ lsix (8)
  1. BlurHash のsource 入手

  2. encoder build

  3. decoder build

  4. Debian logo file 入手

  5. プレースホルダー枚にBlurHash に変換

  6. バイト数確認

  7. BlurHash をpng に変換

  8. png に変換したBlurHash を表示

blurhash debian logo

昔はhtml のimg タグにlowsrc でサイズの小さい代替画像を指定したりしていましたが(現在は非推奨)それよりも小さくなると思います.

sayaka の –force-blurhash オプションを試す

sayaka ちゃんの –force-blurhash オプションを試してみます.
まずはbuild.
Linux でのbuild 時に引っかかりやすいのがGNU Make ではなくbmake を使うところ.

$ git checkout a4e143d50ceee29a61610d1ee76e4030b0bba273
Previous HEAD position was d76cb2c ver 3.8.1 (2024/09/21)
HEAD is now at a4e143d src/misskey: --force-blurhash オプションを実装してみる。 画像表示を Blurhash だけにするモード。
$ ./configure
$ bmake -DRELEASE all
$ src/sayaka
usage: sayaka <command> [<options...>]
 <command>
  -h,--home           : Home timeline mode (needs --server and --token)
  -l,--local          : Local timeline mode (needs --server)
  -p,--play=<file|->  : Playback mode
 <options>
  -s,--server=<host>  : Set misskey server
  -t,--token=<file>   : Set misskey access token file
  -c,--color=<color>  : 256,16,8,2,1 and gray[2-256] (default:256)
  --show-cw           : Open CW(Contents Warning) part
  --nsfw=<show|blur|alt|hide> : How to show NSFW contents (default:blur)
  --show-image=<yes|no|auto>  : Whether to show image or not (default:auto)
  -r,--record=<file>  : Record JSON to <file>
  --help-all          : More details

build 出来たので早速 --force-blurhash を試してみます.例えば misskey.io をこんな感じで.

$ src/sayaka --force-blurhash -l -s misskey.io

これまでは既定値ではNSFW コンテンツがBlurHash で表示されていましたが,--force-blurhash では全てのアイコン画像も添付画像もBlurHash になります.

sayaka blurhash

Note
アカウントや本文にはモザイクを掛けてあります.

BlurHash で画像サイズが小さくなるってことは通信料もデータ量も小さくなっていてプアな回線でもいい感じにストリーミングできそうな気がします.

BlurHash とSixel を60秒ずつ --record オプションでファイルに保存してみました.期待に反してBlurHash のほうが大分大きいです.

$ timeout 60 src/sayaka --record=blurhash.rec --force-blurhash -l -s misskey.io
$ timeout 60 src/sayaka --record=sixel.rec -l -s misskey.io
$ ls -s *.rec
436 blurhash.rec   44 sixel.rec

ttyrec でも同じような感じ.

$ ttyrec -f blurhash.ttyrec -- timeout 60 src/sayaka --force-blurhash -l -s misskey.io
$ ttyrec -f sixel.ttyrec -- timeout 60 src/sayaka -l -s misskey.io
$ ls -s *.ttyrec
1768 blurhash.ttyrec   228 sixel.ttyrec

通信量はどうだろうとnethogs コマンドで $ sudo nethogs -P $(pgrep sayaka) -l な感じで見てみるとやはりBlurHash のほうが通信量が多いような?

BlurHash
NetHogs version 0.8.8

    PID USER     PROGRAM          DEV                   SENT      RECEIVED
      ? root     unknown TCP                          435.079      11.067 kB/s
2782477 matoken  src/sayaka -..   enx349971e11a0f       0.252       6.934 kB/s

  TOTAL                                               435.331      18.001 kB/s
Sixel
NetHogs version 0.8.8

    PID USER     PROGRAM          DEV                   SENT      RECEIVED
      ? root     unknown TCP                          432.206      11.271 kB/s
2787797 matoken  src/sayaka -..   enx349971e11a0f       0.150       0.885 kB/s

  TOTAL                                               432.356      12.156 kB/s

録画データを見ると件数が違います.Sixel のときになにかボトルネックがありそうです.回線の問題?
後でVPS でも確認してみようと思います.

$ jq .body.type blurhash.rec | wc -l
119
$ jq .body.type sixel.rec | wc -l
10
]]>
https://matoken.org/blog/2025/12/24/sataka-and-blurhash/feed/ 0
misskey-cli で Misskey を読み書き https://matoken.org/blog/2024/03/27/read-and-write-misskey-with-misskey-cli/ https://matoken.org/blog/2024/03/27/read-and-write-misskey-with-misskey-cli/#respond Tue, 26 Mar 2024 22:17:40 +0000 https://matoken.org/blog/?p=4002

Misskey クライアントの sayaka ちゃんは sixel で画像が表示できとても便利ですが,投稿ができません.

Terminal から投稿もしたいので他の cli クライアントの misskey-cli を試してみました.

早速導入します.
今回 go install で導入しましたが, Releases に各種環境向けのバイナリも用意されています.自分の環境にあったバイナリをダウンロードして実行権を付与してあげれば簡単に利用できます.hash や 署名は無さそうです.

install
$ go install github.com/mikuta0407/misskey-cli@latest
$ ~/go/bin/misskey-cli
misskey-cli  Misskey CLI Client

Usage:
  misskey-cli [command]

Available Commands:
  help        Help about any command
  note        Create/Reply/Delete note
  renote      Renote note by noteId
  stream      streaming timeline
  tl          Show timelime (local/home/global)
  version     Show version and build revision.

Flags:
      --config string     config file (default "/home/matoken/.config/misskey-cli.toml")
  -h, --help              help for misskey-cli
  -i, --instance string   connect instance name(not host name)
  -t, --toggle            Help message for toggle

Use "misskey-cli [command] --help" for more information about a command.
$ misskey-cli version
misskey-cli  version:

設定ファイルを用意します.
~/.config/misskey-cli.toml を作成します.host は Misskey の url ,name は任意の名前,token は Misskey の「設定」→「API」→「アクセストークンの発行」から発行したものを使います.
複数の Misskey を登録できます.以下は2つの Misskey を登録しました.実行時に一番上の設定がデフォルトになるのでよく使う Misskey を一番上にするといいです.

$ vi ~/.config/misskey-cli.toml
$ cat ~/.config/misskey-cli.toml
[[Instance]]
  host = "https://msky.ospn.jp/"
  name = "OSPN"
  token = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
[[Instance]]
  host = "https://misskey.io/"
  name = "misskey.io"
  token = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"

早速使ってみます.

misskey-cli をで note や 閲覧
$ misskey-cli note 'misskey-cli から note
https://github.com/mikuta0407/misskey-cli'
misskey-cli  Create Note: @ (https://msky.ospn.jp/)
===============================================================================================================================================================================================================================================
Note Success! id : 9rcgksz5uzfb00f6
"misskey-cli から note
https://github.com/mikuta0407/misskey-cli"
$ misskey-cli tl -l1
misskey-cli  Timeline: local  @ (https://msky.ospn.jp/)
===============================================================================================================================================================================================================================================
2024/03/27 06:33:58 matoken(@matoken)    misskey-cli から note
https://github.com/mikuta0407/misskey-cli (9rcgksz5uzfb00f6)

複数のインスタンスを登録している場合は -i name (name は設定の tolm の name )で任意のインスタンスを指定できます.

$ misskey-cli -i misskey.io stream
misskey-cli  Stream: local  @ (https://misskey.io/)
===============================================================================================================================================================================================================================================
2024/03/27 06:59:02 Connected to server
  :

その他詳細は README.md に日本語で書かれています.

とりあえず一通りのことはできそうです.

環境
$ misskey-cli version
misskey-cli  version:
$ ls ~/go/pkg/mod/github.com/mikuta0407/
misskey-cli@v0.0.0-20230730142608-ab80e8e6583c
$ dpkg-query -W golang
golang:armhf    2:1.19~1
$ lsb_release -a
No LSB modules are available.
Distributor ID: Raspbian
Description:    Raspbian GNU/Linux 12 (bookworm)
Release:        12
Codename:       bookworm
$ arch
aarch64
]]>
https://matoken.org/blog/2024/03/27/read-and-write-misskey-with-misskey-cli/feed/ 0
misskey クライアント sayaka ちゃん https://matoken.org/blog/2023/10/31/sayaka-chang_which_supports_misskey/ https://matoken.org/blog/2023/10/31/sayaka-chang_which_supports_misskey/#comments Tue, 31 Oct 2023 10:28:22 +0000 https://matoken.org/blog/?p=3921

「twitter クライアント sayaka ちゃん」が,「misskey クライアント sayaka ちゃん」 になっていたので試してみました.

sayaka ちゃんはターミナルに特化したクライアントで,SIXEL にも対応しているのでアイコンや画像つきでタイムラインを流すことができて便利です.
以前はTwitter クライアントですが,3.7.0 (2023/10/09) からTwitter への接続機能を廃止してMisskey 対応開始したようです.(–record などで保存していたファイルを –play で再生することはできる.※要configure option )

メール購読していたISSUE でsite 見に行って気づきました.

早速build します.

$ git clone https://github.com/isaki68k/sayaka
$ cd sayaka
$ sudo apt install libbsd-dev libwebp-dev libgif-dev libwslay1 libwslay-dev libmbedtls-dev libssl-dev bmake build-essential
$ ./configure
$ bmake -DRELEASE sayaka
$ install src/sayaka ~/bin/
$ sayaka
sayaka: No command option specified.
usage: sayaka [<options>...]
   command option:
        --local <server> : show <server>'s local timeline.
        --play : read JSON from stdin.
   other options:
        --color <n> : color mode { 2 .. 256 or x68k }. default 256.
        --font <width>x<height> : font size. default 7x14
        --full-url : display full URL even if the URL is abbreviated. (twitter)
        --light / --dark : Use light/dark theme. (default: auto detect)
        --no-color : disable all text color sequences
        --no-image : force disable (SIXEL) images.
        --force-sixel : force enable SIXEL images.
        --jis / --eucjp : Set output encoding.
        --progress: show startup progress (for very slow machines).
        --protect : don't display protected user's tweet. (twitter)
        --record <file> : record JSON to file.
        --record-all <file> : record all received JSON to file.
        --timeout-image <msec>
        --version
        --x68k : preset options for x68k (with SIXEL kernel).

        -4 / -6                         --ciphers <ciphers>
        --debug       <0-2>             --debug-format
        --debug-http  <0-2>             --debug-image <0-1>
        --debug-sixel <0-2>             --debug-show  <0-2>
        --mathalpha                     --no-combine
        --max-cont <n>                  --max-image-cols <n>
        --ormode <on|off> (default off) --palette <on|off> (default on)
Note
Linux 環境だとmake(GNU Make)ではなくbmake(bsd make) を使います.

現在は指定したMisskey サーバのローカルタイムラインの表示ができます.認証などは必要ありません.Misskey サーバについては以下のページを参考にすると良さそうです.

$ sayaka --local <servername>

動作確認には流量の多い misskey.io が良さそう.

$ sayaka --local misskey.io
Tip
サーバに https:// を付けるとホスト名の解決に失敗します
$ sayaka --local https://misskey.yukineko.me/
Ready...mbedtls_net_connect_nonblock https:443 - NET - Failed to get an IP address for the given hostname
sayaka: WebSocket connection failed
Tip
ローカルタイムラインを無効にしているサーバだと何も流れてきません.
$ sayaka --local misskey.yukineko.me
Ready...Connected

大量に流れてきます :)

misskey.io htl

NSFW画像は既定値ではぼかされます.表示したい場合は --show-nsfw オプションを付けると表示されます.
CW 投稿は既定値では展開されません.表示したいときは --show-cw オプションを付けると表示されます.

$ sayaka --show-nsfw --show-cw --local misskey.io

画像が表示されない場合は端末がSIXEL に対応しているか確認しましょう.そういえば最近は Microsoft Visual Studio Code も対応しているようです.(要設定変更※未検証)

laptop なんかでサスペンドしたりネットワークが切れると終了するので無限ループの中に入れたり.

$ while true; do sayaka --show-cw --show-nsfw --local nijimiss.moe --local misskey.io ; sleep 30; done
環境
$ sayaka --version
sayaka version 3.7.2 (2023/10/19)
$ dpkg-query -W libbsd-dev libwebp-dev libgif-dev libwslay1 libwslay-dev libmbedtls-dev libssl-dev bmake build-essential
bmake   20200710-16
build-essential 12.10
libbsd-dev:amd64        0.11.7-4
libgif-dev:amd64        5.2.1-2.5
libmbedtls-dev:amd64    2.28.5-1
libssl-dev:amd64        3.0.12-1
libwebp-dev:amd64       1.3.2-0.3
libwslay-dev:amd64      1.1.1-4
libwslay1:amd64 1.1.1-4
$ lsb_release -a
No LSB modules are available.
Distributor ID: Debian
Description:    Debian GNU/Linux trixie/sid
Release:        n/a
Codename:       trixie
$ arch
x86_64
]]>
https://matoken.org/blog/2023/10/31/sayaka-chang_which_supports_misskey/feed/ 1