[{"id":"chroma-key","href":"/tools/chroma-key/","title":"クロマキー","tags":"image chroma-key transparency","search":"chroma-key image chroma-key transparency background-removal green-screen クロマキー 背景色を透過にする 指定した色とその許容誤差の範囲を透過にします。カラーピッカーかcanvasのクリックで対象色を選び、toleranceで巻き込む範囲を、smoothingで境界の滑らかさを決めます。透過を保つため出力はpng固定で、処理はすべてブラウザ内で完結します。"},{"id":"cors-preflight-predictor","href":"/tools/cors-preflight-predictor/","title":"CORSプリフライト","tags":"cors fetch preflight","search":"cors-preflight-predictor cors fetch preflight http corsプリフライト optionsが先に飛ぶかを判定する method、requestヘッダー、content-typeから、そのcross-origin requestがoptionsのプリフライトを伴うかを判定し、根拠になった条件を示します。application/jsonはsafelistに無いため、それだけでプリフライトの対象です。fetch標準のsafelistに基づく静的な予測です。"},{"id":"cross-platform-filename-scanner","href":"/tools/cross-platform-filename-scanner/","title":"ファイル名スキャナー","tags":"filename windows unicode","search":"cross-platform-filename-scanner filename windows unicode portability ファイル名スキャナー osをまたぐと壊れる名前を探す 相対パスの一覧を渡すと、windowsの予約名と禁止文字、大文字小文字だけが違う衝突、unicode正規化で同じになる衝突を洗い出します。ファイルの中身は読まず、パス文字列だけを見ます。誤変更を避けるため改名はせず、問題の候補と該当パスを示すところまでです。"},{"id":"dst-local-time-checker","href":"/tools/dst-local-time-checker/","title":"夏時間の境目","tags":"dst timezone scheduling","search":"dst-local-time-checker dst timezone scheduling intl 夏時間の境目 消えた時刻と二度来る時刻を見つける iana time zoneのlocal timeが、一意に決まるか、時計を戻す日に2回現れるか、時計を進める日に存在しないかを判定します。2回現れる時刻は異なる2つのutc instantに対応し、存在しない時刻はどのinstantにも対応しません。結果はbrowserのintl time zone dataに依存します。"},{"id":"eye-training-20-20-20","href":"/tools/eye-training-20-20-20/","title":"20-20-20","tags":"20-20-20 break-timer eye-strain","search":"eye-training-20-20-20 20-20-20 break-timer eye-strain wellness focus 20-20-20 20分ごとに20秒、遠くを見る 20分ごとに20フィート（約6メートル）先を20秒見る、という区切り方のための休憩タイマーです。近距離の注視が続くのを機械的に断ち切ることが目的で、画面作業や勉強の合間に使えます。治療ではなく、視線を動かしやすくするための補助です。"},{"id":"invisible-character-inspector","href":"/tools/invisible-character-inspector/","title":"不可視文字","tags":"unicode invisible-character bidi","search":"invisible-character-inspector unicode invisible-character bidi zero-width 不可視文字 ゼロ幅・bom・双方向制御を暴く ゼロ幅文字、bom、nbsp、双方向制御文字の種類と位置を示し、選んだ種類だけをまとめて取り除きます。zwjやvariation selectorは絵文字や一部言語の表現に要るため、一律には消しません。表示事故を起こしやすい文字に対象を絞っていて、security scannerではありません。"},{"id":"sprite-sheet","href":"/tools/sprite-sheet/","title":"スプライトシート","tags":"video sprite-sheet thumbnail","search":"sprite-sheet video sprite-sheet thumbnail preview webworker スプライトシート 動画をサムネイルの一覧にする 動画から一定間隔で144フレームを取り出し、12×12のグリッドに並べた1枚のスプライトシートを作ります。動画プレーヤーのシークプレビューやアニメーション素材に使えます。デコードと合成はweb workerで行うので、処理中もuiが固まりません。"},{"id":"uuid-generator","href":"/tools/uuid-generator/","title":"UUID","tags":"uuid generator","search":"uuid-generator uuid generator uuid v4とv7をまとめて発行する uuid v4（乱数）とv7（時刻順）を最大1000件まとめて生成し、csvで書き出せます。v7は先頭にミリ秒精度のunix時刻を持つため生成順に並び、データベースの索引が断片化しにくくなります。生成はすべてブラウザ内で行います。"},{"id":"cache-control-freshness","href":"/tools/cache-control-freshness/","title":"Cache-Control","tags":"cache-control http rfc-9111","search":"cache-control-freshness cache-control http rfc-9111 cdn cache-control 残り鮮度を計算する rfc 9111のage計算とdirectiveの優先順位から、responseがfreshかstaleかと、freshで居られる残り秒数を求めます。shared cacheを選ぶとs-maxageがmax-ageより優先されます。同じ入力から同じ結果になるよう、判定時刻も明示的な入力にしています。"},{"id":"cipher","href":"/tools/cipher/","title":"ピクセル暗号","tags":"image cipher encryption","search":"cipher image cipher encryption aes png metadata privacy web-crypto ピクセル暗号 パスワードで画像を施錠する パスワードからpbkdf2で導いた鍵でaes-ctrの鍵をaes-gcmに包み、saltとivをpngのtextチャンクに残します。復号に要る情報が画像そのものに入るので、覚えておくのはパスワードだけです。シルエットを守るため透明ピクセルは対象外にします。"},{"id":"eye-training-saccade","href":"/tools/eye-training-saccade/","title":"サッカード","tags":"eye-training saccade eye-strain","search":"eye-training-saccade eye-training saccade eye-strain scanning focus サッカード 跳ぶ的を目で捉え直す 画面内をとびとびに移動するターゲットを、そのつど目で捉え直す1分間のセッションです。頭は動かさず、視線だけを跳ばして追いかけます。長時間の近距離作業で固まった視線の動かし方を切り替えたいときに向きます。治療ではなく休憩の補助です。"},{"id":"file-type-mismatch","href":"/tools/file-type-mismatch/","title":"ファイル形式の食い違い","tags":"file-signature mime extension","search":"file-type-mismatch file-signature mime extension magic-bytes ファイル形式の食い違い 拡張子とmimeと中身を照合する 拡張子、申告されたmime type、先頭バイトのsignatureを突き合わせ、三者が食い違うファイルを見つけます。特定できないものは安全ではなく「不明」として区別します。security scannerではないので、結果は形式の証明ではなく調査の手掛かりとして使ってください。"},{"id":"poster-tile-calculator","href":"/tools/poster-tile-calculator/","title":"ポスター分割印刷","tags":"poster printing tiling","search":"poster-tile-calculator poster printing tiling overlap ポスター分割印刷 必要枚数とのりしろを出す 仕上がり寸法、用紙サイズ、余白、のりしろの重なり幅から、必要な枚数と各ページが受け持つ範囲を計算します。余白にはprinterが印刷できない端の幅も含めてください。のりしろは5〜10mmを起点に調整します。pdf生成と画像の自動分割は行いません。"},{"id":"unicode-normalization-collision","href":"/tools/unicode-normalization-collision/","title":"正規化衝突","tags":"unicode normalization filename","search":"unicode-normalization-collision unicode normalization filename identifier 正規化衝突 nfc/nfdで同じになる名前を暴く 見た目の違う識別子がunicode正規化で同じ値になる組み合わせを、nfc・nfd・nfkc・nfkdの形ごとに検出します。互換正規化は単位記号や装飾文字の意味を変えることがあるため、一律の適用は勧めません。osやdb固有の照合規則、locale固有の大小文字変換は再現しません。"},{"id":"url-encoding","href":"/tools/url-encoding/","title":"URLエンコード","tags":"url percent-encoding form-encoding","search":"url-encoding url percent-encoding form-encoding urlエンコード 部品・全体・フォーム値を使い分ける urlコンポーネント、url全体、フォーム値の3通りの規則でエンコードとデコードを行います。規則ごとにそのまま残る文字が違い、フォーム値のデコードだけは+を空白として扱います。不正なpercent escapeやutf-8はエラーとして示し、推測で入力を書き換えることはしません。"},{"id":"base64-encoding","href":"/tools/base64-encoding/","title":"Base64","tags":"base64 base64url utf-8","search":"base64-encoding base64 base64url utf-8 base64 standardとbase64urlを行き来する utf-8テキストを、+と/のstandard base64、または-と_のbase64urlに変換し、また戻します。base64urlはpaddingなしで出力し、デコードでは正しく付いたpadding付き入力も受け付けます。選んだ形式に合わないalphabetや壊れたpaddingは、推測で補正せずエラーにします。"},{"id":"chmod-simulator","href":"/tools/chmod-simulator/","title":"chmod","tags":"chmod unix permissions","search":"chmod-simulator chmod unix permissions umask chmod 権限ビットがどう動くか試す numeric modeやgnuのsymbolic modeを現在のmodeへ適用し、権限bitと特殊bitが段階ごとにどう変わるかを示します。xは常にexecuteを付けるのに対し、xはディレクトリか既にexecute bitのあるファイルにだけ効きます。+wはumaskに従い、a+wはumaskを無視します。"},{"id":"comparator","href":"/tools/comparator/","title":"画像差分","tags":"image compare diff","search":"comparator image compare diff regression qa 画像差分 2枚の違いを塗り分ける 2枚の画像を重ね、許容誤差を超えたピクセルをマゼンタで塗り分けます。一致率と差分ピクセル数も出るので、回帰テストの判定に使えます。両方が完全に透明なピクセルはrgbが違っても一致扱いです。厳密な比較は0%、圧縮後の画像は1〜5%が目安です。"},{"id":"csv-json-table-converter","href":"/tools/csv-json-table-converter/","title":"CSV ↔ JSON","tags":"csv json table","search":"csv-json-table-converter csv json table converter csv ↔ json  csvと正規化済みtable jsonを相互変換します。commaや改行を含むcellはquoted fieldとして解析・出力するので、値がそのまま保たれます。列数の足りない行は最大列数まで空cellで補い、警告を出します。すべてのcellは文字列のまま扱い、型の推測はしません。"},{"id":"eye-training-smooth-pursuit","href":"/tools/eye-training-smooth-pursuit/","title":"追従運動","tags":"eye-training smooth-pursuit eye-strain","search":"eye-training-smooth-pursuit eye-training smooth-pursuit eye-strain focus wellness 追従運動 動く的を目だけで追う 頭を固定したまま、滑らかに動くターゲットを目だけで追い続ける1分間のセッションです。跳ぶ的を捉え直すサッカードとは違い、視線を切らさず速度を合わせ続けます。長時間の画面作業の合間に挟む休憩の補助で、治療ではありません。"},{"id":"line-ending-forensics","href":"/tools/line-ending-forensics/","title":"改行コードの混在","tags":"line-ending crlf text-file","search":"line-ending-forensics line-ending crlf text-file git 改行コードの混在 lf・crlf・crの位置を割り出す lf、crlf、crが混ざった位置を行番号で示し、どちらかに揃えた版を生成します。textareaへ貼るとbrowserやosがlfへ均してしまうことがあるので、元のbytesを見たいときはファイル選択を使ってください。修正版はutf-8で出力し、元ファイルへの自動上書きはしません。"},{"id":"ascii-tree-generator","href":"/tools/ascii-tree-generator/","title":"ASCIIツリー","tags":"ascii folder-tree developer-tools","search":"ascii-tree-generator ascii folder-tree developer-tools asciiツリー インデントから構成図を起こす インデントした一覧から、asciiまたはutf-8の罫線でフォルダー構成図を作ります。markdownの箇条書きも読み取り、子を持つ名前はフォルダーとして扱います。インデントはスペースでもタブでも構いませんが、同じ階層は同じ幅に揃えてください。共有urlには入力と設定がそのまま入ります。"},{"id":"invert-color","href":"/tools/invert-color/","title":"色反転","tags":"image invert negative","search":"invert-color image invert negative filter color 色反転 ネガポジを0〜100%で混ぜる 色をネガポジ反転し、スライダーで元の色とのブレンド量を0〜100%で決めます。50%なら落ち着いた中間トーンになります。透明ピクセルは処理を飛ばすのでuiアセットや重ね画像も崩れず、保存時のファイル形式は読み込んだものを引き継ぎます。"},{"id":"screen-burn","href":"/tools/screen-burn/","title":"焼き付き軽減","tags":"oled burn-in display","search":"screen-burn oled burn-in display repair utility 焼き付き軽減 全画面パターンで残像をほぐす サブピクセルを均等に動かす全画面パターンを一定時間流し、oledやlcdの残像を薄れさせることを狙います。まずは5〜10分、しつこい残像には温度を見ながら30〜60分が目安です。対象は一時的な焼き付きで、物理的に壊れたサブピクセルは直せません。"},{"id":"tsv-json-table-converter","href":"/tools/tsv-json-table-converter/","title":"TSV ↔ JSON","tags":"tsv json table","search":"tsv-json-table-converter tsv json table converter tsv ↔ json  tsvと正規化済みtable jsonを相互変換します。tabや改行を含むcellはquoted fieldとして解析・出力するので、値がそのまま保たれます。列数の足りない行は最大列数まで空cellで補い、警告を出します。すべてのcellは文字列のまま扱い、型の推測はしません。"},{"id":"html-csv-table-converter","href":"/tools/html-csv-table-converter/","title":"HTML Table ↔ CSV","tags":"html csv table","search":"html-csv-table-converter html csv table converter html table ↔ csv  htmlのtable要素とcsvを、正規化済みtable jsonを経由して相互変換します。結合cellは値を繰り返した長方形へ展開し、警告を出します。csvには結合の情報が無いため、htmlへ戻しても結合表示には戻りません。commaを含むcellはquoted fieldとして保ちます。"},{"id":"monochrome","href":"/tools/monochrome/","title":"モノクローム","tags":"image monochrome black-and-white","search":"monochrome image monochrome black-and-white grayscale filter モノクローム コントラストと明るさを詰める ntsc加重平均（0.299×r + 0.587×g + 0.114×b）でグレースケール化し、そのうえでコントラストと明るさを調整します。輝度の重みが人の見え方に沿うため、単純平均より自然な白黒になります。保存時の形式は読み込んだファイルを引き継ぎます。"},{"id":"html-tsv-table-converter","href":"/tools/html-tsv-table-converter/","title":"HTML Table ↔ TSV","tags":"html tsv table","search":"html-tsv-table-converter html tsv table converter html table ↔ tsv  htmlのtable要素とtsvを、正規化済みtable jsonを経由して相互変換します。結合cellは値を繰り返した長方形へ展開し、警告を出します。tsvには結合の情報が無いため、htmlへ戻しても結合表示には戻りません。tabを含むcellはquoted fieldとして保ちます。"},{"id":"normal-map","href":"/tools/normal-map/","title":"法線マップ","tags":"image normal map 3d","search":"normal-map image normal map 3d texture pbr webgl game 法線マップ 高さマップや写真から起こす 高さマップや写真の明暗を傾きとして読み、法線マップを生成します。強度スライダーで凹凸の効き方を決め、y反転でdirectx系の向きへ切り替えます（既定はopenglとmetal）。カラー写真は輝度に変換してから処理するため、高コントラストのグレースケールが最も綺麗に出ます。"},{"id":"html-json-table-converter","href":"/tools/html-json-table-converter/","title":"HTML Table ↔ JSON","tags":"html json table","search":"html-json-table-converter html json table rowspan colspan html table ↔ json  htmlのtable要素と正規化済みtable jsonを相互変換します。rowspanとcolspanは覆う各cellへ値を繰り返した長方形に展開し、警告を出します。cellからは表示文字だけを取り出し、scriptは実行しません。入力に含められるtable要素は1つだけです。"},{"id":"pixelator","href":"/tools/pixelator/","title":"ピクセレーター","tags":"image pixel mosaic","search":"pixelator image pixel mosaic pixelate privacy ピクセレーター モザイクをかける 粗さを1〜30の目盛りで指定し、画像を縮小してから引き伸ばしてモザイクをかけます。値を上げるほどブロックは大きくなり、最大では長辺が20ブロックまで粗くなります。顔や文字を読めなくする用途に向き、保存時の形式は読み込んだファイルを引き継ぎます。"},{"id":"markdown-json-table-converter","href":"/tools/markdown-json-table-converter/","title":"Markdown Table ↔ JSON","tags":"markdown gfm json","search":"markdown-json-table-converter markdown gfm json table markdown table ↔ json  gfmのmarkdown tableと正規化済みtable jsonを相互変換します。escapeされたpipeとbr要素は、jsonへ戻すと元のcell文字列に復元されます。inline markdownとhtmlはcellの文字列として保ち、実行はしません。入力は単一のgfm tableだけで、前後の文章はエラーにします。"},{"id":"scramble","href":"/tools/scramble/","title":"画像スクランブル","tags":"image encryption privacy","search":"scramble image encryption privacy scramble puzzle security 画像スクランブル タイルを並べ替えて隠す 画像を1辺2〜50の格子タイルに分け、パスワードから決まる順序で並べ替えます。同じパスワードと同じ分割数を入れれば元に戻せますが、どちらかが違えば復元できません。分割数は10〜20あたりが目安で、大きいほど細かく崩れます。出力はpngです。"},{"id":"seamless-texture","href":"/tools/seamless-texture/","title":"シームレステクスチャ","tags":"image texture seamless","search":"seamless-texture image texture seamless tile pattern シームレステクスチャ 継ぎ目のないタイルにする 画像を4分割してオフセット配置し、中央に集まった境界をマスクでブレンドします。上下左右の端が連続するので、敷き詰めても継ぎ目が目立ちません。タイル表示と単体表示を切り替えて仕上がりを確かめられ、出力はpngかjpegです。"},{"id":"stamp-maker","href":"/tools/stamp-maker/","title":"スタンプメーカー","tags":"image stamp ink","search":"stamp-maker image stamp ink seal dithering threshold binary スタンプメーカー 二値化して印影にする しきい値で画像を白黒2値に落とし、朱肉の印影のように仕上げます。インク色を選べるほか、floyd-steinberg誤差拡散のディザリングを有効にすると、2色のままでも写真の階調が滑らかに残ります。透明度を保つため出力はpng固定です。"},{"id":"html-markdown-table-converter","href":"/tools/html-markdown-table-converter/","title":"HTML Table ↔ Markdown","tags":"html markdown gfm","search":"html-markdown-table-converter html markdown gfm table html table ↔ markdown  htmlのtable要素とgfmのmarkdown tableを相互変換します。cell内のpipeはescape、改行はbr要素として往復するので、htmlへ戻しても崩れません。rowspanとcolspanは値を繰り返した長方形へ展開し、警告を出します。inline記法はcellの文字列として保ちます。"},{"id":"steganography","href":"/tools/steganography/","title":"ステガノグラフィー","tags":"image png metadata","search":"steganography image png metadata security steganography ステガノグラフィー pngにファイルを忍ばせる 任意のファイルをpngのtextチャンクへ埋め込み、同じツールで取り出します。ピクセルは1つも書き換えないので見た目は変わらず、埋め込んだ分だけファイルが大きくなります。暗号化はしないので、機密情報は先に暗号化してください。実用的なのは数mb程度です。"},{"id":"markdown-csv-table-converter","href":"/tools/markdown-csv-table-converter/","title":"Markdown Table ↔ CSV","tags":"markdown csv table","search":"markdown-csv-table-converter markdown csv table converter markdown table ↔ csv  gfmのmarkdown tableとcsvを相互変換します。commaを含むcellはcsvではquoted fieldに、cell内の改行はmarkdown側ではbr要素として書き分けます。列数の足りない行は最大列数まで空cellで補い、警告を出します。すべてのcellは文字列のまま扱います。"},{"id":"markdown-tsv-table-converter","href":"/tools/markdown-tsv-table-converter/","title":"Markdown Table ↔ TSV","tags":"markdown tsv table","search":"markdown-tsv-table-converter markdown tsv table converter markdown table ↔ tsv  gfmのmarkdown tableとtsvを相互変換します。tabを含むcellはtsvではquoted fieldに、cell内の改行はmarkdown側ではbr要素として書き分けます。列数の足りない行は最大列数まで空cellで補い、警告を出します。すべてのcellは文字列のまま扱います。"},{"id":"csv-tsv-table-converter","href":"/tools/csv-tsv-table-converter/","title":"CSV ↔ TSV","tags":"csv tsv table","search":"csv-tsv-table-converter csv tsv table converter csv ↔ tsv  csvとtsvを相互変換します。commaやtabを含むcellは変換先の規則でquoteし直し、cell内の改行もquoted fieldの中に保ちます。列数の足りない行は最大列数まで空cellで補い、警告を出します。すべてのcellは文字列のまま扱い、型の推測はしません。"}]