Version 0.2.0 — 2026.09.11 作成/2026.09.15 改訂
プライバシーポリシー
★これは草案です。専門家の確認を受けていません。
この文書は、TSUGIME のコードと配布物を実際に調べて書いた草案です。 弁護士・行政書士など専門家のレビューを受けていません。持ち主の承認も済んでいません。 法的な文書としてはまだ不完全で、正式に公開する前に必ず書き直します。 いま読めているのは、書いてある中身を先に確かめてもらうためです。
TSUGIME は「素材が一度もこの PC から出ない」を看板にしています。 看板は自己申告では意味がないので、この頁の数字はすべてコードを検索して数え直したものです。 数え方も一緒に書いておくので、同じ手順でご自身で確かめられます。
先に結論
アプリが外へ出る経路は 2 本しかありません
★「通信を一切しません」とは書きません。嘘になるからです。 2 本あります。どちらも「何かを送る」ためではなく「取りに行く」ためのものですが、 取りに行けば相手のサーバには接続の記録が残ります。そこまで含めて下に書きます。
数え方: grep -rnoE "fetch\(|XMLHttpRequest|https?\.(get|request)\(|sendBeacon" js electron
が拾う 25 か所を 1 つずつ開いて、行き先を確かめました。内訳は
この PC の中向けが 15、説明のためのコメントが 5、
プラグインに禁じている語の一覧が 2、ワーカーが消すグローバル名の一覧が 1、
そして本当に外へ出るのが 2です。詳しくは次の節と、いちばん下の「確かめ方」。
★この数はアプリ(js と electron)のものです。
この公開サイトのお問い合わせフォームは別で、そちらはあなたが押したときに POST します。
何が保存されるかは第 7 節に書きます。
1 本ずつ、どこへ何を送るか
出る 2 本の中身
-
1. 更新の確認と、新しい版の取得
接続先は
https://tsugime.libertysync.com/update.jsonです (electron/updater.cjsの設定に直接書いてあります)。
送るもの: HTTP の GET 要求 1 本だけ。本文はありません。問い合わせの文字列(?…)も付きません。 付ける見出しはuser-agent: TSUGIME、accept-encoding: identity、cache-control: no-cacheの 3 つで、これ以外に何も足していません。 利用者を見分ける番号も、PC の名前も、いま開いている企画の名前も入りません。
版の比較はこの PC の中でやります。「今お使いの版は何か」をサーバへ伝えてから 答えをもらう作りではありません。目録を丸ごと受け取って、手元で比べます。
新しい版があれば exe を落としますが、その取得先は目録と同じホストでなければ受け付けません (_verifyFileEntry。目録だけ書き換えられて別のサーバへ誘導されるのを防ぐため)。 落としたあとは大きさと SHA-256 を照合し、実行する直前にもう一度照合します。
★既定では、起動のたびに自動で確認します(checkOnStart: true)。 ★これを止める項目は、いまの設定画面にありません。止め方は下の箱に書きます。
★ポータブル版も確認だけはします(自分自身を入れ替えられないので、 新しい版があっても手で落としていただく形になります)。 「入れ替えられないから通信もしない」ではないので、書いておきます。
★ブラウザ版にはこの経路がありません(自動更新の仕組みごとデスクトップ版だけのものです)。 -
2. 音声認識モデル(
ggml-*.bin)の取得接続先は
https://huggingface.co/ggerganov/whisper.cpp/resolve/main/です (electron/whisper.cjs)。
送るもの: こちらも GET 1 本だけ。見出しはuser-agent: TSUGIMEとaccept-encoding: identityの 2 つです。音声も、文字起こしも、素材も送りません。 そもそも送る向きの呼び出し(POST / PUT / PATCH)が、アプリ全体で 0 件です。
いつ出るか: 利用者が押したときだけです。画面を開いただけでは通信しません。 押す前に接続先(huggingface.co)と大きさ(tiny 74MB 〜 medium 1.43GB)を必ず表示して、 確認を取ってから出ます。「手元にあるggml-*.binを選ぶ」を選べば、この経路は 1 度も使いません。
★転送(リダイレクト)で別のホストへ回されることは許しています。 配布元が CDN へ回す作りだからです。ただし https から http へ落とす転送には従いません (whisper.cjs。u.protocol !== 'https:'なら断ります)。 中身のすり替えは SHA-256 の照合で止めます。
★ブラウザ版に音声認識はないので、この経路もありません。
★更新の自動確認を止める 2 つの口(軽い方を先に書きます)
どちらも %APPDATA%\TSUGIME\update-config.json を手で書き替えます
(★保存先が別の場所になっていることがあります。第 4 節を見てください)。
軽い方 — "checkOnStart": false にする。起動時の自動確認だけが止まります
(js/launcher.js が この値を見て確認を飛ばします)。
ランチャーの表示は「確認していない」になり、押せば手で確認できます。
重い方 — manifestUrl を空にする。確認そのものをしなくなりますが、
★手で押したときの確認まで塞がります(updater.cjs が
「更新の配り先が設定されていません」で早く戻ります)。
前の版はこの重い方だけを案内していました。軽い方があるのに書いていなかったのは、こちらの落ち度です。
画面から切れるようにするのは今後の課題です。
★3 本目に見えるかもしれないもの(リンク 1 本)
https://aka.ms/vs/17/release/vc_redist.x64.exe(Microsoft Visual C++ 再頒布可能パッケージ)
への案内がアプリの中とサイトの中にあります。これはリンクです。
押すと お使いの既定のブラウザが開いて、そこから先は Microsoft との通信になります。
TSUGIME 自身がこの URL を取りに行くことはありません
(アプリの中で外部サイトを開かせず、外部リンクは必ずブラウザへ渡す作りです)。
経路の数を「2」と書いているのは、この 1 本をアプリの通信として数えていないからです。
数え方を変えれば 3 になります。隠したくないので書いておきます。
★取りに行けば、相手のサーバには記録が残ります
素材を送っていなくても、接続そのものは相手に見えます。
更新の確認では私たちの配布サーバ(tsugime.libertysync.com)に
接続元の IP アドレスと日時が渡ります。モデルの取得では、同じものが
huggingface.co 側へ渡ります(そちらの扱いは向こうのポリシーによります。私たちは関与できません)。
「何も残らない」とは言えないので、そう書きません。
★私たちの側で実際にどう記録されているかは第 6 節に書きます。そこも正直に書くと推測が混じります。
具体的に何を送っていないか
この 2 本には、送る本文がありません
「個人情報は送りません」のような曖昧な言い方ではなく、名前を挙げて書きます。
どちらの経路も GET で、本文(body)が無く、URL も固定です。あなたの中身を乗せる場所がありません。
★「1 バイトも出ていない」とは書きません。user-agent: TSUGIME という名乗りは出ていますし、
接続そのものは相手のログに残ります(前節)。出ていないのはあなたの中身です。
| もの | 外へ送るか | どこで処理しているか |
|---|---|---|
| 動画・音声・画像の素材そのもの | 送りません | この PC の中だけ(読み込みは blob: と手元のファイル) |
| 素材のファイル名・フォルダの場所 | 送りません | この PC の中だけ |
プロジェクト(.tsugime)の中身 | 送りません | この PC の中だけ |
| 文字起こしの本文・字幕・テロップの文言 | 送りません | 音声認識は同梱の whisper.cpp がこの PC で実行します |
| 被写体切り抜きの画像・推論の入出力 | 送りません | 推論エンジンもモデルも同梱。app://local/vendor/ort/ から読みます |
| 書き出したファイル | 送りません | 保存先はあなたが選んだ場所だけ |
| PC に入っている書体の一覧 | 送りません | 候補を作るためにこの PC で読むだけ。★デスクトップ版では許可の窓が出ません
(main.cjs の ALLOWED_PERMISSIONS が local-fonts を無条件に通すため。
ボタンは押しますが、それは「許可を求める」ではありません)。訊くのはブラウザ版だけです |
| 失敗の記録(errors.log) | 送りません | この PC に書くだけ。自動で私たちへ届く仕組みはありません |
| 使った機能・操作の回数 | 数えていません | そもそも数える仕掛けが 1 つもありません |
| 接続元の IP アドレスと日時 | ★上の 2 本で、相手のサーバへ渡ります | 避けられません(前節) |
| お問い合わせフォームにあなたが書いたもの | ★あなたが押したときだけ送られます | アプリではなくサイトの話です(第 7 節) |
ブラウザ版で fetch( を呼んでいる 14 か所は、全部この PC の中向けです
(素材の blob: URL、同梱物の app://local/ 、手元の node server.js のパス)。
外部のホスト名は 1 つも出てきません。外部ライブラリも CDN も外部フォントも使っていません。
この PC の中に、何が残るか
保存されるものと、その置き場所
送らない代わりに、残るものは全部この PC の中に残ります。どこに何があるか書いておきます。 消したくなったとき、自分で消せる方がよいからです。
デスクトップ版 — 保存先フォルダ(ふつうは %APPDATA%\TSUGIME\)
| 置き場所 | 中身 | 量の上限 |
|---|---|---|
recent.json | 最近ひらいた企画のファイルの場所 | 12 件 |
allowed-media.json | 取り込んだ素材ファイルの場所(開き直したときに繋ぎ直すため) | 5,000 件 |
update-config.json | 更新の設定(配り先の URL・起動時に確認するか) | — |
logs\errors.log | 更新などが失敗したときの記録 | 1MB(超えると次の行へ回します) |
logs\errors.log.1 | 回した 1 世代前の記録。★世代はこの 2 本だけで、3 本目は作りません | 1MB(logs\ 全体で約 2MB が頭打ち) |
models\ | 入れた音声認識モデル | medium なら 1.43GB |
updates\ | 落とした更新用の exe | — |
| Chromium の保管庫(下の表の localStorage と IndexedDB の実体) | ★デスクトップ版では、これも同じこのフォルダの中にあります。別の場所ではありません | — |
ログの上限はコードに実測が書いてあります: 1 行あたり平均 845 バイト、1,241 行で 1,048,645 バイト=1MB を超えて
errors.log.1 へ回り、回転後は 204 バイトから再開しました(electron/main.cjs)。
★保存先が %APPDATA%\TSUGIME でないことがあります(消すときに大事)
起動時に、置き先のドライブの空きが 512MB 未満だと、
実行ファイルと同じドライブの <ドライブ>\TSUGIME Data へ退避します
(electron/main.cjs の MIN_FREE。空きが無いと IndexedDB が作れず自動保存ごと死ぬため)。
つまり上の表のフォルダは いつも %APPDATA%\TSUGIME とは限りません。
コード自身が「%APPDATA%\TSUGIME と決め打ちせず、必ず app.getPath('userData') から取る」と戒めている所を、
前の版のこの頁は決め打ちで書き、しかも削除手順として出していました。直しました。
★さらに、このソフトは NOVA CUT という名前でした。初回起動で
%APPDATA%\NOVA CUT と <ドライブ>\NOVA CUT Data を新しい名前へ
rename して引き継ぎますが、失敗しても起動を優先して黙って続けます。
引き継ぎに失敗した環境では、古い名前のフォルダがそのまま残ります。
確実な消し方: アプリのメニューから保存先フォルダを開き、そこを丸ごと削除してください。
★アプリの中に「保存先を表示」の項目が無い場合は、上の 4 か所
(%APPDATA%\TSUGIME、<ドライブ>\TSUGIME Data、
%APPDATA%\NOVA CUT、<ドライブ>\NOVA CUT Data)を順に見てください。
「1 か所だけ消せば終わり」と書けないので、そう書きません。
★失敗の記録は、書く直前に伏せ字を掛けています(伏せ残りもあります)
errors.log に記録を作る経路は 16 か所あります
(writeErrorLog を直接呼ぶ 13 か所と、writeUpdateFailure を呼ぶ 3 か所)。
伏せ字はディスクへ書き込む 1 か所でまとめて掛けています —
main.cjs の writeErrorLog が message / stack / detail の
3 つに redactPersonal を通します。呼ぶ側 1 つ 1 つに任せると、新しく足した人が必ず忘れるからです。
伏せるのは Windows の利用者名(3 文字以上のとき)と 絶対パス
(C:\… / E:/… / \\サーバ\共有)です。
実際に同じ処理へ通してみた結果:
open 'C:\Users\<名前>\AppData\Roaming\TSUGIME\logs\errors.log' →
open 'C:<パス><利用者><パス>'/
open 'E:/素材/2026春_A社_没案.mp4' →
open '<パス>'
★「全部伏せてあります」とは書きません。実測で残るものがあります:
ドライブ文字(C:)は残ります。
利用者名が 2 文字以下のときは伏せません(本文の文字まで潰れてしまうため)。
url の欄には伏せ字を掛けていません(更新の配り先を残さないと原因が追えないためで、意図してそうしています)。
前の版のこの頁は「伏せているのは 1 か所だけ、残る 13 か所はスタックをそのまま書く」と書いていましたが、これは事実と違っていました。
いまのコードは 16 か所すべてに掛かります。数え直して直しました。
★そのうえで、このファイルが自動でどこかへ送られることはありません。 こちらから読む手段もありません。お困りのときは中身をご自身で見て、 必要な部分だけお送りください。
ブラウザの保管庫(デスクトップ版・ブラウザ版とも)
★デスクトップ版では、これは「別の場所」ではありません。 上の表と同じ保存先フォルダの中に、Chromium が作る下位フォルダとして置かれます。 上のフォルダを消せば、これも一緒に消えます。
| 場所 | 中身 |
|---|---|
localStorage(鍵はすべて tsugime. / tsugime: で始まります。コード中に 32 種類) |
画面の配置、色の設定、ショートカット、テロップと書き出しのプリセット、書体のお気に入りなど |
IndexedDB novacut-autosave | 自動保存された編集内容 |
IndexedDB novacut-handles | 素材ファイルの「取っ手」(開き直したとき繋ぎ直すため) |
IndexedDB novacut-proxy | 作った代理ファイル(低解像度の映像) |
IndexedDB novacut-incremental | 書き出しの中間データ |
★アンインストールしても、これらは消えません
Windows の「アプリと機能」から削除しても保存先フォルダは残ります。 作ったものを勝手に消さないための設計ですが、裏返せば「消したつもりで残る」ということです。 完全に消したい場合は、上の箱に書いた場所を手で削除してください。
★ライセンス札(サインインの証)は、まだ実装していません
有料になるのは 1.0.0 からで、いまの 0.x にはアカウントもログインも決済もありません。
1.0.0 では「サーバが署名した短い JSON」を Windows の保護領域(Electron の safeStorage)に
置く予定ですが、まだ 1 行も書いていません。予定を予定として書いています。
実装したら、この頁は書き直します。
見落としやすいので、独立して書きます
共有リンクに入るもの・入らないもの
TSUGIME は編集内容を URL の フラグメント(# より後ろ)に封じ込めて渡せます。
フラグメントはブラウザがサーバへ送らない部分なので、どこにもアップロードされません。
アカウントもサーバも要りません。ただし、リンクを人に渡せば中身も一緒に渡ります。
入るもの
トラックとクリップの構成、エフェクトの設定、マーカー、そして 素材のメタ情報(ファイル名・尺・大きさ)。
入らないもの
素材ファイルの中身(動画・音声・画像のバイト列)。 原理的に URL に載らないので、受け取った側では素材は「オフライン」の空箱として開き、 同じファイルを足した瞬間に自動で繋がります。
★ファイル名が一緒に渡ります
2026春_A社_没案.mp4 のような名前を付けていれば、それも相手に見えます。
リンクを外に出す前に、素材の名前を確かめてください。
こちらでリンクの中身を見ることはできません(どこへも送られていないので、私たちも知りません)。
アプリではなく、この公開サイトの話
このサイトで集まるもの
-
アクセス解析は入れていません
このサイトが外から読み込む JavaScript は
/assets/tsugime.jsの 1 本(2,766 バイト)だけです。中身はメニューの開閉と、 スクロールで本文が出てくる動きだけで、localStorageもdocument.cookieもfetchもsendBeaconも1 つも含んでいません(検索して 0 件)。 ほかに各ページの<head>に 1 行だけ短い script がありますが、 やっているのは「JS が動いている」という印を付けることだけです。 Google Analytics のたぐいも、広告のタグも、SNS のボタンも入れていません。 書体も自前で置いています(外部のフォント配信元へは接続しません)。配信側の Content-Security-Policy は
default-src 'self'を土台に、connect-src 'self'(fetch・XHR・WebSocket)、img-src 'self' data:、font-src 'self'、form-action 'self'、object-src 'none'、frame-src 'none'を並べています(ops/nginx-tsugime.confの 4 か所すべて)。 外部のホストへ繋ぐ・読み込む・送るのどれも塞いであります。
★止めるのはブラウザです。CSP は「サーバがお願いし、ブラウザが守る」仕組みなので、 CSP を見ないブラウザでは効きません。前の版はconnect-src1 つを根拠に 「ブラウザが止めます」と言い切っていましたが、connect-srcが見ているのは 繋ぎに行く通信だけです。読み込みと送信は別の指定が担っています。書き直しました。 -
Cookie を発行しません
そのため「Cookie に同意してください」という帯も出しません。 出す必要が無いからです。同意を取る仕組みを作るより、使わない方が早いと判断しました。
-
web サーバのアクセスログについて(★ここは推測が混じります)
ふつう nginx はページを開くたびに 接続元の IP アドレス・日時・開いたページ・応答の状態・リンク元・ブラウザの名乗りを記録します。 広告にも解析にも使いませんし、他の情報と突き合わせて誰かを特定することもしません。
★根拠を正直に書きます。この製品の nginx 設定(ops/nginx-tsugime.conf)にはaccess_logの行が 1 つもありません(実測 0 件)。 つまり上の段落は「nginx は既定でアクセスログを取る」という一般論に基づく推測であって、 実機で本当に取れているか、どこへ書かれているかはこの製品のファイルからは確かめられません。 ★実機を見て確かめ、ここを書き直すのは持ち主の仕事です。
★保存期間も未定です。設定に保存期間の指定が無く、「何日で消える」と言い切れる状態にありません。 決まっていないことを「90 日」などと書くわけにはいかないので、空けてあります。 ★持ち主が決め次第、ここに日数を書きます。 -
配布物のダウンロードも、同じログに残ります
exe を落とすと、どのファイルをいつ落としたかがアクセスログに残ります(上と同じ推測の上に立っています)。 誰が落としたかを知る手段はありません — アカウントも、メールの登録も、 ダウンロード前の入力欄も無いためです。 (このため「落とした人にお知らせを送る」ということも、私たちにはできません。)
フォームは、もうあります
お問い合わせでいただいた内容の扱い
お問い合わせの頁にフォームがあります。受け口も自前です
(ops/contact-receiver.mjs)。外部のフォーム作成サービスは使っていません。
「素材が外に出ない」を看板にしながら問い合わせ欄だけ他社に流すのは筋が通らないので、そう決めました。
★前の版のこの頁は「フォームはこれから作ります」「いま使えるのはメールだけ」と書いていました。事実と違っていたので直しました。
フォームから保存されるもの(全部で 9 つ)
| 保存する欄 | 中身 | 必須か/上限 |
|---|---|---|
kind | お問い合わせの種類(不具合/使い方/購入前/法人・教育/その他) | 任意・40 字 |
name | お名前 | 任意・120 字 |
org | 会社名・学校名 | 任意・200 字 |
email | 返信先のメールアドレス | 必須・200 字 |
message | お問い合わせの本文 | 必須・4,000 字 |
env | お使いの環境(例: Windows 11 / インストーラ版 0.2.0) | 任意・500 字 |
at | 受け付けた時刻 | 自動 |
送信元 | ★IP そのものではありません。塩を付けた SHA-256 の先頭 16 桁だけ | 自動 |
id | 受付番号(ランダムな UUID) | 自動 |
欄の一覧は ops/contact-receiver.mjs の
FIELDS = ['kind','name','org','email','message','env'] です。
★ここに無い名前で送られてきたものは捨てます(知らないものを保存しない作りです)。
住所・電話番号・生年月日は求めません。欄がないので、入れようがありません。
★平文で保存します。暗号化していません
いただいた内容は、私たちのサーバのファイル
(/var/lib/tsugime-contact/inquiries.jsonl)へ
1 通 1 行の平文で追記されます。暗号化していません。ファイルの権限は所有者だけが読める形(0600)にしていますが、
それは暗号化ではありません。
★ですから パスワード・カード番号・そのほか人に見られて困ることは書かないでください。
同じことをフォームの頁にも書いています。
★送信元の IP アドレスは、そのままでは残しません
「同じ相手からの連続送信か」を数えるためだけに、
塩を足した SHA-256 の先頭 16 桁に変えたものを持ちます(伏せる())。
塩は受け口が起動するたびに作り直す乱数なので、
受け口を再起動すると、同じ相手かどうかも分からなくなります。
他所の記録と突き合わせることもできません。
★正直に書くと、これは「絶対に戻せない」ではありません。塩を知っている者が
候補の IP を総当たりすれば照合はできます。塩を捨てれば戻せなくなる、という強さです。
★送られてくるけれど、保存しないもの
機械よけのために、フォームには画面に出ない欄と書き始めからの時間が入っています。 どちらも保存しません(上の 6 欄に入っていないので捨てられます)。 あわせて、同じ相手からの受け付けに 20 秒の間隔と 1 時間 10 通の上限、 1 通あたり 8KB の上限を掛けています。この数えかけの記録はメモリの上だけで、 ディスクには書きません(受け口を再起動すると消えます)。
| 決めたこと | |
|---|---|
| 何に使うか | そのお問い合わせへのお返事と、不具合の修正だけに使います。 営業の連絡には使いません。ご案内の一斉送信にも使いません。 |
| 誰が見るか | 合同会社 Liberty Sync Holdings の中で、問い合わせ対応を担当する者だけ。
外注先・業務委託先には渡しません。 ★社内の管理システム(LSHCORE)が読みに来ます。ただし こちらから送る作りにはしていません。向こうが合言葉を付けて取りに来る、読み取りだけの一方通行です (合言葉が設定されていなければ、その口は閉じています)。公開のフォームに管理システムの鍵を置かないためです。 |
| 第三者に渡すか | 渡しません。売りません。広告にも使いません。 例外は法令に基づく開示の求めがあったときだけです。 |
| いつまで持つか | ★未定です。受け口のコードには消す仕組みも期限も 1 行もありません (追記だけのファイルです)。放っておけばずっと残ります。 ★何日で消すかは持ち主が決めることなので、決まるまで日数を書きません。 前の版は「最後のやり取りから 1 年」と書いていましたが、それは決まりではありませんでした。取り下げます。 |
| 消してほしいとき | info@libertysync.com へ「消してください」とお送りください。
内容の確認・訂正・利用の停止も同じ窓口で承ります。 ★自動で消す仕掛けはまだ無いので、人が手で消します。そう書いておきます。 |
★フォームが受け口まで繋がっているか、ここからは確かめられません
フォームは /api/contact へ送ります。ところが、この製品の nginx 設定
(ops/nginx-tsugime.conf)には /api/contact を受け口へ渡す行が 1 つもありません(実測 0 件)。
実機で足してあるのかどうかは、この製品のファイルからは分かりません。
繋がっていなければフォームは 404 になり、何も保存されません。
★どちらであっても、メール(info@libertysync.com)は届きます。
フォームの頁にメールアドレスを必ず併記しているのは、このためです。
★受け口が繋がっているかを確かめてここを書き直すのは、持ち主の仕事です。
★メールでいただいた分の扱いは、まだ書けていません
メールは上のファイルではなく、ふつうの受信箱に届きます。 どの事業者の受信箱を使っているかを、この頁にまだ書いていません。 ★これは調べて書けるものではなく持ち主に確かめないと書けないので、 埋まっていないことが分かる形で空けてあります。保存期間も同じく未定です。
いま無いものは「無い」と書きます
1.0.0 で増えること
有料になるのは 1.0.0 からです。そのときアカウントと決済が入るので、 この頁は必ず書き直します。いま先回りして「取得します」と書くと、 今この瞬間の事実と食い違うので書きません。
いま(0.2.0)
アカウントも決済もありません
ログインの画面がありません。メールアドレスを集める欄もありません。 誰が使っているかを、私たちは知りません。
1.0.0 から
アカウントと決済が増えます
サインインのためのメールアドレス、契約の状態、決済の記録(決済そのものは 決済代行の事業者が扱い、カード番号は私たちに届きません)。 ★増えるときに、この頁へ具体的に書き足します。
★2026-09-15 に決めた 2 つ(未定と書いていたところです)
★この 2 つは、いままでこの頁に「決まっていません」と書いていたところです。 決まったので、何をどう扱うのかを先に書きます。 ★どちらもいまダウンロードできる 0.2.0(2026-09-10 に作ったもの)には入っていません。 1.0.0 から動きます。
1. 端末をどう見分けるか → 決めました。 料金の頁は両プランに「サインインは 2 台まで/同時に使えるのは 1 台」と書いています。 2 台までを数えるには、端末を見分ける値が要ります。こうします:
-
何から作るか
Windows では、OS が持っている MachineGuid(レジストリの
HKLM\SOFTWARE\Microsoft\Cryptography)を読み、 決まった文字列を足して SHA-256 で 64 文字に潰します。 それが読めない環境(権限を絞った Windows・Windows 以外)では、 OS の種類・CPU の種類・コンピューター名・ログイン名から同じように 64 文字を作ります。 ★後者は弱いです。コンピューター名を変えれば別の端末になります。隠しません。 -
★送られるのは、その 64 文字だけです
MachineGuid そのもの・コンピューター名・ログイン名は送りません。 送る前に潰しているので、受け取った側でも元に戻すことはできません。
-
★送り先は私たちのサーバだけです
もし途中で別の場所へ回されたときは、この値とライセンス鍵を落として送ります。 そうなっているかを、ソフトが起動のたびに自分で確かめます。
-
★入れ直しても、設定を消しても、同じ値のままです
「体験版を取り直すために消す」を防ぐために、わざとそうしています。 この PC を買い替えたときは別の値になります。
2. 体験版 14 日を、何で数えるか → 決めました。私たちのサーバで数えます。
お申し込みのとき、メールアドレスをそのままの形では保存しません。
SHA-256 で潰した値と、伏せ字にしたもの(例: t****@example.com)を置きます。
期限の終わりもサーバに置きます。
★だから、この PC のファイルを消しても 14 日は延びません。
ただし別のメールアドレスにすれば、また取得できてしまいます。そこは塞げていません。
★1.0.0 でも素材・プロジェクト・文字起こしを外へ送る予定はありません。 サインインの仕組みも、アプリに待ち受けを作らずに済む形(コードを表示してブラウザで許可する方式)を選んでいます。 「外へ出る経路が 2 本しかない」という看板と矛盾させないためです。
誰が責任を負うか
事業者の情報
| 名称 | 合同会社 Liberty Sync Holdings |
| 法人番号 | 7160003003143 |
| お問い合わせ先 | info@libertysync.com / お問い合わせフォーム |
| 所在地 | ★未定(この頁を正式版にするまでに必ず埋めます) |
| 代表者名 | ★未定(同上) |
| 個人情報の取り扱いに関する責任者 | ★未定(代表者名が決まってから決めます) |
★空欄を黙って省いていません
所在地と代表者名は、こちらで調べて埋められるものではありません。持ち主にしか書けません。
行を消して見えなくすることもできますが、それは「無い」ことを隠す書き方です。
この頁は、埋まっていないことが読む人に分かる形で出します。
★この 3 行が埋まるまで、この頁は「正式版」と名乗りません。
前の版は「埋まるまで公開しません」と書いていましたが、
この頁は既に組まれていて、全 7 頁の下の帯からリンクされています。
書いてあることと site の実際の状態が食い違っていたので、直しました。
★出したまま直すと決めたので、いちばん上と下の帯の「これは草案です」は外しません。
★特定商取引法に基づく表記は、まだ公開していません。 必要な 6 項目のうち 5 つ(所在地・代表者名・支払方法・支払時期・引渡し時期)が未定だからです。 空欄のまま出すと違反になるので、揃うまで頁ごと出さないことにしています (リンクも出していません)。
信じてくださいとは言いません
この頁の主張を、ご自身で数え直せます
ソースを手元に取れば、同じ数え方ができます。 数が合わなかったら、それは私たちの落ち度です。お知らせください。
# 通信らしきものを全部拾う(25 か所出ます)
grep -rnoE "fetch\(|XMLHttpRequest|https?\.(get|request)\(|sendBeacon" js electron
# 外部のホスト名を数える(9 種類出ます)
grep -rhoE "https://[A-Za-z0-9._-]+" js electron | sort | uniq -c
# アプリから送る向きの呼び出しがあるか(0 件です)
grep -rnE "method:\s*'(POST|PUT|PATCH)'" js electron
# アクセス解析のたぐいがあるか
# (2 件出ます。1 件は plugin-api.js の説明コメント、
# もう 1 件は同じファイルの「プラグインに禁じている語の一覧」。仕掛けは 0 件)
grep -rniE "analytics|telemetry|gtag|sentry|sendBeacon" js electron
# 本当に外へ出る 2 本だけを見る
grep -rnE "https\.get\(" js electron
# 問い合わせで保存する欄(第 7 節の 6 欄。残る 3 つは受け口が自動で足します)
grep -n "FIELDS = " ops/contact-receiver.mjs
# この製品の nginx 設定にアクセスログの指定があるか(0 件です。第 6 節)
grep -c "access_log" ops/nginx-tsugime.conf
| 1 つめの grep が拾う 25 か所の内訳 | 件数 | 中身 |
|---|---|---|
| この PC の中向け | 15 | js/ の 14 か所(素材の blob: URL・同梱物・手元のパス)と、
electron/main.cjs:3045 の自己診断(app://local/ を叩いて確かめるだけ) |
| 説明のためのコメント | 5 | updater.cjs:985(なぜ fetch を使わないか)、
main.cjs:464(app:// を fetch() で読めるようにする設定の説明)、
plugin-api.js:45 と :106(禁じる語をなぜ置くかの説明。:106 は 1 行に 2 つ)。
いずれも呼び出しではありません |
| プラグインに禁じている語の一覧 | 2 | js/plugin-api.js:117 の BANNED_TOKENS。プラグインの中に
fetch / XMLHttpRequest / WebSocket /
EventSource / sendBeacon があれば読み込み自体を断ります |
| ワーカーが消すグローバル名の一覧 | 1 | js/plugin-api.js:569 の harden()。
プラグインを読み込む前に、これらの名前をプロトタイプごと消します |
| 本当に外へ出るもの | 2 | updater.cjs:1011(更新)と whisper.cjs:756(認識モデル)の
https.get。この頁の 2 本です |
★前の版はこの表で 「コメント 2/禁止語の一覧 6」と書いていました。 総数 25・外へ出る 2・POST 0・ホスト 9 種類はどれも合っていましたが、 名札の付け方が間違っていました。数え直して直しました。 自分で数え直せると言っている表なので、ここがずれると全部が安くなります。
2 つめの grep で出てくるホスト名は 9 種類です。全部の内訳:
huggingface.co(モデルの取得・実際に接続/6 回)、
tsugime.libertysync.com(更新・実際に接続/4 回)、
aka.ms(Microsoft へのリンク。既定のブラウザが開きます/2 回)、
tech.ebu.ch(放送規格 EBU R103 の原典を示すコメント。取りに行きません/1 回)、
そして a.test / A.test / b.test /
example.com / dist.example.com の 5 つは
自己診断の中の作り物です(規格で「試験にだけ使う」と決められている名前で、実在しません)。
この頁を変えるとき
内容を変えたときは、いつ何を変えたかを書き残します。 黙って書き換えて「最初からそう書いてありました」という顔をするのは、 できないことの頁を自分から持っている製品のやることではありません。
| 日 | 直したこと |
|---|---|
| 2026.09.11 | 作成(★草案・未承認)。対象: TSUGIME 0.2.0 |
| 2026.09.11 | 同日に読み直して、事実と違っていた所を直しました:
① 問い合わせフォームはもう存在する(第 7 節を全面的に書き直し。保存する 9 つ・平文の JSONL・IP の伏せ方・保存期間は未定)。
② errors.log の伏せ字は16 か所すべてに掛かる(「1 か所だけ」は誤り)。
③ 保存先は %APPDATA%\TSUGIME とは限らない(削除手順を直しました)。
④ 書体の一覧はデスクトップ版では許可の窓が出ない。
⑤ 「確かめ方」の表の名札(コメント 2/禁止語 6 → コメント 5/禁止語 2/消す名前 1)。
⑥ 更新の自動確認は checkOnStart: false でも止まる。
⑦ 言い過ぎを 4 か所(「1 バイトも」「経路が 2 本という事実」「ブラウザが止めます」「埋まるまで公開しません」)。
⑧ 書き足し: ログの上限、保管庫の実体の場所、アクセスログの根拠が推測であること、1.0.0 の端末識別子と体験版の期限が未定であること。 |
| 2026.09.15 | ★「未定」と書いていた 2 つを決めたので、決めた中身を書きました: ① 端末の見分け方 ── Windows の MachineGuid を SHA-256 で 64 文字に潰した値。 送るのはその 64 文字だけで、元の値・コンピューター名・ログイン名は送らない。 ② 体験版 14 日の数え方 ── 私たちのサーバで数える。 メールアドレスはそのままの形では保存せず、SHA-256 と伏せ字だけを置く。 ★どちらもいま配っている 0.2.0(2026-09-10 に作ったもの)には入っていません。 1.0.0 から動きます。 |
この頁の数字は、2026 年 9 月 11 日にこの製品のコードを検索して数えたものです。 ★伏せ字の実測(第 4 節)は、コードと同じ処理に同じ文字列を通して出た結果です。
送らない、を経路の数で守っています。
約束ではなく、アプリが外へ出る呼び出しが 2 本しかないという実測です。
★そのうえで言い切らないことが 2 つあります。2 本目は転送で別のホストへ回されえますので、
どこへ繋がるかまで全部こちらが決めているとは言えません(中身は SHA-256 の照合で守っています)。
そして接続そのものは相手のログに残ります。
ここに書いていない通信が見つかったら、それは私たちの落ち度です。