ブルスこんにちは〜👋
自分のアカウントのアイコンを時限式に変更したいことってありますよね?
えっ?ない?
それじゃ寂しいじゃない。せっかく見にきてくれたし、ちょっと聞いていって下さい。
サービスとして作ってみたよ
Chavatar というサービスを作ってみました。
Change Avatar1 でChavatar2、発音的に「茶畑」になるので茶葉っぽくしてます
お詫び
準備確認不足により記事公開からこの時点までアイコン画像のアップロードに失敗しておりました。現在復旧しています。 (2026/4/5 15:30追記)
どんなサービス?
アカウントのアイコンを定時で入れ替えます。画像も設定もあなたのPDSのアカウントのリポジトリ内(Blueskyの投稿データと同じ扱い)で管理されます。このサービスには保管されません。
使い方
- 画面上部からアイコンに使用する画像をアップロードします。
- アイコンに使う範囲を選択して保存します。
- アップロードした画像はアバター画像に表示されます。
- 自動変更対象にするアイコンをアバター画像から選択し、ローテーションリストに追加します。
- ローテションリストに入っているアイコンが変更間隔の時間ごとにモード設定に従って自動で更新されます。
できること
時限式で自動変更する候補のアイコン画像の管理と、並び順やローテーションの設定を管理できます。
変更間隔は最短1時間から1週間単位まで設定できます。
モード設定ではローテーションリストの順番通りか、リスト内からランダム選択を設定できます。
そのほか、時間を待たずに即時実行(おためし実行)、リスト内のアイコンに強制適用するなどもあります。
現在設定されているアイコン設定も分かるようになっていますし、自動更新されないように設定でオフにすることもできます。3
注意事項
(2026/4/5 13:50追記)
アイコンの変更は、Bluesky上では「プロフィール項目の変更」とみなされます。 一部のラベラー(Account Activity Labeler など)では、プロフィールが短期間に頻繁に更新されているアカウントに対して、一定時間ラベルを貼る運用をしているものもあります。(スパムアカウントががプロフィールを頻繁に更新して人々を欺いている可能性があるため)
※ラベラーの運用を否定するものではありません。
ラベラーのラベルの解釈は利用者ごとに異なりますが、場合によってはアカウントや投稿が非表示になってしまう恐れがあることにご注意ください。
技術的な話
Lexicons
このサービスを作るにあたり、4つのLexiconレコードを使用します。
| Lexicon | 概要説明 | フィールド |
|---|---|---|
app.chavatar.avatar | アップロードしたアバターを管理するレコード | avatar -- Blob参照createdAt -- 登録日時 |
app.chavatar.settings | 自動更新するための設定や並び順を保持するレコード | avatars -- 入れ替え対象のアバターの配列enabled -- 自動アバター入れ替えの有効可否設定interval -- 自動入れ替えの間隔(1h,3h,6h,12h,1d,1w,1moなど)mode -- ランダム(random)か並べた順序通り(sequetial)かexecutor -- ローテーション実行プロバイダのURL。OAuthメタデータのclient_idを指定。ユーザーが複数の実行プロバイダで指定してても重複実行しないようにするための値。 |
app.chavatar.settings.executor | 実行者レコード | execClientId -- アバターローテーションを実行するプロバイダのOAuth Client ID。自分のClient ID(URI)と一致しなかったら実行しないように制御する予備的な情報 |
app.chavatar.state | 現在の状態を管理するレコード | cursor -- app.chavatar.avatar#avatarのTIDlastUpdated -- レコードの更新日時 |
アバターのみを管理する既存Lexiconを見つけられなかったため独自にしてしまっています。
OAuth Permission Sets
OAuthでは用途によって3種類のPermission setを作成しています。
| Permission set | 用途 |
|---|---|
app.chavatar.authManageAvatar | 上記Lexiconすべての読み書き |
app.chavatar.authExecuteRotation | アバターの定時ローテーションプロバイダ(実行環境)用。settingsの読込とstateの読み書き |
app.chavatar.authViewAvatar | avatarに登録されているアバターデータと一覧の読込のみ |
それぞれのPermissionによって他のクライアントからも制御できます。