PaintMaskAnimator

更新履歴

最新版 v0.6.6(2026-09-29)。過去のバージョンは 一覧 からもダウンロードできます。

v0.6.6最新

追加

  • 環境設定のウィンドウを追加した。 編集 › 環境設定…(macOS ではアプリ名のメニュー、⌘,)で開く。変えるとすぐ反映され、OK を押す必要はない。
  • 一般:言語、自動保存のオン/オフと間隔(これまでは3分固定)
  • 外観:テーマ、アクセントカラー(「表示」メニューから移し、「表示」メニューはなくした)
  • 新規キャンバス:起動したときと ファイル › 新規作成… で使う大きさ(これまでは 1280×720 固定。新規作成は直前のキャンバスの大きさを出していた)。レイアウト用紙の画像の登録(後述)
  • 筆圧:名前を付けた筆圧プリセットを作り、切り替えられる(後述)
  • ワークスペース:保存したワークスペースの並べ替え(ドラッグでも)、名前の変更、今の配置での上書き、削除。ワークスペース メニューは名前順ではなくここで並べた順に出す。メニューの「ワークスペースを削除…」は「ワークスペースを管理…」にして、このページを開くようにした
  • パフォーマンス:取り消せる回数と、取り消し履歴に使うメモリの上限(これまでは 30 回・768 MB 固定)

ショートカット設定は項目が多いので、これまでどおり別のウィンドウにした。

  • 筆圧をプリセットにし、ブラシごとの設定と分けた。 環境設定 › 筆圧 でプリセットを追加・名前変更・削除でき、選んだものが全体の筆圧になる。ブラシのツールプロパティの 筆圧… では「全体の設定を使う」(プリセットもここで切り替えられる)か「このブラシの設定を使う」かを選ぶ。筆圧は描く人とペンの設定なので、プロジェクトファイルを開いても変わらないようにした(ファイルへの書き込みは古いバージョンのために続ける)。
  • ファイル › 新規作成… でレイアウト用紙を入れられるようにした。 環境設定 ›新規キャンバス で用紙の画像をいくつでも登録しておき、新規作成のときに選ぶ(「なし」も選べる。前回選んだものを覚える)。選んだ用紙は一番下の下書きレイヤーとして入り、キャンバスサイズを用紙に合わせられる。登録した画像は環境設定のフォルダーにコピーするので、元の画像を動かしても使える。
  • カットフォルダーを開けるようにした。 ファイル › カットフォルダーを開く…で、セル画像(PNG/TGA)と XDTS/TDTS タイムシートの入ったフォルダーを開き、タイムシートどおりのタイムラインに組み立てる。カットフォルダーへ書き出したフォルダーはそのまま読み戻せる。列はセルのフォルダー名(A/ など)、セル番号はファイル名の末尾の数字で見分けるので、他のソフトが書いたフォルダーも読める。_ts・_pool など _ で始まるフォルダーはセルとして読まない。タイムシートにないセルは連番保管セルにする。
  • バケツの含み塗りに「含む色」を3色分登録できるようにした。 枠をクリックすると現在の描画色を登録し(含み塗りも ON になる)、右クリックで消せる。登録した色は次回も使う。1色も登録していなければ、これまでどおりサブカラーを含む。チェックボックスの名前は「含み塗り」に改めた。
  • ワークスペースメニューに「初期設定」を追加した。 保存したワークスペースとは別に、いつでも起動直後のパネル配置へ戻せる。
  • アプリのアイコンを PMA のロゴにした。 ウィンドウ・Dock・タスクバー、Windows の実行ファイルとインストーラー、macOS の .app に設定する。アイコンは scripts/make_app_icons.py でロゴから作る。
  • タイムラインの行を開いてサムネイルを見られるようにした。 レイヤー名の左端の「>」で開閉し、見出しの「>」ですべてのレイヤーをまとめて開閉する。開いた行では、キーの絵のサムネイルをセルの帯の中に表示する。
  • トゥイーンを確定したあとも、あとから形を直せるようにした。 確定すると区間は 1 本のトゥイーンの帯として残り(中割りの絵は各コマに作られ、書き出し用の番号も付く)、帯をダブルクリックするか右クリックの「トゥイーンの形を直す」で、保存した変形の形から編集し直せる。直しても中割りの番号は変わらない。右クリックの「トゥイーンを解除」で、中割りを通常のセルに戻せる。
  • タイムラインで、セルとセルの間や先頭の空きを、空セルと同じ✗と波線で示すようにした(データは変えない。書き出しではもともと空セルと同じ扱い)。
  • タイムラインのルーラーで、まだコマのない範囲も指せるようにした。
  • 「順番で正規化」ボタンを追加した。 番号の順番がタイムラインの順番とずれると、ずれている数をバッジで示す。実行前に振り直す番号の一覧を確認でき、対象を選択レイヤー/すべてのレイヤーから選べる。確認画面には、撮影済みのカットをリテイクで直しているときは正規化しないよう注意を出す(理由は docs/design-principles.md)。

