仕組み
Morphifexは4つの部品でできています。ブラウザーの画面、手元で動くサーバー、Ollama、そして保存先のSQLiteです。どこまでが自分の端末の中で完結するかを、ここで確認できます。
4つの部品
| ブラウザーの画面 | 作成条件を選び、結果を見るところ。Reactで書かれています。表示と操作だけを担当し、生成そのものは行いません。 |
|---|---|
| 手元のサーバー | Node.jsで動く本体。画面からの依頼を受け、指示を組み立ててOllamaへ渡し、返ってきたコードを検査して保存します。 |
| Ollama | モデルを動かす側。MorphifexはOllamaのHTTP APIを呼ぶだけで、モデル本体を持ちません。既定の接続先はhttp://localhost:11434です。 |
| SQLite | 保存先。作品、生成履歴、設定、計測結果をすべて1つのファイルへ入れます。 |
依頼が流れる順番
- 画面 → 手元のサーバー
選んだ題材、モデル、仕上がりの条件が送られます。
- サーバーが指示を組み立てる
作品の種類ごとに決まった指示文と、利用者が選んだ条件を合わせます。Ollamaへ明示する生成オプションは
num_ctx(コンテキスト長)だけで、温度や乱数の種は指定しません。既定はどの種類も32,768です。作成画面の「コンテキスト長」から変更でき、変えた値はその種類だけに残ります。出力がこの長さに達すると途中で打ち切られるため、そのときは画面がコンテキスト長不足だとお知らせします。 - サーバー → Ollama
1つのモデルへ1件ずつ依頼します。返答は届いたところから順に画面へ流れ、進み具合が見えます。
- 検査して保存
返ってきたSVGやHTMLを安全確認にかけ、通ったものだけをSQLiteへ保存します。
どこまで出ていくのか
Morphifexが送るのは、作品を作るための指示だけです。テーマと追加の希望、生成設定、互換機能で参照画像を使う場合はその一時画像が該当します。送り先は設定したOllamaの接続先で、そこより先へ出す経路をMorphifexは持っていません。
- Ollama URLを
localhostのままにしていれば、通信は自分の端末の中で完結します。 - 別PCやRunPodのURLを設定した場合は、その接続先まではネットワークを通ります。接続先の管理は利用者側の責任です。
- 参照画像は生成リクエストの間だけメモリ上で扱い、SQLite、生成履歴、サーバーログへ保存しません。
- ブログサムネイルの記事タイトルと補足は、ブラウザー側で文字を組むためOllamaへ送りません。
同時に1件しか動かない理由
モデルはVRAMを占有するので、2つ同時に載せると入りきらないか、どちらも遅くなるためです。Morphifexはサーバー全体で同時に1件だけ作業を持ちます。モデルを比べるときも、まとめて生成するときも、1件ずつ順番に処理します。どれだけのVRAMが要るかは動かすモデル次第で、実測はモデルと速度の目安にあります。
作業中に別の生成を頼むと、サーバーは受け付けずに断ります。実行中の作業は画面上部のバーに常に表示され、そこから作業画面へ戻ることも、停止することもできます。生成はサーバー側で進むので、画面を離れても止まりません。
サーバーを再起動したときは、起動時に実行中だった記録を「中断」「停止」へ書き換えます。完了済みの部分と残りの試行回数は残るので、続きから再開できます。
保存先は1つ
保存先はMorphifexフォルダー直下のdata/app.sqliteだけです。作品、生成履歴、SVG、WebゲームのHTML、アプリの設定は、すべてこのファイルが正本になります。PNGはファイルとして持たず、必要になったときに作ります。今後ファイルが増える場合も、data/の中だけに置きます。
SQLiteはWALモードで、外部キーを有効にして動かします。退避と復元の手順はバックアップを参照してください。
このファイルの外に残るものもあります。ブラウザーのテーマ、サイドバーの開閉、接続先ごとに選んだモデルはブラウザー側の保存で、書き出したSVGやPNGは利用者が置いた場所にあります。どちらもバックアップの対象外です。
オフライン方針
Morphifexは、次のものを使わない前提で作っています。
- アプリ固有のクラウドAPI
- CDNから読み込むスクリプトやスタイル
- 外部フォント
- テレメトリ(利用状況の送信)
- 起動時の更新確認
ログインやユーザー管理も実装していません。単一の利用者が手元で動かすローカルアプリです。表示は日本語のみです。
ポートと待ち受け
| 通常起動 | 画面、API、ヘルプをすべて3030番から配ります。ブラウザーでhttp://localhost:3030/を開きます。 |
|---|---|
| 開発モード | 画面が5194番、APIが3030番に分かれます。 |
| 待ち受けホスト | 既定は0.0.0.0で、同じLAN内の端末からも開けます。HOST=127.0.0.1にすると、その端末だけに限定できます。 |
| ポートの変更 | 環境変数PORT、API_PORT、WEB_PORTで変えられます。 |