美大卒SEがClaudeと作る、和紙×ブロックチェーンの画像保護サービス開発記
AI画像が商用利用に達するために。
By TextureLoRALab(Shitsukan)
実験参加者を募集しています この透かし技術を一緒に検証してくれるクリエイターを探しています。
高校で日本画を学んだ。
公立芸大で芸術学を専攻し、イギリスで博物館学の修士号を取った。
よく聞かれる。「なぜエンジニアを?」
僕にとっては同じことだ。
美術品をどう残すか。どう証明するか。
博物館学で向き合ったのはその問いで、いま作っているものも、その続きにある。
Claudeと一緒に「和紙の繊維パターンで画像を保護するサービス」を作っている。
ブロックチェーン付きで。
この記事は作りながら書いている。
迷ったことも、やり直したことも、そのまま残す。
なぜ「和紙」なのか
僕が研究しているのは「質感LoRA」——AIに物質の手触りを教える技術だ。
金箔の重み。螺鈿の光沢。
岩絵具のザラつき。普通のLoRAが「絵柄」を学ぶのに対して、僕のLoRAは「物質そのもの」を学ぶ。
この技術を、画像保護に使えないかと考えた。
和紙LoRAで生成したテクスチャには、繊維のランダムな交差パターンが含まれている。
これを保護したい画像の上に、極めて薄く重ねる。
不透明度3%。人間の目には見えない。
だが周波数解析をかけると、和紙の繊維パターンがはっきり出る。
見えない。でも、ある。
和紙の繊維が、画像の中で静かに息をしている。
既存の透かしとの違い
電子透かしは昔からある。
GoogleのSynthID、Adobeのコンテンツ認証。
それらは「企業が提供するサービス」だ。
透かしのパターンを自分で作ることはできない。
SHIFUKUは違う。
ユーザーが自分のSeed値で和紙テクスチャを生成する。
そのSeed値でしか生まれない繊維パターン。
それがその人だけの「指紋」になる。
自分で作った透かしを、自分の画像に、自分で重ねる。
誰にも預けない画像保護。
Claudeとの開発
このサービスの開発は、AnthropicのClaude(Coworkモード)と進めている。
比喩ではない。会話の中でコードが生まれ、実験が走り、デザインが決まっていく。
僕が「こういう体験にしたい」と言う。
Claudeがコードを書く。
僕が「これだと不安になる」と返す。
Claudeが直す。その繰り返しだ。
Day 1 和紙テクスチャの生成条件を決めた。
LoRA Weight 0.6から1.4まで。
1.0がよかった。0.8は繊維感が出ない。
1.4は壁になった。
オーバーレイ合成のテスト。
不透明度1%〜10%、ブレンドモード2種類、8条件。
全条件でPSNR 48〜51dB。
人間の目には見えない。
FFT検出では不透明度1%でも和紙の信号が出た。
Solanaブロックチェーンにテクスチャのハッシュを刻む仕組みを作り、CLIツールをブラウザ版に変換した。
Canvas APIでサーバー不要。
HTMLファイル1枚で完結する。
ここまで1日だった。
Day 2〜3 RunPodでGPUを借りて、img2imgでの攻撃耐性テストを実施した。
同時にProtectページを本番サイトに組み込み、Netlifyにデプロイ。
Day 4 技術的には動いた。
だが使ってみて、手が止まった。
保護前と保護後の画像が、見た目でまったく同じなのだ。
「これで本当に保護されているのか」
自分で作ったサービスなのに、自分の中に不安が残った。
ここから6回のやり直しが始まる。
「見えない保護」を、どう信じてもらうか
これは技術の問題ではなかった。
透かしは正しく埋め込まれている。
検出もできる。ブロックチェーンにも刻まれる。
数値上は問題ない。
でもユーザーの目に映るのは、変わらない2枚の画像だけ。
そこで、透かしの存在を「見える形」にすることにした。
保護前と保護後のピクセル差分を計算し、ヒートマップとして表示する。
和紙の繊維パターンがどこに織り込まれているか、目で確認できるようにする。
最初は紫と赤のカラーマップにした。
信号の強い場所が赤く燃えるように光る。
技術的には正確だ。
Claudeに見せた瞬間、画面を見て思った。怖い。
やり直した。
緑のドットに変えた。信号の強い場所が緑に光る。
黒い背景に、和紙の繊維が緑色の星座のように浮かぶ。
これは悪くなかった。
だが別の問題が出た。画像の暗い部分や明るすぎる部分では、Overlayブレンドの特性上、透かし信号がほぼゼロになる。
ヒートマップ上では真っ黒のまま。
「ここは保護されていないのでは」と思われる。
全面に薄い緑のベースラインを敷いて、黒い部分をなくす案を試した。
見た目の不安は消えた。
だが——それは嘘だ。信号がない場所に信号があるように見せている。
やめた。
最終的に、正直なヒートマップをそのまま見せることにした。
黒い部分は黒いまま。その代わり、なぜ黒いのか、なぜそれでも大丈夫なのかを、言葉で伝えることにした。
技術用語は全部外した。
「信号強度」も「Overlayブレンドの中間点」も要らない。
ユーザーが知りたいのは一つだけだ。
「私の画像は守られているのか」。
答えはこう書いた——
「暗く見える場所があるのは、元の画像の色合いによる見え方の違いです。
透かしは画像全体に織り込まれているので、どこか一部を切り取られても、コピーされても、あなたの作品だと証明できます」
6回やり直して、たどり着いたのは派手な可視化ではなかった。
正直な表示と、丁寧な言葉。
それだけだった。
ここから先は、技術的な詳細と、実際のコード、そして「商用サービスとして成立するのか」の検証結果を書く。
<!-- ここから有料 -->
なぜ「見えないのに検出できる」のか
画像は2つの領域で構成されている。
空間領域(ピクセルの色)と周波数領域(パターンの繰り返し)。
人間の目は空間領域を見ている。
不透明度3%の変化はRGB値で±7程度。
256階調のうちの7。
知覚閾値以下だ。
だが周波数領域では話が違う。
和紙の繊維パターンには特有の周波数特性がある。
繊維の交差が作る、ランダムだが統計的に一貫したパターン。
中周波〜高周波帯に独特のエネルギー分布を持つ。
オリジナル画像とのFFT差分を取ると、この繊維パターンのエネルギーが浮かび上がる。
不透明度が低くても、パターンの「形」は保存されている。
だから検出できる。
検出スコア = (中周波帯エネルギー + 高周波帯エネルギー) / 2
閾値: 1e-8 以上で検出テスト結果(着物画像、1024×1024px):
条件PSNR (dB)検出Overlay 1%51.2YESOverlay 3%48.1YESOverlay 5%46.3YESSoft Light 3%49.4YES
全条件で成立した。
コード:オーバーレイ合成
python
import numpy as np from PIL import Image import hashlib def normalize_texture(texture_img): """テクスチャをグレースケール化し、128中心に正規化""" tex_arr = np.array(texture_img, dtype=np.float32) tex_gray = np.mean(tex_arr, axis=2) tex_norm = (tex_gray - tex_gray.mean()) + 128.0 tex_norm = np.clip(tex_norm, 0, 255) return np.stack([tex_norm] * 3, axis=2).astype(np.uint8) def overlay_blend(base_arr, over_arr, opacity): """Overlay blend mode""" b = base_arr / 255.0 o = over_arr / 255.0 mask = b < 0.5 result = np.where(mask, 2*b*o, 1 - 2*(1-b)*(1-o)) blended = b * (1-opacity) + result * opacity return np.clip(blended * 255, 0, 255).astype(np.uint8)
normalize_textureがポイントだ。
テクスチャをグレースケールに変換し、平均値を128に中心化する。
Overlayブレンドでは128が「透明」になる。
テクスチャの凹凸情報だけが合成される。
Solanaブロックチェーン登録
なぜBitcoinではなくSolanaか。
BitcoinのOpenTimestampsは無料だが、確定まで数時間かかる。
SolanaのMemo Programは1回0.00025 SOL(≒0.01円)で即時確定。
「ボタンを押して3秒で証明書が出る」のと「数時間お待ちください」では、体験がまったく違う。
Memo Programにテクスチャのハッシュ値を書き込む。
トランザクションの署名がそのまま登録証明になり、Solscanで誰でも検証できる。
python
memo_data = { "protocol": "SHIFUKU_v0.1", "texture_hash": "a1b2c3...", "result_hash": "d4e5f6...", }
ユーザーは仮想通貨の知識が要らない。
サービス側のウォレットが裏で処理する。
ユーザーから見れば「保護ボタンを押したら証明書が出てきた」。
それだけだ。
商用サービスとして成立するか
正直に書く。
Lv.1(保存・スクショ) — 耐えられる。
透かしはピクセルレベルで埋め込まれている。
画面キャプチャでも残る。
Lv.2(JPEG圧縮・リサイズ・色調補正) — 概ね耐えられる。
中周波帯のパターンはJPEG圧縮に比較的強い。
ただしQ値が極端に低いと劣化する。
Lv.3(AI編集・img2img) — 実測済み。
RunPodでStable Diffusion img2imgを使い、Denoising Strength 0.3 / 0.5 / 0.7の3段階で攻撃テストを行った。
Denoising透かし相関 (r)画質劣化 (PSNR)実質的な保護0.30.059(微弱残存)27.6 dB(軽微)△ 検出可能だが弱い0.5-0.002(消失)23.0 dB(明らか)○ 盗用画像が使い物にならない0.7-0.028(消失)17.9 dB(壊滅的)◎ もはや別画像になる
二段構えになっている。
弱い攻撃では透かしが残る。
強い攻撃では画像自体が壊れる。
どちらに転んでも、保護は成立する。
Lv.4(専門除去ツール) — 厳しい。
だがこれは既存の商用透かしサービスも同じだ。
結論としては、カジュアルな盗用には十分効く。
プロの攻撃者には限界があるが、それは透かし技術そのものの宿命であり、このサービスだけの弱点ではない。
差別化は技術の強度ではない。
「自分で作れる」こと。
「和紙」という文化的な裏付けがあること。
「ブロックチェーン証明」がつくこと。
この三つが揃っていることだ。
現在地
texture-lora-lab.com にProtectページを組み込み済み。
HTMLファイル1枚、ブラウザ内で完結する。
保護実行後には透かし信号のヒートマップが表示され、和紙の繊維パターンがどこに織り込まれているかを目で確認できる。
次に進めること:
CLIP(画像AI)での検出テスト——GPU環境で実行予定
Solana本番接続——デモ版からメインネットへ
裏彩色メンバーシップとの連携
和紙透かしの「素材」は、どこから来るのか
この記事で「和紙LoRAで生成したテクスチャ」と何度も書いた。
このテクスチャこそが透かしの鍵であり、ユーザー固有の「指紋」になる。
その和紙LoRAはどうやって作るのか。
300回以上の試行錯誤を経て、日本の伝統素材——金箔、螺鈿、岩絵具、和紙——の質感をAIに学習させる手法を確立した。
素材を3つの距離で撮影し、30枚のデータセットからLoRAを訓練する「30枚メソッド」。
この手法を体系的にまとめたのがLoRA学習完全マスターコースだ。
マスターコースの全スライドの背景に使っている和紙テクスチャ。
あれがまさに、この透かし技術で使っている和紙LoRA(Weight 0.75)で生成した画像だ。
SHIFUKU公式サイトも同じ。
墨黒の背景と和紙白の背景が交互に現れるあのデザイン——白いセクションの背景は和紙LoRAで生成したテクスチャをそのまま使っている。
サイトのビジュアル。教材の背景。
画像保護の透かし。全部が、同じ一つの技術から生まれている。
透かしサービスを「使う」だけなら、コースは不要。
だが自分だけのテクスチャを自分で作りたいなら、ここがスタート地点になる。
🔗 SHIFUKU公式サイト — LoRA学習完全マスターコース
実験参加者募集
この透かし技術の精度を検証するために、テストに参加してくれるクリエイターを募集しています。
参加者には裏彩色メンバーシップ2ヶ月無料を提供。
Tags: AI画像保護, 電子透かし, 和紙, LoRA, Solana, ブロックチェーン, Claude, SHIFUKU, TextureLoRALab, 質感LoRA, 学習防止, セルフ透かし
#創作大賞2026 #ビジネス部門
コメントやフィードバックをお待ちしています。いただいた声は、次の記事づくりに活かします。
質感LoRAラボの入口はこちら → https://note.com/texture_lora_lab/n/nc6b9fe2692a4