修正

  • 自動選択ツールでクリックするとエラーになっていたのを直した。
  • タイムラインでセルを動かしても、直後の空セル(✗)が元の位置に残り、セルが切り詰められていたのを直した。右へ動かすと空セルを押し出し、左へ動かすとくっついていた空セルがついて来る。
  • タイムラインの見出しの番号を、6コマごとの先頭(1・7・13・19…)に出すようにした。これまでは 6・12・18… だった。
  • 描画中にブラシがキャンバスの外へ出ると、外を通った部分が無視され、戻ってきた点まで直線で結ばれていたのを直した。外の区間も軌跡として扱い、はみ出した部分だけを描かない。
  • ホイールとズームツールでの拡大縮小を、キャンバス中央ではなくマウスの位置(ズームツールは押した位置)を中心にした。拡大するにつれて見ている場所がずれていかない。
  • カラースライダーの色のバーに枠が付いて見えていたのを直した。

変更

  • タイムラインの見た目を CLIP STUDIO PAINT に近づけた。 セルを一続きの帯として描き、キーは番号の箱、続くコマは色の面と横線で示す(「ー」「→」の文字はやめた)。空セルは✗と波線、右端には伸縮の取っ手を出す。トゥイーン中の区間は紫の帯と矢印(逆生成は左向き)にし、中割りのコマに点を置いて、再生位置のコマの点を赤くする。シート(黄)と連番(青)の色分けと 1 コマごとの格子は残し、秒の区切りの線を濃くした。
  • タイムラインの見出しを、毎コマの目盛りと秒の区切りを描くルーラーにし、現在のコマに赤い札を出して、その列を全レイヤーにわたって色付けするようにした。ルーラーをクリック・ドラッグすると、そのコマへ移動する。
  • タイムラインのツールバーで、再生の操作を中央にまとめ、現在のコマ/全体のコマ数を常に表示するようにした。
  • macOS で見た目を OS になじむようにした。 テーマに「システムに合わせる」を追加し、Mac では初期値にした(OS のライト/ダークの切り替えにも追従する)。アクセントカラーも「システムに合わせる」を選べ、Mac では初期値でシステム設定の色を使う。Mac では背景・区切り線の灰色を macOS に近い無彩色にし、右クリックメニュー・スクロールバー・ボタンの形も macOS に寄せた。Windows の初期値はこれまでどおり。
  • ホバーしたときの説明(ツールチップ)の表示を作り直した。 角の丸い影付きの吹き出しにし、テーマの色に合わせる。アイコンだけのボタンは、1行目に操作名を太字で出してから説明を続ける。長い説明は折り返しを減らして読みやすくした。
  • カラーチャートとオニオンスキン設定を、パネルから別ウィンドウに変えた。カラーチャートは 編集 › カラーチャート… で開く。オニオンスキン設定はタイムラインの設定ボタンで開く。どちらもメインウィンドウの上に浮かび、位置と大きさを覚える。パネルの列では幅が足りず、中身が切れていた。
  • 使用色の右クリックメニューの項目名を、何が起きるかわかる言葉にした。「対象に注視」→「この色を選択範囲にする」、「削除」→「この色を消す」(複数選択中は「選択した○色を消す」)、「太さを調整」→「線の太さを調整」、「全選択解除」→「色の選択をすべて解除」。
  • カラーサークルパネルの描画色の表示を作り直した。 メイン/サブの色をツールバー(2列表示)と同じ重ねた表示にして、カラーサークルの下へ移した。入れ替え(⇄)と初期色に戻すボタンはスウォッチの角に置く。カラーコードはメイン/サブそれぞれの横で入力・コピーでき、ホイールの下のカラーコード欄をなくしたぶんホイールを大きくした。「透明色」ボタンは背景色のスウォッチと同じ動作だったのでまとめた。
  • サブビューを「表示」メニューから外し、「パネル」メニューだけに置いた。閉じているのに起動時からチェックが付いていた。
  • 画面の見た目を今どきに整えた。 タイムラインの操作ボタン、キャンバス下の表示ボタン、パネル見出しの「≡」「×」を、線の太さのそろったアイコンにした(ライト/ダークとアクセント色に合わせて塗り直す)。左のツールアイコンも同じ描き方にし、ダークテーマでも見えるようにした。パネルのタブは枠で囲まず、選択中に下線を引く形にした。タイムラインのシート/連番の切り替えは操作列の左端の切り替えボタンにまとめ、1行ぶん高さを減らした。ツールプロパティの「使用中:〜」の帯は控えめな見出しにし、ブラシサイズのスライダーと数値欄を1行にまとめた。レイヤーと使用色の表示・描画対象の [●]/[-] はアイコンにした。ステータスバーは、何も表示していないときは記号を出さない。
  • 下書きレイヤーがひと目でわかるようにした。 レイヤー一覧の行に「下書き」バッジと左端の破線を付け、タイムラインのそのレイヤーの行には斜線を重ねる(これまでは名前が斜体になるだけで、実際には見分けられなかった)。
  • インストール時の警告への対処の案内を README とサイトから削除した。macOS の「開けません」と Windows の SmartScreen の手順は、多くの人が知っているため載せないことにした。DMG に同梱する説明ファイルは残し、隔離属性を消す xattr のコマンド(Gatekeeper の確認を飛ばす手段でもある)を外して、Apple が案内している「このまま開く」の手順だけにした。

