開発中に発生した問題・決定・気づきを時系列で記録する。
運用ルール:
- 実装セッション終了時に追記する
- 「何を試みたか」「なぜそうしたか」「何がうまくいかなかったか」を残す
- 解決した既知の問題は仕様書 §9 の Known Issues テーブルも ✅ に更新する
## YYYY-MM-DD
### <フェーズ名> (<対象 OS/範囲>)
- **<対応内容の見出し>**: <詳細>
- **<対応内容の見出し>**: <詳細>
### 既知の問題 / 持ち越し
- <項目>
- Samsung Flex Magic Pixel 方式のソフトウェア擬似再現 (OLED 向け):
- Galaxy S26 Ultra 等に搭載される hardware-based Flex Magic Pixel (Wide Pixel / Narrow Pixel) の光学原理を取り入れ、
shader.wgslの OLED 向けロジックを刷新。 - 自発光型 OLED ディスプレイにおいて、正面発光成分(Narrow Pixel成分)に相当するエリアの開口率を 100% 透過 (alpha = 0.0) に維持。
- 周縁拡散成分(Wide Pixel成分)のみを選択的に黒遮蔽・高周波サブピクセル干渉させることで、正面透過時・文字可視性の低下(画面の単純な暗小化)を解消しつつ、斜めからの視野角遮蔽効果を最大化。
- Galaxy S26 Ultra 等に搭載される hardware-based Flex Magic Pixel (Wide Pixel / Narrow Pixel) の光学原理を取り入れ、
- 液晶 (LCD) 向け高透過空間ジャミング&コントラスト崩壊の強化:
- 単なる黒グラデーションや全体減光を排除し、アパーチャ部(透過領域)を 100% 透明に保つことで正面明るさを確保。
- 遮蔽領域に 1px〜1.5px 単位の微細空間パターンとサブピクセル位相シフト(色収差)を重ねることで、液晶の視野角輝度減衰と合わさり、斜めから見た際に文字と背景のコントラストが崩壊(文字が溶け込んで判読不能)するアルゴリズムを導入。
- 特になし。macOS ネイティブ環境での正常ビルドおよび動作を確認。
- AI 監視 (Vigilance) モードの追加と改善:
FilterMode::AIVigilanceを実装。通常時は完全透明で、カメラに複数人数(覗き見者)を検知したときのみ自動で強力なプライバシーフィルターを起動するインテリジェントモードを実装。- 動的な最適フィルター適用ロジック: 覗き見検出時に
HighIntensitySPDに固定するのではなく、パネル種別や画面カテゴリに応じたおすすめ設定 または ユーザーが保存したプリセット設定 を動的かつ自動的に適用して有効化するロジックをAppStateとoverlay.rsに実装。- OLED モニター:
HighIntensitySPD(OLED 高密度ルーバー) - LCD IPS モニター: OSテーマ連動による
StealthLightまたはStealthDarkを自動適用。 - プリセット優先: 保存プリセット(
High/Transitなど)があればそれを優先適用。
- OLED モニター:
- インテリジェントな AI スレッド起動/停止同期の強化:
- モニターのフィルター形式に「AI 監視 (Vigilance)」が選択された際、自動的かつアトミックに「AI 覗き見検知」を有効化してカメラ検出スレッドを起動する同期ロジックを
AppStateおよびsrc/main.rsに実装。 - AI 監視モード(グローバル/個別両方)がすべて無効化された際は、自動的に「AI 覗き見検知」を無効化してスレッドを停止(省電力化)させるアトミック処理を
AppState::check_ai_vigilance_activationに追加。
- モニターのフィルター形式に「AI 監視 (Vigilance)」が選択された際、自動的かつアトミックに「AI 覗き見検知」を有効化してカメラ検出スレッドを起動する同期ロジックを
- 省電力と低 GPU 負荷の実現:
- 通常時(覗き見なし)は Alpha = 0 での描画となるため、アニメーション更新(描画ループ)を完全停止(
ControlFlow::Wait)させて GPU 負荷を 0% に抑制する最適化を行い、バッテリーへの影響を最小限に抑える設計を適用。
- 通常時(覗き見なし)は Alpha = 0 での描画となるため、アニメーション更新(描画ループ)を完全停止(
- マルチモニターと UI の完全統合、メニューバグ修正:
- トレイメニューの各ディスプレイサブメニューに「AI 監視 (Vigilance)」のチェック項目を追加し、個別の画面ごとに設定可能に。
- トップレベルメニューでのON/OFF統合: 第一階層にある「AI 監視 (Vigilance) モード」トグルのクリックイベント処理が漏れていたバグを
src/main.rsで修正・完備。
- ドキュメントの同期更新とUIの視覚的ドキュメント化:
- 基本仕様書 (
Softveil_specs_v1_6.md)、ユーザーマニュアル (MANUAL.md)、ToDoリストの更新。 - マニュアルの視覚的強化: 複雑なトレイメニューの入れ子階層(グローバルトグル、ディスプレイ別サブメニュー、各種微調整)を直感的に把握できるよう、
MANUAL.mdに詳細な「📋 メニュー階層ツリー」をASCII形式で追加。
- 基本仕様書 (
- 特になし。コンパイルおよびテストが macOS (native) / Windows (cross) ともに 100% 警告なしで成功することを確認済み。
- has_screen_capture_access の改善: 1x1 キャプチャによる偽陰性チェックが macOS 14+ で TCC ダイアログをトリガーしていたため、これを削除し
CGPreflightScreenCaptureAccessのみのpreflight_screen_capture_accessを導入。 - 起動時チェックの追加: アプリ起動時に権限をチェックし、許可されている場合は即座に
screen_capture_authorizedをtrueに設定して保存するように変更。 - ベンチマーク開始フローの修正: ベンチマーク開始前に
preflightチェックを行い、権限がない場合はカスタムダイアログを表示して中断するように変更。これにより、不意なシステムダイアログの表示を防止。
-
TCC データベースのリセット(
tccutil reset ScreenCapture)後の初回挙動の確認。 -
ベンチマーク完了時の「最良設定」自動適用:
- ベンチマーク終了時、旅行中(飛行機・電車・カフェ)に最適な「Transit (Maximum)」プリセットを全モニターに対して自動適用するロジックを
src/main.rsに実装。ユーザーの介入なしで即座に最強の保護状態へ移行可能に。
- ベンチマーク終了時、旅行中(飛行機・電車・カフェ)に最適な「Transit (Maximum)」プリセットを全モニターに対して自動適用するロジックを
-
HLCC (Stealth Light) の描画バグ修正:
shader.wgslにおける HLCC (mode 5) のライン生成ロジックを修正。0.5px 相当の計算による整数ピクセル境界でのエイリアシング( uneven width / 線の太さの不揃い)を解消するため、1px 整数境界に整列したライン描画へ変更。視覚的なノイズが低減し、安定したベール効果を実現。
-
🍎 macOS: ステルス・ダークのテーマ切替の堅牢化:
src/platform/macos.rsのset_dark_modeを強化。従来のNSAppleScriptによるインメモリ実行に加え、失敗時のフォールバックとしてosascriptCLI を呼び出す二重化構造を導入。システムイベント権限に起因する切替不能問題を緩和。
-
プリセット推奨アルゴリズムの改善:
- ユーザーフィードバックに基づき、
Office (Balanced)プリセットのデフォルト形式をStealthLight (HLCC)から、より視覚的品質の高いStealthLight (Subpixel)へ変更。
- ユーザーフィードバックに基づき、
- OCR 認識率の統合: Tesseract 環境の構築と、実際の文字認識率との相関分析(継続課題)。
- macOS システムイベント権限: アプリの初回実行時にシステムイベントの制御許可を求めるガイドの検討。
- Subpixel 制御の導入:
shader.wgslにおいて(x * 3.0)座標系を導入し、R/G/B サブピクセル単位での独立した透過制御を実現。- Stealth Light (Subpixel) モード: 0.5px 相当の極細ラインをサブピクセルごとに 1/3px ずつずらして配置するアルゴリズムを実装。文字エッジの MTF (Modulation Transfer Function) を物理的に破壊し、斜めからの色偏移(Chromatic Aberration)を意図的に増幅させることに成功。
- UI 統合: トレイメニューに「Stealth Light (Subpixel)」を追加。
- パラメータ自動選定ロジック:
--benchmarkモードにおいて、period_mmとcover_ratioの複数の組み合わせを自動テストし、Obfuscation Index が最大となる「ハードウェア固有の最適値」を算出する検索アルゴリズムfind_optimal_paramsを実装。- 評価指標の拡充: 新規追加したサブピクセルフィルタをベンチマーク対象に追加し、客観的な秘匿性能を測定。
- コンソールウィンドウの強制非表示:
src/main.rsのwindows_subsystem = "windows"属性を無条件に適用するよう修正(Debugビルドでもcmd.exeが開かないように変更)。 - 不要な標準出力の整理: GUIモード起動時の不要な
println!を整理。
- データ構造の統合:
FilterSettings構造体を導入し、濃度・形式・各種パラメータをカプセル化。 - マルチモニター対応の洗練:
- 階層型 UI: トレイメニューを「設定プリセット ➔ モニター名 ➔ 設定リスト」の階層構造に刷新。
- 個別・一括適用: 特定のモニターのみ、または全画面一括でのプリセット適用をサポート。
- 一括ベンチマーク:
--benchmark実行時に全ディスプレイを自動巡回し、各画面の物理特性(PPI等)に最適化された推奨プリセット(Office, Transit, Night)を個別に生成するよう強化。
- プラットフォーム拡張:
- Windows/macOS 両 OS において、指定したモニターのスクリーンショットを取得する
capture_display(id)を実装。
- Windows/macOS 両 OS において、指定したモニターのスクリーンショットを取得する
- 最適化完了通知: Windows において、全モニターのベンチマーク完了とプリセット生成をユーザーに知らせるダイアログ表示を実装。
- OCR 認識率の統合: Tesseract 環境の構築と、実際の文字認識率との相関分析。
- 動的パラメータの永続化: 最適化されたパラメータを
DisplayConfigに自動保存し、次回のフィルター適用時に反映させる仕組みの検討。
- StealthLight (HLCC) の実装:
- ライトモード向けのコントラスト崩壊アルゴリズムを
shader.wgslに実装。背景(白)をわずかに沈めるveil(ベースベール)と 0.5px ラインによるエッジ破壊を組み合わせ。 - OS 同期: フィルター選択時に OS テーマをライトモードへ、輝度を 20% へ自動調整するよう
AppStateを拡張。 - パラメータ・チューニング: 初例での効果不足を改善するため、
veil強度を 0.32 へ強化後、視認性とのバランスを考慮し 0.22 に最終調整。
- ライトモード向けのコントラスト崩壊アルゴリズムを
- ベンチマークモードの導入:
--benchmark引数による自動評価プロセスを構築。 - 高速化と安定化の施策:
- ネイティブ GDI キャプチャ: Windows において PowerShell 経由のキャプチャを廃止し、Win32 GDI を用いた Rust ネイティブ実装へ移行。外部プロセス起動のハングアップを解消。
- 軽量化ベンチマーク: デバッグビルドでの極端な低速化を回避するため、解析前に画像を 1/2 に縮小し、保存形式を PNG から JPEG へ変更。
- メッセージポンプ: Windows のメッセージループをベンチマーク中に明示的に回すことで、OS との通信を維持しフリーズを防止。
- メモリ内解析: キャプチャした画像をファイルに書き出す前にメモリ上で直接 Obfuscation スコアを計算するフローへ最適化。
- OCR 認識率の統合: Tesseract 等を用いた実際の文字認識率の測定(Phase 10予定)。
- サブピクセル制御の深化: 色収差シミュレーション等の高度な物理ハックの追加検討。
- ネイティブ API への移行 (osascript/PowerShell 廃止):
- Windows WMI 直接制御: 輝度取得・設定において PowerShell 呼び出しを完全に廃止し、
windowsクレートを用いた WMI/COM 直接アクセスへ移行。実行速度の向上とセキュリティリスク(スクリプトインジェクション)の排除。 - Windows ブロードキャスト実装: レジストリによるテーマ変更後、
SendMessageTimeoutを用いてWM_SETTINGCHANGEをブロードキャストするよう実装。タスクバー等の他アプリへ変更が即時反映されるようになった。 - macOS Native API 統合:
osascriptコマンドを廃止。輝度制御にはIOKit(IODisplaySetFloatParameter)、アラート表示にはNSAlert、ダークモード判定にはNSUserDefaultsを使用。設定変更にはNSAppleScriptをインメモリ実行することで、プロセス起動オーバーヘッドを削減。
- Windows WMI 直接制御: 輝度取得・設定において PowerShell 呼び出しを完全に廃止し、
- シェーダー演算の最適化:
- CPU 事前計算:
VerticalLouverモードの斜め成分計算で使用していたcos/sin演算を CPU 側(Rust)に移動。毎フレーム、各ピクセルで実行されていた重い trig 関数を uniforms 経由の定数参照に置き換え、GPU 負荷をさらに低減。
- CPU 事前計算:
- Windows 視覚的品質の改善:
- FHD ノート最適化: Windows FHD (150-170 PPI) 向けに
period_mmを 0.20mm に引き下げ。格子の目を微細化することで、スクリーンセーバーのような「格子感」を排除し、均一なベールのような視覚効果を達成。 - DPI Awareness 統合:
SetProcessDpiAwarenessContextを呼び出し、Per-Monitor DPI Aware v2 を有効化。これにより OS による強制スケーリングを回避し、物理ピクセルに基づいた正確なフィルタ描画を実現。 - 格子状パターンの制御:
bidirectionalフラグを導入。低 PPI 環境では視認されやすい千鳥格子を避け、デフォルトで縦縞(Vertical-only)を適用するよう修正。
- FHD ノート最適化: Windows FHD (150-170 PPI) 向けに
- パフォーマンスとシステム負荷の最適化:
- フレームリミッター: イベントループに 60fps 上限のフレームリミッターを実装。無制限なループによる GPU 負荷を抑制。
- 動的描画停止: 静止ディザ(スクロール速度 0)やフィルター OFF 時には
ControlFlow::Waitに切り替え、GPU レンダリングを完全に停止するロジックを実装。 - Windows GPU バックエンド: バックエンドを DX12/DX11 に優先順位付け。Intel 内蔵 GPU 等での安定性と効率を向上。
- システム統合と堅牢性の向上:
- PowerShell ウィンドウの隠蔽: 輝度操作等の PowerShell 呼び出し時に
CREATE_NO_WINDOWフラグと-WindowStyle Hiddenを併用し、黒いコンソール画面が瞬間表示される問題を解決。 - アライメント検証:
Uniforms構造体のサイズ (80bytes) とアライメント (16-byte) をコンパイル時に検証するアサーションを追加。 - 設定の下位互換性:
DisplayConfigの全フィールドに#[serde(default)]を付与。将来のフィールド追加時にも既存の設定ファイルが読み込めるよう耐性を強化。
- PowerShell ウィンドウの隠蔽: 輝度操作等の PowerShell 呼び出し時に
- 内蔵ディスプレイ判定の更なる強化:
SetupAPIを用いた ACPI バス接続判定への移行を検討。 - crabgrab の遅延初期化: 将来の Semantic Privacy 実装に向け、依存関係のロードタイミングを最適化予定。
- OS 設定制御ブリッジ: フィルター形式「ステルス・ダーク」の選択に連動し、OS のダークモード切り替えと輝度自動調整(25%)を行うロジックを実装。OS の元の設定は
OSSettingsSnapshotとしてメモリに保持し、モード解除時またはアプリ終了時に自動復元する。 - ステルス専用フィルター (shader.wgsl):
- LLCC (Low-Luma Contrast Collapse): LCD 向けに、わずかなグレー(ベースグロー)を重畳して黒浮きを意図的に発生させ、斜め方向からのコントラストを消失させる新アルゴリズム。
- UNA (Narrow Aperture Enhancement): OLED 向けに、物理ピクセル配列に最適化した超狭開口部パターンを適用。
- Static UHF Dithering: 1x1 の固定ディザパターンにより、動きを排除しつつ高周波な遮蔽を実現。
- プラットフォーム固有の実装:
- macOS:
osascriptを利用したシステム外観(Dark Mode)と輝度キーコード送信による制御。 - Windows: レジストリ (
AppsUseLightTheme) によるテーマ制御と、PowerShell (WMI) を介した輝度操作を統合。
- macOS:
- UI 統合: トレイメニューに「ステルス・ダーク (LLCC)」を追加。
- macOS 輝度制御の精度: 現在はキーコード送信による擬似的な制御のため、環境によっては 25% への正確な収束が難しい場合がある。将来的に IOKit による直接制御を検討。
- Windows PowerShell のオーバーヘッド: 輝度変更時に PowerShell を呼び出すため、わずかな遅延が発生する。
- 対角線グラデーションの修正:
Uniforms構造体のアライメントを 16 バイト境界(80バイト)に厳密に合わせ、シェーダー内の斜め成分計算にmodulo演算を適用することで、画面全域に発生していた意図しない輝度勾配を解消。 - OCR 妨害の刷新: ユーザーから「縦縞に見える」と指摘された従来のパターンを廃止し、千鳥格子状(Staggered Grid)のマイクロアパーチャ配列を採用。視覚的ストレスを抑えつつ、OCR による文字認識を効果的に妨害する高周波テクスチャへ変更。
- Subpixel UHD Jamming (プロトタイプ): OLED および LCD の各モードにおいて、サブピクセル単位での干渉ロジックを導入。正面からの視認性を維持しつつ、斜めからの遮蔽力を物理ピクセルレベルで強化する戦略を推進。
- UIの改善: メニューのトップレベルにAI検知モードと最適化コマンドを配置。
- 多言語対応 (Bilingual Support): 日本語と英語のバイリンガル対応を強化(OSのロケールに合わせて動的に切り替え)。
- OCR妨害のリファクタリング:
AIOcrInterferenceの内部名称をOcrJammerに変更し、ドキュメントの表記を「OCR妨害」に統一。
- ホットプラグ処理の堅牢化: 新規ディスプレイ接続時に、カテゴリ検出 (
detect_display_category) をオーバーレイ生成より前に行うよう順序を修正。これにより、最初のフレームから適切な PPI ベースのパラメータが適用されるようになった (#1)。 - アニメーション判定の最適化: 毎フレーム行っていた全ディスプレイの走査を廃止。状態変更時(メニュー操作、ホットプラグ、AI 検知)にのみ
calc_needs_animationで再計算し、変数を保持する方式に変更 (#8)。 - 表示変更イベントのバッチ処理: ディスプレイ変更イベントが短時間に連続して発生した場合、プロキシスレッドでこれらをまとめ(デバウンス相当)、1回の
UserEventとしてメインループに通知するように改善 (#3)。 - macOS メインスレッド安全性の向上:
detect_panel_type内で Objc2 API を使用する際、MainThreadMarker::new()を使用して安全にメインスレッドであることを確認するよう修正 (#2)。 - macOS システム情報のパース改善:
system_profilerから取得したディスプレイ ID が 16 進数(例:0x...)の場合でも正しくパースできるように修正 (#6)。 - Windows 内蔵判定のヒューリスティック改善:
INTERNALキーワードに加え、プライマリディスプレイかつ横幅が 2560px 以下の場合をノート PC 内蔵と推定するフォールバックを追加 (#5)。 - セキュリティと安全性:
osascriptでアラートを表示する際、文字列をエスケープするように修正 (#7)。
- macOS クラムシェルモードの制限: クラムシェルモード(ノート PC の蓋を閉じた状態)からの復帰時、座標情報の変化により
position_keyが一致せず、稀に設定がUnknownにリセットされる場合がある。長期的にはdisplay_uuidやシリアル番号ベースの識別に移行を検討 (#4)。 - Windows 実機検証: Windows 固有の
is_internal_displayフォールバックは、実機の多様な環境(特にマルチモニター環境)でのさらなる検証が必要。
- 新戦略の導入: LCD IPS パネルの「斜め方向でコントラストが激減する」という物理特性を積極的に利用。黒い縞で隠すのではなく、微細な輝度変調によって斜めからの判読性を奪うアプローチを採用。
- マルチレイヤー合成シェーダー:
- 輝度圧縮マイクログリッド: 前景/背景の輝度差を圧縮。
- 逆コントラスト斜線ハッチング: 文字エッジのMTFを物理的に破壊。
- 動的位相ノイズ: 8Hz の輝度揺らぎでカメラ等の積分を妨害。
- LCD IPS 最適化: パネル種別が「LCD IPS」の場合、デフォルトの推奨モードとして
LcdContrastJammerが自動選択されるように変更。 - 低輝度低下・高視認性: 従来の黒縞フィルターに比べ、正面ユーザーの感じる画面の暗さを大幅に軽減(alpha 加算を 0.45 以下に抑制)。
- 物理サイズ基準のパラメータ導入: フィルターの周期 (
period) やスクロール速度をピクセル数ではなく物理ミリメートル単位で定義。これにより PPI の異なるディスプレイ間でも視覚的な遮蔽効果を一定に保つことが可能になった。 - ディスプレイカテゴリの自動判定: 内蔵/外付け、解像度、物理サイズから
NotebookFhd,NotebookHiDpi,ExternalLarge4K,ExternalGeneralの4カテゴリを自動判定するロジックを実装。 - プラットフォーム固有の実装:
- macOS:
CGDisplayIsBuiltinでの内蔵判定、CGDisplayScreenSizeでの物理サイズ取得を実装。HiDPI スケーリング時(例: 4K モニターで 3008×1692 設定)でも正しく 4K 相当として判定できるよう、カテゴリ検出の閾値を調整。PPI 計算に用いる解像度が論理値(スケーリング後)であっても、最終的な視覚効果としての物理ミリメートル幅が一致することを確認。 - Windows:
EnumDisplayDevicesでの内蔵判定、GetDeviceCapsでの物理サイズ取得を実装。
- macOS:
- シェーダーの物理サイズ対応:
Uniformsを拡張し、PPI に応じて計算されたピクセル単位のパラメータをシェーダーへ渡すように変更。 - UI 統合: トレイメニューに現在の画面タイプと PPI を表示し、必要に応じて手動でカテゴリを上書きできる機能を追加。
- プロジェクト初期化:
cargo initを実行し、Cargo.tomlにtao,softbuffer,tray-icon,muda,global-hotkey,objc2等の依存関係を追加。 - ディレクトリ構造の作成:
src/直下にapp.rs,display_config.rs,overlay.rs,platform/を作成し、初期ファイルを配置。 - データ構造の実装:
MonitorId,DisplayConfig,AppStateを実装。 - オーバーレイウィンドウの実装:
softbufferを使用した描画ロジックと、objc2を使用した macOS 固有設定(クリック透過、最前面、全スペース表示)を実装。 - ビルド確認:
cargo buildが正常に完了し、実行可能なバイナリが生成されることを確認。
- 単一インスタンス制御:
src/single_instance.rsを実装。macOS ではflock、Windows ではミューテックスを使用。 - トレイ UI:
src/tray.rsを実装。tray-iconとmudaを使用し、グローバルトグル、ディスプレイ別設定、終了メニューを構築。 - ホットプラグ対応: macOS の
NSNotificationCenterを利用して画面構成変更を検知し、オーバーレイウィンドウを動的に追加・削除するロジックを実装。 - グローバルショートカット:
src/hotkey.rsを実装。Cmd+Shift+Pでフィルターのグローバル ON/OFF を切り替え可能に。 - macOS バンドル:
Info.plistを作成し、.appバンドルを生成するスクリプトscripts/bundle_macos.shを用意。LSUIElementを有効にして Dock アイコンを非表示化。 - Makefile:
make mac,make win,make all等のターゲットを持つMakefileを作成し、ビルド工程を自動化。
- Windows 版の検証: 現在の環境が macOS のため、Windows 特有の動作(トレイアイコン、ホットプラグ検知)は未検証。
- アイコン: 現時点では Python で生成したダミーの黒い PNG を使用。製品版では適切なデザインの icns/ico が必要。
- softbuffer の再生成: ホットプラグ時にウィンドウを再作成する際、描画サーフェスも適切に管理する必要がある(現在は都度生成)。
- 設定の永続化:
confyとserdeを導入し、AppConfigを介してAppStateの状態(グローバルON/OFF、濃度、各ディスプレイの設定、自動起動設定)を保存・復元するロジックを実装。 - 濃度変更 UI: トレイメニューに「フィルター濃度」サブメニューを追加し、10%〜90%の間で一括変更できるようにした。
- 自動起動:
auto-launchクレートを使用し、macOS の LaunchAgent への登録・解除をトレイメニューから制御できるように実装。 - macOS Alpha 調整: 今まで固定値だった
setAlphaValueをAppStateの設定値に連動するように修正。
- Windows 版の自動起動:
auto-launchは Windows のレジストリにも対応しているが、実機での動作確認が必要。 - ルーバーパターンの色味: 現在は 1px 黒 : 1px 透明の固定だが、Alpha 設定との兼ね合いで調整が必要になる可能性がある。
- tiny-skia 導入: 描画ロジックの柔軟性を高めるため
tiny-skiaを追加。 - 描画モード追加: 「単色レイヤー」と「縦縞ルーバー」を切り替える
FilterModeを実装。 - ルーバー描画: 1px 黒 : 1px 透明の垂直ストライプを描画するロジックを
overlay.rsに追加。 - トレイメニュー更新: フィルター形式を選択できるサブメニューを追加。設定は永続化される。
- 技術選定:
tract-onnxとnokhwaを採用。Pure Rust に近い構成で軽量な推論環境を構築。 - バックグラウンド検知: 専用スレッドでカメラキャプチャと推論を実行。メインループへの通知には
mpscとUserEventを使用。 - 動的フィルター: 2人以上の顔を検知した際、一時的に Alpha を 0.8 に引き上げるロジックを実装。
- 権限管理:
Info.plistを更新し、macOS でのカメラ・アクセシビリティ権限の説明を追加。
- シェーダーのバグ修正 (shader.wgsl):
Unknownパネルのスクロール速度が極低速(0.2px/s)になっていた問題を修正し、保守的な 300px/s に設定。FastVibrationモードがbidirectionalフラグを無視していた問題を修正。- Rust 側と WGSL 側の
Uniforms構造体のアライメントとフィールド数(パディング)を一致させた。
- イベントループの修正 (main.rs):
Pollモード中にRedrawRequestedとMainEventsClearedで二重に描画が走るバグを修正。
- プライバシー保護効果の強化 (shader.wgsl):
- 輝度漸減レイヤー:
VerticalLouver等の透明部分に薄いグレーを重畳し、斜め方向での輝度差を強調。 - ダブルレイヤー合成:
FastVibrationに第2の干渉レイヤーを追加し、斜め方向でのモアレ(干渉縞)発生を促進。 - エッジブラー効果: 縞の境界に 1.5px のグラデーションを追加し、正面からの視覚的ストレスを軽減しつつ、斜めからの輪郭をボカした。
- Intensity 仕様変更: フィルター強度が「縞の太さ」ではなく「遮蔽率 (30% - 90%)」に直感的に連動するよう計算式を刷新。
- 動的閾値:
AsymmetricCurveの遮蔽率を強度に応じて動的に変化させるよう改善。
- 輝度漸減レイヤー:
- シェーダーの修正 (shader.wgsl):
discardを廃止し、透明色 (vec4(0,0,0,0)) と遮蔽色 (vec4(0,0,0,alpha)) を返すように変更。これによりフィルター濃度設定が正しく機能するようになった。- パネル種別(OLED/LCD)に応じた高速スクロール(300-600px/秒)と位相反転アニメーションを各モードに実装。
bidirectionalフラグを導入し、OLED 等で格子状(四方向)の遮蔽パターンを適用可能にした。
- イベントループの改善 (main.rs):
- アニメーションが必要なモードが有効な際、
ControlFlow::WaitからControlFlow::Pollに自動的に切り替えるロジックを実装。 MainEventsClearedで描画を駆動することで、フレームレートの安定化と滑らかなアニメーションを実現。
- アニメーションが必要なモードが有効な際、
- データ構造の更新 (overlay.rs):
Uniforms構造体にbidirectionalフィールドを追加し、16バイト境界へのアライメント調整(パディング)を実施。
- パネル判定ロジックの実装: macOS (
system_profiler,NSScreenEDR) および Windows (EnumDisplayDevices, モデル名マッチング) におけるパネル種別(OLED/LCD IPS/LCD TN)の自動判定を実装。 - 適応型フィルタ戦略: シェーダー (
shader.wgsl) を更新し、パネル種別に応じた最適化(OLED: 焼き付き防止、LCD IPS: 位相反転アニ メーション、LCD TN: 垂直スクロール)を適用。 - 自動モード切り替え: パネル種別が判定・変更された際、そのパネルに最適な
FilterMode(OLED: 縦縞, IPS: 高速振動, TN: 非対称曲線)を自動的に選択するロジックをAppStateに実装。 - UI 統合: トレイメニューに判定されたパネル種別を表示し、手動での変更・保存を可能にした。
- データ構造の更新:
DisplayConfigにpanel_typeを追加。 - ドキュメント更新: macOS での画面収録パーミッション要求に関する説明を
MANUAL.mdおよび仕様書に追加。
- macOS 安定性の更なる改善:
StealthDarkモード等のシステムテーマ切り替え時に発生していたNSAppleScriptのクラッシュ(nil戻り値の不正なデリファレンス)を修正。msg_send!を使用して安全にnilをハンドリングするように変更。- 権限判定ロジック
has_screen_capture_accessを改善。CGPreflightScreenCaptureAccessの偽陰性(既に許可されているのに false を返す)に対応するため、初回キャプチャ失敗時にCGRequestScreenCaptureAccessで確定的な再試行を行うよう強化。 - 権限警告ダイアログの重複表示を抑制。
- プラットフォーム固有の診断機能:
- 全プラットフォーム共通の
logger!マクロを刷新し、タイムスタンプ付きでログファイルへ出力する機能を実装。 - macOS:
/tmp/softveil.logへ出力。 - Windows:
%TEMP%\softveil.logへ出力。
- 全プラットフォーム共通の
- ベンチマークの堅牢性向上:
- ベンチマークスレッドとメインループ間の通信に 10 秒のタイムアウト処理を追加。メインループのハングやデッドロック発生時でもベンチマークスレッドが安全に継続/終了できるようにした。
- キャプチャ失敗時のエラーハンドリングを強化し、個別のモニターでの失敗がベンチマーク全体を停止させないように改善。
- 警告ゼロのクリーンビルド:
cargo checkおよびcargo build --releaseにおいて、未使用コードの整理を行い警告ゼロを達成。- macOS/Windows 両 OS でのクロスコンパイル成功を確認。
- 指示書 v2.0 に基づく最適化:
NotebookHiDpi:period_mmを 0.50 へ、cover_ratioを 0.55 へ引き上げ、MacBook Air での縞の視認性を改善。NotebookFhd:scroll_speedを 10.0mm/s に設定し OCR 対策を有効化。またbidirectionalを true にし横方向の覗き見保護を強化。HighIntensitySPD(OLED):alpha_baseを 0.88 に下げ、MacBook Pro 等の OLED パネルでの正面視認性を向上。
- アルゴリズムの刷新: 「縞を描く」から「1px の開口部を残して完全黒で塞ぐ」アプローチへ転換。
shader.wgsl:HighIntensitySPD(LCD) において、alpha = 1.0(完全黒) を使用した極小開口パターンを実装。shader.wgsl:min_alpha_ratioを 0.0 (ダークモード) / 0.30 (ライトモード) に調整し、遮蔽部分のコントラストを最大化。
- パラメーター最適化:
display_config.rs: MacBook Air 向けcover_ratioを 0.80、FHD 向けを 0.75 へ引き上げ、斜めからの遮蔽力を劇的に向上。
- 終了メニューの修正:
MENU_ID_QUITのハンドリングが漏れていたため追加。ベンチマーク後も正常に終了可能に。 - 権限判定の堅牢化:
CGPreflightScreenCaptureAccessの偽陰性に対応するため、判定が false の場合でも実際に 1x1 のキャプチャを試行して成功すれば許可済みとみなす「実測ベース」の判定ロジックを導入。不要な警告ダイアログを完全に排除。 - メニュー消失問題の解決: ベンチマーク進捗更新時の
rebuild_menuを停止。ツールチップと通知のみで進捗を知らせることで、メニュー操作中に勝手にメニューが閉じる現象を解消。 - ステルスモードの改善:
set_dark_modeの AppleScript 実行タイミングとエラーハンドリングを見直し。またテスト実行時のハング防止のため、テスト環境下でのシステム設定変更をスキップするよう調整。
- 権限判定の抜本的改善:
CGRequestScreenCaptureAccessを導入し、has_screen_capture_access(プリフライト+実キャプチャ) で失敗した場合のみ呼び出すように変更。これにより、許可済み環境での不要なダイアログを完全に解消。 - ベンチマーク進捗の視覚化: 10% ごとに
rebuild_menuを呼び出すように変更(メニューが閉じる副作用はあるが、進捗の確認を優先)。ただし、ステルスモード切り替え(テーマ変更)による意図しないメニュー閉鎖は防止。 - イベントループの整理: 重複していた
MENU_ID_QUITハンドラを削除し、コードの健全性を向上。 - ステルス・ダークの確実な動作: AppleScript の文字列構築とエラーハンドリングを強化し、macOS でのダークモード切り替えの信頼性を向上。
...
- ドキュメントの同期:
MANUAL.mdおよび仕様書を最新のメニュー構造に合わせて更新。
- グローバルプリセット管理の廃止:
- アイコン直下の「設定プリセット管理」メニューを削除。ユーザーの指摘通り、各モニターごとのサブメニュー内での管理に一本化。
- 個別モニター設定の保存:
- 各モニターのサブメニュー内に「現在の設定を保存...」を追加。これにより、特定のモニターの設定を個別にプリセット化可能に。
- アクティブプリセットの可視化:
- 適用済みのプリセットにチェックマーク(☑️)が表示されるよう改善。
- 1x1 キャプチャテストの堅牢化:
CGDisplayCreateImageForRectを使用し、極小範囲のキャプチャを試行することで、権限チェックの偽陽性(許可されているのに「未許可」と判定される問題)を抑制。
- 非ブロック型権限チェック:
- ベンチマーク開始時の権限チェックで失敗しても、即座にエラーダイアログを出さずに実行を継続。
- 実際のキャプチャに成功した時点で
screen_capture_authorizedフラグを更新し保存するよう変更。これにより、OS側のフラグ反映の遅延による誤作動を完全に解消。
- AI 覗き見防止メニューの親メニュー(サブメニュー)集約:
- トップレベルの肥大化を防ぎUIを整理するため、AI覗き見防止のグローバル設定項目を「AI 覗き見検知 ▶ [現在のステータス]」親メニューに集約。
- 現在のステータスの動的表示:
- 親項目(サブメニュー)のラベルに現在のモード名(
[オフ]、[✓ Vigilance]、[✓ 常時フィルター強化])を動的に表示。これにより、メニューを開く手間を省き、ワンクリック(一目)で有効状態と現在のモードが安心・安全に確認可能となった。
- 親項目(サブメニュー)のラベルに現在のモード名(
- 排他選択 (3択ラジオ形式) の実装:
- サブメニュー内を以下の3つの排他選択項目に統合:
オフVigilance(検知時のみ展開)常時フィルター強化
- サブメニュー内を以下の3つの排他選択項目に統合:
- ドキュメントの同期:
MANUAL.md、Softveil_specs_v1_6.md、Softveil_ToDo_v1_3.mdを最新のメニュー構造と表示文字列に合わせて同期更新。