五月蠅いから結論だけ言え
「レイヤ 番号」になっているレイヤを「親フォルダ名 番号」に変更するプログラムをRustで作った。
- Gitをインストール
- Rustをインストール
- コマンドプロンプトなどを立ち上げる
git clone https://github.com/nodamushi/clip_layer_rename.git
を実行cd clip_layer_rename
を実行cargo build --release
を実行clip_layer_rename/target/release
に実行ファイルが出来てるのでclipファイルをドラッグアンドドロップ
何か要求やバグ等があったら、GitHubにIssueを立てて
レイヤがどれだかわからん
どうも
久しぶりに絵を描いてます。残念ながらnodamushi垢ではありませんが。ソフトはCLIP STUDIO PAINT Exです。
で、私はレイヤはフォルダ分けして管理してますが、レイヤ名は付けてないことが多いです。
そうしてると、レイヤ xだらけになって、何処表示してるのか分からなくなるんですよね。
この位ならまだ見えるけど、もっと多くなると画面に表示しきれなくなって、スクロールバーが出てきて辛くなってきます。
ちゃんとレイヤ名を付ければ良いんだけど、面倒臭いです。自動的に親フォルダ名+連番にしてくれればなぁ…
clipファイルのフォーマット
何とかなんねぇかなぁーと、「clip file format」とかで調べても出てこない。情報が公開されていないっぽい。
はっきり言って、情報がオープンになってないファイルフォーマットって危険って思ってるんだけど(データ移行できないから2000年代の日本製プログラムを未だに使ってる企業のおっさん共チーーッス☺)。
まぁその辺は良いとして、どうしよう。とりあえず、バイナリエディタで覗いてみよう。
バイナリエディタで先頭に見えるマジックナンバーらしき物「CSFCHUNK」で取りあえず検索してみると、なんと解析してる人が居た。ありがたい。
氏によると、中身にSQLite3が入っているらしい。バイナリエディタで見ると、確かにSQLite3のマジックナンバーが入ってる。
その前にある CHNKSQLi
はチャンクの開始マジックナンバーで、続く8byteがチャンクのサイズ(マジックナンバーとこの8byteは含まない)になってる模様。なお、サイズはビッグエンディアン。
チャンクからSQLiteのデータだけを抜き出してファイルを保存し、DB Browser for SQLiteで中身を確認してみる。データベース構造は以下の様になっていた。
たぶん、見たまんまLayerがそれっぽい。レイヤの画像としての生データはOffscreenかなぁ…(今回は名前を変えるだけなので必要ないケド)。
というわけで、Layerのテーブルを覗いてみる。
大分わかりやすい構造で助かった。LayerFolder
が0だとレイヤで、0以外だとフォルダになっている。(1以外の場合もあった)
各フォルダは LayerFirstChildIndex
で指定した数値と MainId
が一致したレイヤから内容がスタートする。
レイヤの次のレイヤはLayerNextIndex
で決まる。0なら終了だ。
LayerTypeが256の無名フォルダは、全体のルートフォルダって意味だと思う。
これでレイヤとフォルダ構造を復元できるので、後は名前を変更するだけだ。
Rustで開発してみた
さて、道筋は出来たのでC++で実装………いや、ちょっと待てよ、私もそろそろいい年こいたおっさんだ。いい加減Rustをやってみるべきではないのだろうか。
よし、Rustの入門書すら真面目に読んでないけど、取りあえず書いてみるか!
というわけで、作ったのがこちら。初めてのRustなのでつたないのは勘弁。誰か鉞を投げて切断して下さい。
このプログラムを使うと、以下の様に「レイヤー 番号」のレイヤが「親フォルダ名 番号」に変換されます。
やったね!
バイナリは公開してないので、使いたい人は自力でビルドして下さい。単にクロスプラットフォームでビルドする方法が分からなかっただけです。
いやー、それにしても。Rust全然分かんねぇ。とくに、エラー周りが分からねぇ………。
何か調べるとみんな言ってることが違う………。お前らはJavaScriptでも書いてるのか…?
こう、C++みたいにサクッと色んな型の例外を返せるといいんだけど、そんなのなさそうだし。
メソッドを使うためにuseしなきゃならんのも、C++以上に面倒臭い。自動でuseしてくれぇ。
今回はライフタイム出てこないから、Rustを使った意味は全くなかったね。
まとめ
よい子のみんなはC++の方が圧倒的に楽で簡単で超便利なので、C++を完全に理解してからRustを始めよう!
ていうか、clipファイルのフォーマット公開して!あと、オートアクションをPythonか何かで書かけるようにして!SDKもフィルタ以外を開発できるようにして!