v0.6.5

追加

  • カットフォルダーへの書き出しを追加した。 ファイル › カットフォルダーへ書き出し… から、作品名・シーン・話数・カット名を入力し、セル画像と XDTSタイムシートをカットフォルダーにまとめて書き出せる。フォルダー名・ファイル名はブロック(作品名・話数・セル番号など)と文字を並べて組み立て、ブロックごとに前後の文字・桁数・大文字/小文字を設定できる。右側に実際のセルでフォルダーツリーをプレビューし、未入力や名前の重複は書き出す前に示す。タイムシートの置き場所(直下か _ts などのサブフォルダー)と空のフォルダーも指定でき、構成はプリセットとして保存できる。前回の設定は次回に引き継ぐ。組み込みプリセットは「PMA標準」(作品名_03_c012/A/A0001.png)と「_ts・_pool」(作品名_C002/A/A_0001.png、タイムシートは _ts/c002.tdts、素材置き場の空フォルダー _pool)の2つ。
  • TDTS(東映デジタルタイムシート)に対応した。 カットフォルダー書き出しでタイムシートの形式を .xdts / .tdts から選べる。TDTS には作品情報(カット・話数・シーン)も書き込む。読み込みは、タイムリマップへの貼り付け・ファイル選択・キャンバスへのドロップのいずれでも .tdts を受け付ける。
  • CLIP STUDIO のアニメーション(.clip)の読み込みを追加した。 ファイル ›CLIP STUDIOアニメーションを読み込む… またはキャンバスへのドロップで、アニメーションフォルダーのセル画像とタイムラインのセル指定を取り込む。.clip は読み取り専用で開き、元のファイルは変更しない。タイムラインにない未配置のセルは「連番保管セル」としてプロジェクトに保存し、タイムラインのツールチップには CLIP STUDIO 側のセル名を表示する。
  • カラーチャートを追加した。 使用色の親子付けをチャートとして登録・編集し、現在の画像に存在する色へまとめて適用できる。チャートは Paint Mask Group(.pmag)ファイルとして保存・読み込みできる。チャートはプロジェクトファイルにも保存される。
  • 使用色パネルとヒストリーパネルに、操作方法を示すヘルプを追加した。
  • フローティングにしたパネルを、右下だけでなく四辺・四隅のどこからでもリサイズできるようにした。
  • UIの多言語対応(英語)を追加した。 表示 › 言語 / Language から選択でき、既定はOSのロケールに追従する。翻訳は Qt の .ts/.qm カタログ(paintmaskanimator/translations/)で管理し、scripts/update_translations.pyで再生成する。CIは --check でカタログの鮮度を検証するため、tr() を追加したまま翻訳エントリを忘れることがない。メニュー・ツールバー・ドックタイトル・ショートカット一覧・バージョン情報の全 128 文字列を英訳済み。ドックの objectName は保存済みワークスペース配置の識別子なので翻訳していない。
  • UI文字列の移行を完了した。 UIに表示される 1274 箇所を tr() で囲み、英訳 1046 件を同梱した。ログメッセージ・設定キー・ファイル形式の識別子・objectName は対象外。f-string は tr("…{name}…").format(name=…) に置き換え、補間より先に翻訳が行われるようにした(訳文で語順が変わるため)。カタログのプレースホルダは原文と一致することを検証済み。
  • 表示ラベルと内部値を分離した。 ツール種類・図形種類・ライン種類・ゴミ取りモードのコンボボックスは currentText() で分岐しており、翻訳するとその比較が静かに壊れる状態だった。addItem(表示名, 識別子) として currentData() で分岐するようにし、ヒストリーのラベルには表示名を使う。パレット編集のoperation 引数、Undoのヒストリーラベル、テーマのアクセント名、ツール名も同様に「識別子は不変、表示時に翻訳」へ整理した。モジュール/クラス定数の位置で tr() を呼ぶと翻訳導入前に評価されて原文が焼き付くため、これらは関数化して呼び出し時に翻訳する。
  • 塗りつぶしと投げ縄塗りに不透明度を戻した。 1〜100%(既定100%)。100%は従来どおり選択した色をそのまま塗り、近似色は増えない。100%未満は下地の色(透明は白とみなす)と混ぜた色で塗る。白は不透明度に関係なく消しゴム。ブラシ・ライン・図形は従来どおり常に100%。
  • 使用色を2色以上選んで右クリックすると「選択したN色をこの色へ統合」を選べるようにした。
  • リリース用のサイトを追加した。 site/ のテンプレートからscripts/build_release_site.py が GitHub Releases の一覧を読んで静的なページを組み立て、.github/workflows/pages.yml が GitHub Pages に公開する。トップページ(ドット絵のロゴアニメーション・ダウンロード・機能紹介)、更新履歴、過去のバージョン一覧、ヘルプの 4 ページ。ライト / ダークモード対応。リポジトリ変数 RELEASE_SITE_ENABLED を true にするまで公開は行わない。
  • バケツに串刺し塗りを追加した。 ツールパネルの「串刺し塗り(選択レイヤーのすべてのコマ)」を ON にすると、クリックした座標を種として選択レイヤーの全コマを一度に塗る。既存の一括適用ランナー(frame_scope.apply_over_scope)に載せているので、進捗表示・中断・Undo 1回でのまとめ戻しはゴミ取りや選択変形と同じ挙動になる。コマごとに絵は動くため、同じ座標が別のコマでは線や別のパーツの上に来ることがある。開始点の色種別(背景か、どの色か)が現在のコマと一致するコマだけを塗り、一致しないコマは触らない。 これで線を塗り潰す事故を防ぐ。飛ばしたコマ数はステータスに出るので、取りこぼしはそのコマを表示して塗り直せばよい。判定そのものは bucket_fill.py へ UI 非依存な形で切り出した。単発のバケツと串刺し塗りが同じ計算を共有するため、隙間閉じ・含み塗り・隣接・選択範囲の扱いが片方だけずれることがない。

変更

  • 配布を GitHub Releases に一本化した。 これまでのダウンロードページ(jokomanato.com)での配布と、R2 へのインストーラーのアップロードをやめ、インストーラーは GitHub の Releases からダウンロードする。
  • アプリ内の更新確認が GitHub Releases の最新リリースを参照するようにした。サイト用の共有パスワードはアプリから取り除いた。0.6.4 以前のアプリは旧サイトを参照しているため、アプリ内の更新は届かない。一度だけ Releases から手動でインストールし直す必要がある。
  • macOS の DMG を開いたときのウィンドウをサイトのデザインに揃えた。 サイトと同じ背景・ドット絵のロゴ・赤青緑のドット絵の矢印で、アプリを Applications へドラッグする案内と「開けないときは」のファイルを並べる。DMG の作成はhdiutil から dmgbuild(packaging/macos/dmg_settings.py)に切り替えた。背景画像は scripts/make_dmg_background.py で作る。
  • 使用色の親子付けを整理専用にした。 親子付けはフォルダーのような整理のためのもので、子の色を親の色でプレビュー表示せず、実画像を塗り替えることもない。これまでの「親子を統合(焼き込み)」はボタン・右クリックとも削除した。
  • [統合]は、2色以上選択した使用色を最後に選んだ色へ統合する操作にした。従来は親子の焼き込み用で、複数選択した色を統合する手段がなかった。2色以上選んでいるときだけ押せる。
  • メイン色とサブ色の表示位置を固定した。 選んだ色が上段・手前に入れ替わるため、どちらがメインかサブか分からなくなっていた。ツールバーのスウォッチはメインが上(手前)・サブが下(奥)のまま、選択は枠で示す。
  • カラーサークルのドック上部に、メイン色とサブ色を大きく表示するようにした。左がメイン・右がサブで、見出しと色コードを添える。選択中の色は枠と見出しの強調で示す。
  • バケツの含み塗りを「サブカラーを含み塗り」に変更した。 従来は使用色パネルで選択した色を含めて塗っていた。含める色をサブカラーに決めたことで、塗る前に使用色パネルで色を選んでおく必要がなくなった。
  • 一時ズーム(Windows は Ctrl+Space、macOS は ⌥Space)のドラッグをCLIP STUDIO PAINT と同じにした。 右へドラッグで拡大・左で縮小(従来は上下)。キャンバス・サブビュー・タイムラインで共通。カーソルも虫眼鏡にした。
  • 新規作成で 10000×10000 などの大きなキャンバスを作れるようにした。新規作成・キャンバスサイズの上限を 8192px から 16384px(画像読み込みと同じ)に上げた。
  • 親の色をドラッグで並べ替えると、子の色も一緒に移動し、親子関係が保たれるようにした。従来は親だけが動いて子との並びが崩れ、親子付けが解除されていた。
  • 使用色の置換・統合の後も、親子関係・タグ・フォルダーへの格納を新しい色へ引き継ぐようにした。
  • 新規ドキュメントと追加したレイヤーの既定名を「Layer 1」から「A」「B」「C」…に変更した。 セル名と揃えるためで、追加時は既存のレイヤー名と重ならない最初の文字を使い、Z の次は AA、AB…と続ける。
  • アクションパネルの参考例を、過去の配布版から一字も編集していなければ最新版へ更新するようにした。従来は初回配布版のファイルしか更新対象にならなかった。
  • テストが開発者の実際の設定フォルダーを読み書きしないようにした。 自動保存ファイルが残っている環境では、起動時の「作業の復元」確認でテストが無期限に止まっていた(CIには自動保存がないため表面化しなかった)。全テストで設定フォルダーを一時フォルダーへ隔離し、想定外のモーダルダイアログは待たずに失敗させる。止まったテストは120秒でスタックトレースを出力する。
  • リリース前の確認を手元で実行できるようにした。 scripts/preflight.py がCIと同じチェックを実行し、.githooks/pre-push で push 時に自動実行できる。scripts/bump_version.py はバージョン表記と CHANGELOG をまとめて更新する。リリースワークフローは、CHANGELOG の該当節がないときや未訳の翻訳が残っているときに、インストーラーを作る前に失敗する。
  • 実際の MainWindow を操作するE2Eシナリオテスト(pytest-qt)を追加した。保存と再読込、連番書き出し、取り消し、選択範囲の変形、使用色、トゥイーン、タイムリマップ、筆圧を通しで確認する。
  • README のリリースバッジが pyproject.toml のバージョンと一致しているかをCI で確認するようにした。
  • from .common import * を全モジュールから廃止し、明示的なimportへ移行した。星インポートのために ruff/pyright が名前解決を検証できず、F403/F405 を無視せざるを得なかった(過去にこれが原因で実行時エラーを検出できなかった例が下記 0.6.x の項にある)。47ファイル・563箇所を変換し、F403/F405 の無視を解除した。起動時の依存関係チェックは dependency_check.py に分離し、エントリポイントがQtの読み込み前に実行する。common.py は役目を終えたため、任意依存(Pillow / psd-tools)のフォールバックだけを持つ optional_deps.py に縮小・改名した。
  • OPERATION_ERRORS から AttributeError / TypeError / KeyError /IndexError を除外した。 これらは実装の欠陥を示すもので、トップレベルのハンドラで握り潰すと、バグが「操作に失敗しました」というダイアログに化けてテストにもCIにも現れない。ユーザーに見せる意図的な中断は新設のerrors.OperationError を送出するようにし、該当する 68 箇所を移行した。
  • MainWindow のミックスイン18個のうち15個をコントローラへ移行した。ミックスインは名前空間が単一のため、15個の無関係な機能が同じ self に混ざり、兄弟同士が同じメソッド名を静かに奪い合える状態だった。どの属性をどれが提供しているのかも、型チェッカーからは見えなかった。委譲に変えると依存がself.window.… として明示され、スタブのウィンドウを渡すだけでテストできる(test_color_switching.py は未束縛のミックスインメソッドを偽の self に貼り付ける必要がなくなった)。window.export / project / importer / timeline_ops / layers /colors / used_color / line_ops / tween / onion / time_remap /scope / color_chart_ops / autosave / workspace の15個。型スタブ _main_window_members.py の Any 宣言は 366 → 230 に減った。残る UIBuildMixin / InputMixin / DockingMixin の3つは、ウィンドウ自身のウィジェットを構築するか、Qt がウィンドウに対して呼ぶオーバーライド(eventFilter)を実装しているため、ミックスインのままが正しい。
  • 進捗カウンターを progress.py へ切り出した。 書き出し・一括処理・トゥイーンなど8モジュールが共有するUI部品なのに、線ツールのモジュール(main_window_line_ops.py) の中に置かれ、無関係なモジュールがそこへ手を伸ばしていた。あわせて、キャンバスが親ウィンドウにメソッドがあるかをhasattr で確かめていたダックタイピングの分岐も不要になり削除した。
  • TimeRemapPasteDialog が解析器とキャンバスを引数で受け取るようにした。以前は self.parent() から名前で探しており、この結合はどのツールからも見えなかった。所有側のメソッドを移動・改名すると、ダイアログは例外ではなく「解析機能を取得できません」と表示するだけで静かに壊れる。
  • ライセンスを Apache License 2.0 として明示した。LICENSE(全文)、NOTICE(帰属表示)、サードパーティ表記 THIRD_PARTY_LICENSES.md を追加し、配布バイナリにも同梱する。商用・非商用を問わず自由に利用・改変・再配布でき、クローズドソース製品への組み込みも可能。
  • ヘルプメニューに「バージョン情報…」を追加した。バージョン・著作権・ライセンス表記と、PySide6(LGPLv3)/Qt Advanced Docking System(LGPL-2.1)などの表示義務のあるクレジットを表示する。
  • CLIP 読み込みが参考にした dobrokot/clip_to_psd と Aodaruma/clipfile-rs(いずれも MIT License)の表記を THIRD_PARTY_LICENSES.md に追加した。
  • LGPL 対応の要件を THIRD_PARTY_LICENSES.md に明文化した。 本体が GPL ではないため、同梱する PySide6 / QtAds の LGPL 義務は本プロジェクト側にある。再リンク要件(LGPLv3 §4d)は、DLL を差し替え可能な実ファイルとして置く one-folderビルドの維持によって満たしている。one-file 化や Qt の静的リンクはこの根拠を失わせるため、ソースを公開し続ける場合に限り可能(その場合は §4d(0) で成立する)。改ざん検知の追加はいずれの場合も不可。なお制約はインストール後の配置にのみかかり、配布物としての単一インストーラには影響しない。packaging/PaintMaskAnimator.spec にも同旨のコメントを入れた。
  • README の「プロジェクトの由来と開発思想」を実態に合わせて書き直した。v0.5 まで小嶋慶祐が単独開発し、v0.5 以降は小嶋慶祐・上甲愛士の 2 名による共同開発である旨を明記した(従来は 1 名がフォークを引き継いだ形の記述だった)。
  • 貢献の手引き CONTRIBUTING.md を追加した。貢献は Apache License 2.0 第5条により同ライセンスの条件で提供されたものとみなすため、CLA は設けない。

パフォーマンス

  • 大きなキャンバスでの塗りつぶし・使用色の更新・Undo を高速化した。10000×10000 での実測(offscreen)で、塗りつぶし 3.2秒 → 約0.5秒、使用色の更新 2.2秒 → 約0.3秒、Undo 2.1秒 → 10ms 未満。5000×6000 では塗りつぶし 1.1秒 → 約0.2秒、Undo 0.3秒 → 約20ms。
  • 塗りつぶしの連結領域の探索を、画素ごとの処理から行単位の連続区間のつなぎ合わせに変えた(結果は従来と同一)。
  • 塗りつぶしの Undo の保存と書き戻しを、塗った範囲の外接矩形だけにした。
  • 色索引・表示フィルタのキャッシュに画素数の上限を設けた。従来は件数だけの制限で、10000×10000 では数十GBを保持し得た。
  • レイヤーの複製(Undo の文書スナップショットやコマの複製)で、画素を書き込むまでコピーしないようにした。

修正

  • macOSのトラックパッドでズームが暴走する不具合を修正した。 キャンバス・サブビュー・タイムラインのホイールズームが「1イベント=1段(1.15倍)」だったため、細かいイベントを大量に送るトラックパッドでは軽いスクロールで最大倍率まで飛んでいた。さらにキャンバスは縦方向の移動量0のイベント(横スワイプやスクロールの開始/終了)を縮小として扱っていた。ズーム量を移動量に比例させ(ホイール1ノッチ=120で従来どおり1.15倍)、移動量0のイベントは無視する。
  • 初回起動時にパネルが最小幅に潰れる不具合を修正した。 ワークスペース未保存のとき、各パネルが幅60pxまで潰れ、タイムラインが下端からはみ出していた。表示前に保存・復元した配置が最小サイズのまま戻るためで、表示時に実際のウィンドウサイズからツールプロパティ・カラー列・サブビューへ幅を、タイムラインへ高さを配るようにした。画面が狭いときはキャンバスに幅の45%を残して縮め、ウィンドウの伸縮はキャンバスだけが受け持つ。
  • 既定のウィンドウサイズが画面からはみ出す不具合を修正した。 1500×960 固定だったため、Windowsの小さいノートPCや拡大率150%の環境でタイトルバーやタイムラインが画面外に出ていた。画面の作業領域に収めて中央に置く。
  • パネルのメニュー(☰)が、ADSが配置を組み直した後に空になることがあった。メニューを開いた時点でボタンの親からエリアを辿るようにした。
  • アクション編集を開くとアプリが落ちる不具合を修正した。 PySide6 6.11 では、アプリ全体に Python のイベントフィルターがあると、アクション編集のエディター(QtWebEngine)の読み込み中に落ちていた。ダイアログを開いている間だけフィルターを外し、閉じたときに戻す。
  • macOS で「VS Codeで開く」が使えない不具合を修正した。 code コマンドをPATH に入れていないと、常に見つからないと表示していた。/Applications と~/Applications の VS Code(Insiders を含む)から直接開く。

変更(macOS)

  • macOS 版は公証を受けていないため、初回起動が Gatekeeper に止められる。「このまま開く」手順と xattr での解除方法を、README と DMG に同梱したテキスト(開けないときは.txt)で案内するようにした。Apple Silicon 専用であることも明記した。
  • 「拡大縮小(押している間)」の既定キーを macOS では ⌥Space にした。Qt ではCtrl 扱いのキーが⌘になるため、従来の既定は⌘Spaceとなり Spotlight に取られていた(⌃Space も入力ソース切り替えに使われている)。Windows は Ctrl+Space のまま。
  • 操作説明の「Ctrl+クリック」「Alt+クリック」などを macOS では ⌘・⌥ で表示する。macOS で物理的な Control+クリックは右クリックになるため、表記どおりに押すと別の操作になっていた。

v0.6.4

追加

  • ヒストリーをブランチ(分岐)付きのツリーで表示できるようにした。Undoしてから別の編集をしても、それまでの履歴は「⑂」の分岐として残り、クリックすればその未来へ戻せる(いま辿っている履歴は入れ替わりに分岐として保存されるので、行き来できる)。あわせて、すべてUndoした「開始状態」の行を追加した。

修正

  • クオリティ変形の回転で、線や色境界が不規則にギザついていた問題を修正。出力画素から元画像へ逆写像し、面積カバレッジの多数決で色を決める方式へ変更した。2値のまま、回転角に応じた規則的な階段状のエッジになる。
  • クオリティ変形の90度・180度・270度回転が、わずかに画素を取りこぼしていた問題を修正(完全に無損失になった)。
  • クオリティ変形の縮小で、細い線が消えていた問題を修正(25%縮小でも線が途切れない)。
  • クオリティ変形が258色以上の素材を無言で64色へ減色していた問題を修正。上限を4096色へ引き上げ、元の色のまま変形する。上限を超える場合のみ減色し、その旨をステータスに表示する。
  • クオリティ変形のプレビューが、通常プレビューより一回り太っていた問題を修正(ぼかし由来の膨張を廃止。両者の形状がほぼ一致するようになった)。
  • Python 3.10 でパッケージ全体が import できなかった問題を修正(3.11以降にしか存在しない tomllib を無条件に読み込んでいた)。新設した移植性CIジョブが検出。

変更

  • クオリティ変形を既定でONにした。
  • クオリティ変形と「すべてのコマに適用」を併用できるようにした(従来は排他で、クオリティON時は現在のコマだけが対象だった)。
  • クオリティ変形で色が重なった場合の優先順位を明確化(実線色が最優先、以降は暗い色順)。従来はRGBの辞書順という予測できない順序だった。

パフォーマンス

  • クオリティ変形のメッシュ変形を高速化(色数に比例していた処理を1回にまとめ、実測で7〜11倍)。
  • クオリティ変形の色分解を高速化(色ごとの全画素走査をやめ、実測で10〜25倍)。

内部

  • フレーム横断の一括適用を1つのランナーへ集約(frame_scope.py)。適用範囲を表すFrameScope と、1レイヤーを受け取って結果画像を返す純粋な op を渡すと、保持コマの重複除去・共有画像の扱い・進捗通知・キャンセル・Undo のまとめ上げをランナーが行う。機能ごとに「全コマ対応」を書き直す必要がなくなった。
  • ゴミ取り/塗り抜けと色置換(削除・統合を含む)を新ランナー経由へ移行。全コマへ適用しても Undo は1件(ScopedBatchUndo。レイヤーを跨げる)になり、ゴミ取りは実行中に中止できるようになった。中止時は部分適用を残さない。
  • 変形の再標本化を mask_transform.py(純NumPy)へ分離。ラベル画像+逆写像+面積カバレッジで実装し、Pillow への依存を描画経路から外した。
  • 変形品質の回帰テストを追加(階段の規則性、2値性、直角回転の無損失性、細線の連結性)。
  • canvas.py (4,225行) からタイムライン構造編集・描画ツール・自由変形ジオメトリを3つのMixinへ分離(canvas_timeline_ops.py / canvas_paint_tools.py /canvas_transform_geometry.py)。本体は1,815行。
  • color_panel.py (2,327行) を行ウィジェット群(color_panel_widgets.py)と5つのMixin(グループ化・選択・表示/非表示・マスク色・履歴スナップショット)へ分離。本体は808行。型スタブ _color_panel_members.py を新設。分離に伴いpyrightが未importの CheckClickArea / QGraphicsOpacityEffect を検出(実行時エラーになる箇所。from .common import * のためruffでは検出できなかった)。
  • main_window.py (3,385行) からUI組み立て・線画処理・入力処理を3つのMixinへ分離(main_window_ui_build.py / main_window_line_ops.py / main_window_input.py)。本体は1,048行となり、アプリ状態・キャンバス連携・ドキュメント生存期間だけが残った。
  • MainWindow.connect() を connect_signals() へ改名。PySide6ではMixin側に置いたconnect が組み込みの QObject.connect に隠されるため(実際に分離時に発現した)。
  • 型スタブ(_main_window_members.py / _canvas_members.py)の Any を実型へ置き換え開始(palette / history_panel / 各タイマー / frames / undo_stack など)。pyright警告は149件から111件へ減少し、reportOptionalMemberAccess の緩和を撤去。
  • Undo/Redoのスタック要素を、タグ付きタプルから型付きデータクラス(undo_entries.py)へ移行。
  • Undoスタックを件数だけでなく保持画像の合計バイト数でも制限(MAX_UNDO_BYTES)。
  • 全Undo登録箇所を PaintCanvas.push_undo() に集約し、上限調整とRedo破棄の書き忘れを防止。
  • CIに移植性ジョブを追加(Python 3.10 / 3.12、および配布先であるWindowsでのテスト)。
  • ruffに bugbear (B) を追加。numpy の上限を <3 へ緩和(NumPy 2 で全テスト通過)。
  • カバレッジ下限を 35% から 37% へ引き上げ。
  • 設定ファイルを所有者のみ読み書き可(0600)で保存。

v0.6.3

追加

  • 使用色パネルに、色コードの常時表示、選択列、親子プレビュー、フリーズ、ドラッグ並べ替えを追加。
  • 使用色パネルの並べ替えなどを Undo/Redo 対応し、操作履歴を確認できるヒストリーパネルを追加。
  • 実ウィンドウからプロジェクト保存・再読込までを検証する統合テストと、リリースバージョン整合性検査を追加。

変更

  • 使用色パネルの置換色列を廃止し、描画対象と親子関係が分かりやすい構成へ刷新。
  • 選択されていない描画を高品質変形時にも保持するよう、変形処理を改善。
  • キャンバス中央基準のズーム挙動を改善し、重複していた X ショートカット項目を整理。
  • アプリ、Pythonパッケージ、macOSバンドル、Windowsインストーラーのバージョンを pyproject.toml から取得する構成へ統一。

修正

  • QtAdsを使うテストがすべて成功した後、ネイティブ終了処理でアクセス違反になる問題を専用テストランナーで回避。
  • 使用色のドラッグ中フィードバックと、子色を親色の直下へ配置する並べ替え挙動を改善。

内部

  • CIとリリース処理からテスト失敗を無視する || true を撤廃し、Ruff、Pyright、カバレッジ34%を必須化。
  • 型検査対象をテストとビルドスクリプトまで拡張し、プロジェクト入出力モジュールの包括 import を明示 import に変更。
  • 実行ログ、pytest一時ファイル、editable install生成物をGit管理対象外に整理。

v0.6.2

主な変更点

追加

  • ドッキング可能なワークスペース機能(QtAds パネルレイアウトの保存/復元、各パネルのハンバーガーメニュー)
  • カラーホイール/スライダーの独立ドック化、色相リングモード、色コードの直接入力
  • 設定可能なライト/ダークテーマ(新パレット・コントラスト計算・重要度で色分けされるステータスバー)
  • 領域ベースの Undo
  • ユーザーごとのローテーションログ

変更

  • スライダー・カラーピッカー・ツールバー・タイムラインのモダン化
  • 大きなキャンバスでのブラシ描画を高速化

修正

  • 大きなキャンバスでのブラシストロークのカクつき
  • 画像パスソート時の NameError
  • getcolors のスカラー戻り値による減色エッジケース

内部

  • main_window / canvas の Mixin 分割による保守性向上
  • CI 品質ゲート(ruff + pyright + カバレッジ)導入、pyright 警告 1789 → 213
  • broad な except の狭小化とログ出力

v0.6.1

変更

  • Windows 版を Inno Setup インストーラー、macOS 版をアプリケーション入り DMG として配布する構成へ刷新。
  • PyInstaller の設定を共通化し、アプリに必要なモジュールやリソースを確実に含めるよう改善。

修正

  • リリースタグとアプリ本体、Python パッケージ、インストーラーのバージョンが一致するよう修正。

v0.6

追加

  • PaintMaskAnimator の初回リリース。
  • フレームとレイヤーを使ったペイント・マスクアニメーション編集に対応。
  • プロジェクトの保存・読込、画像処理、減色、オートセーブ、クラッシュ復元、アプリ内更新機能を追加。
  • Windows と macOS 向けの配布パッケージ、CI、自動テストを整備。