Pinokio は、コンピューター上の AI をローカルにインストール、実行、自動化できるブラウザーです。コマンドラインで実行できるものはすべて、ユーザーフレンドリーな UI を備えたPinokio スクリプトで自動化できます。
Pinokio を使用すると、次のようなあらゆるものを自動化できます。
AI アプリとモデルをインストールする
AI アプリの管理と実行
インストールされた AI アプリを調整するためのワークフローを作成する
任意のコマンドを実行してマシン上の作業を自動化します
さらに...
ピノキオの特別な点は次のとおりです。
ローカル:すべてがローカルにインストールされ、実行されます。あなたのデータは他人のサーバーに保存されません。
無料: Pinokio は、制限なく完全に無料で使用できるオープンソース アプリケーションです。すべてがローカル マシン上で実行されるため、API アクセスに料金を支払う人はいません。永久に無料で、AI と好きなだけ遊んでください。
プライベート: AI を実行するためだけにプライベート データを送信することを心配する必要はありません。すべてが自分のマシン上で 100% プライベートに実行されます。
ユーザーフレンドリーなインターフェイス: Pinokio は、通常ターミナルを使用する必要があるものを実行および自動化するためのユーザーフレンドリーな GUI を提供します。
付属のバッテリー: Pinokio は自己完結型のシステムです。他のプログラムをインストールする必要はありません。 Pinokio は、プログラム/ライブラリのインストールを含むあらゆるものを自動化できます。必要なプログラムは Pinokio だけです。
クロスプラットフォーム: Pinokio はすべてのオペレーティング システム(Windows、Mac、Linux)で動作します。
ストレージとリソースの節約: Pinokio には、数百ギガバイトのディスク領域を節約する最適化機能が多数あります。また、他の多くのリソース最適化機能 (メモリなど) もすべて Pinokio で可能です。
表現力豊かなスクリプト言語: Pinokio スクリプトは、メモリ、動的テンプレート、拡張可能な低レベル API などの機能を備えた強力な自動化スクリプト言語です。
ポータブル:すべてが隔離されたフォルダーに保存され、すべてがファイルとして存在します。つまり、ファイルを削除するだけですべてを簡単にバックアップしたり、アプリを削除したりできます。
Pinokio は、従来のコンピューターの動作方法からインスピレーションを得ています。
コンピュータがその包括的なアーキテクチャのおかげであらゆる種類のことができるのと同じように、仮想コンピュータとしての Pinokio は、AI で想像できるあらゆるものを実行および自動化するための包括的なプラットフォームです。
ファイル システム: Pinokio がファイルを保存する場所と方法。
プロセッサ: pinokio がタスクを実行する方法。
メモリ: pinokio が組み込みのネイティブ メモリを使用してステート マシンを実装する方法。
スクリプト: pinokioを動作させるプログラミング言語。
UI: ユーザーがアプリにアクセスするための UI (ユーザー インターフェイス)。
窓
マック
Linux
以下のすべての手順を必ず実行してください。
Windows 用のダウンロード
ダウンロードしたファイルを解凍すると、.exe インストーラー ファイルが表示されます。
インストーラー ファイルを実行すると、次の Windows 警告が表示されます。
このメッセージは、アプリが Web からダウンロードされたために表示されます。これは、Web からダウンロードされたアプリに対する Windows の動作です。
これを回避するには、
「詳細」をクリックします
次に、 「とにかく実行」をクリックします。
必ずステップ 1 とステップ 2 の両方に従ってください。
Apple Silicon Mac (M1/M2/M3/M4) 用のダウンロード Intel Mac 用のダウンロード
dmg ファイルをダウンロードした後、以下に示すようにパッチを作成する必要があります。
ダウンロードしたDMGインストーラーファイルを実行します
「Pinokio」アプリをアプリケーションフォルダーにドラッグします。
「patch.コマンド」を実行します。
アプリケーション フォルダーで Pinokio アプリを開きます
Linux の場合、Github の最新リリースから直接ダウンロードしてインストールできます (すべてのバイナリについてはページの一番下までスクロールします)。
リリースページに移動
すべての新しい API とアプリの統合を常に把握するには、
X で @cocktailpeanut をフォローすると、リリースされるすべての新しいスクリプトや機能の更新に関する最新情報を入手できます。
Pinokio Discord に参加して質問したり、サポートを受けたりしてください。
Pinokio は、アプリを独立した方法でインストールできる自己完結型のプラットフォームです。
隔離された環境:グローバルなシステム構成や環境が台無しになることを心配する必要はありません。
バッテリー付属:何かをインストールするためだけに必要なプログラム ( ffpeg 、 node.js 、 Visual Studio 、 conda 、 python 、 pipなど) を手動でインストールする必要はありません。 Pinokio が自動的に処理します。
これを実現するために、Pinokio はすべてを 1 つの隔離されたフォルダー (「pinokio ホーム」) に保存します。そのため、システム全体の構成やプログラムに依存する必要はなく、すべてが自己完結型で実行されます。
Pinokio ホームフォルダーは、Pinokio を初めてセットアップするときに設定することも、後で設定タブから新しい場所に変更することもできます。
では、ファイルはどこに保存されているのでしょうか? ホームページから「ファイル」ボタンをクリックします。
これにより、ファイル エクスプローラーで Pinokio のホーム フォルダーが開きます。
各フォルダーの機能を簡単に見てみましょう。
api
: ダウンロードされたすべてのアプリ (スクリプト) を保存します。
このフォルダー内のフォルダーが Pinokio のホームに表示されます。
bin
: 複数のアプリで共有されるグローバルにインストールされたモジュールを保存するため、それらを重複してインストールする必要はありません。
たとえば、 ffmpeg
、 nodejs
、 python
などです。
cache
: 実行するアプリによって自動的にキャッシュされたすべてのファイルを保存します。
何かが動作しない場合は、このフォルダーを削除して新たに起動すると問題が解決する可能性があります。
cache
フォルダーは、アプリの使用を開始すると、使用するアプリによって再設定されるため、削除しても問題ありません。
drive
: fs.link Pinokio API によって作成されたすべての仮想ドライブを保存します
logs
: 各アプリのすべてのログ ファイルを保存します。
ファイルシステムの詳細については、こちらをご覧ください。
git リポジトリのクローンを作成するスクリプトを書いてみましょう。
Pinokio api フォルダーの下にhelloworld
という名前のフォルダーを作成します。
Pinokio api/helloworld
フォルダーの下にgit.json
という名前のファイルを作成します。
{ "run": [{"method": "shell.run","params": { "message": "git clone https://github.com/pinokiocomputer/test"} }] }
Pinokio に戻ると、 helloworld
リポジトリが表示されます。そこに移動し、 git.json
タブをクリックして実行します。
api/helloworld/test
フォルダーが https://github.com/pinokiocomputer/test リポジトリから複製されたことがわかります。
テンプレートを使用して、実行するコマンドとその実行方法を動的に変更することもできます。
例として、Windows ではdir
実行し、Linux と Mac ではls
実行するスクリプトを作成してみましょう。
api/helloworld
フォルダーに、 files.json
という名前のファイルを作成します。
{ "run": [{"method": "shell.run","params": { "message": "{{platform === 'win32' ? 'dir' : 'ls'}}"} }] }
{{ }}
テンプレート式には JavaScript 式が含まれています
すべてのテンプレート式内で使用できる変数がいくつかあり、その 1 つがプラットフォームです。
platform
の値は、 darwin
(mac)、 win32
(windows)、またはlinux
(linux) のいずれかです。
これは、Windows では、上記のスクリプトは次と同等であることを意味します。
{ "run": [{"method": "shell.run","params": { "message": "dir"} }] }
または、Windows (Mac または Linux) ではない場合は、次と同等です。
{ "run": [{"method": "shell.run","params": { "message": "ls"} }] }
テンプレートの詳細については、こちらをご覧ください
Pinokio スクリプトの実行が終了すると、スクリプトを通じて生成されたすべてのシェル セッションが破棄され、関連するすべてのプロセスがシャットダウンされます。
たとえば、http-server を使用してローカル Web サーバーを起動してみましょう。 Pinokio api
フォルダーの下にhttpserver
という名前の新しいフォルダーを作成し、 index.json
という名前の新しいスクリプトを作成します。
{ "run": [{"method": "shell.run","params": { "message": "npx -y http-server"} }] }
その後、Pinokio に戻ると、このアプリがホームページに表示されます。クリックしてサイドバーの「 index.json
タブをクリックすると、このスクリプトが開始され、 npx http-server
使用して Web サーバーが起動されます。
しかし問題は、サーバーを起動した直後にサーバーがすぐにシャットダウンしてしまい、Web サーバーを使用できなくなることです。
これは、Pinokio がrun
配列内のすべてのステップの実行を終了すると、スクリプトに関連付けられたすべてのプロセスを自動的にシャットダウンするためです。
これを回避するには、すべての手順が実行された後でもこのアプリが起動したままになるように Pinokio に指示する必要があります。 daemon
属性を追加するだけです。
{ "デーモン": true, "run": [{"メソッド": "shell.run","params": { "メッセージ": "npx -y http-server"} }] }
ここでスクリプトの開始を再試行すると、Web サーバーが実行を開始し、シャットダウンしていないことがわかります。
Web サーバーは、次のように、現在のフォルダー内のすべてのファイル (この場合は、 index.json
のみ) を提供します。
ページ上部の「停止」ボタンを押すとスクリプトを停止できます。
デーモンモードの詳細については、こちらをご覧ください
1 回のshell.run
呼び出しで複数のコマンドを実行することもできます。
例を試してみましょう。 1 つのスクリプトでドキュメント エンジンのインストール、初期化、起動を行います。
このようなことは、通常の人にとってはアクセスできませんでした (ターミナルでこれらのことを実行する必要があるため) が、Pinokio を使用すると、ワンクリックと同じくらい簡単です。
Pinokio api
フォルダーの下にdocsify
という名前のフォルダーを作成します。
api/docsify
フォルダーの下に、 index.json
という名前のファイルを作成します。 index.json
ファイルは次のようになります。
{ "daemon": true, "run": [{"method": "shell.run","params": { "message": ["npx -y docsify-cli init docs","npx -y docsify- cli サーブドキュメント" ] } }] }
この例では 2 つのことを行います。
docsify ドキュメント プロジェクトを初期化する
docsify 開発サーバーを起動します
Pinokio ターミナルから開発サーバーのリンクをクリックすると、Web ブラウザでドキュメント ページが開きます。
shell.run
API の詳細については、こちらをご覧ください。
Pinokio の一般的な使用例の 1 つは次のとおりです。
venv を作成/アクティブ化する
アクティブ化された venv に依存関係をインストールします。
簡単な例を試してみましょう。この例は、公式 gradio チュートリアルからの最小限の gradio アプリです。
まず、Pinokio のapi
フォルダーの下にgradio_demo
という名前のフォルダーを作成します。
次に、 api/gradio_demo
フォルダーにapp.py
という名前のファイルを作成します。
# app.pyimport gradio as grdefgreet(名前, 強度):return "こんにちは、" + 名前 + "!" * int(intensity)demo = gr.Interface(fn=greet,inputs=["text", "slider"],outputs=["text"], )demo.launch()
次のようなrequirements.txt
ファイルも必要です。
# requirements.txt gradio
最後に、 requirements.txt
ファイルから依存関係をインストールするinstall.json
スクリプトが必要です。
{ "run": [{"method": "shell.run","params": { "venv": "env", "message": "pip install -r required.txt"} }] }
フォルダー構造は次のようになります。
/PINOKIO_HOME /api /gradio_demo app.py requirements.txt install.json
Pinokio に戻ると、 gradio_demo
アプリが表示されます。 UI をクリックしてinstall.json
タブをクリックすると、次のことが行われます。
パスenv
にvenv
フォルダーを作成します
env
環境をアクティブ化する
pip install -r requirements.txt
実行すると、 gradio
依存関係がenv
環境にインストールされます。
インストール プロセスは次のようになります (最後に新しいenv
フォルダーが作成されることに注意してください)。
venv API の詳細については、こちらをご覧ください。
前節からの続きです。
次に、前のセクションのapp.py
から gradio サーバーを起動する簡単なスクリプトを作成しましょう。同じフォルダーにstart.json
という名前のファイルを作成します。
{ "daemon": true, "run": [{"method": "shell.run","params": { "venv": "env", "message": "python app.py"} }] }
Pinokio に戻ると、 start.json
ファイルがサイドバーにも表示されていることがわかります。クリックしてstart.json
スクリプトを開始します。これにより、次のことが行われます。
インストール手順で作成したenv
環境をアクティブ化します。
デーモン モード( daemon: true
) でpython app.py
実行します。これにより、gradio サーバーが起動され、実行され続けます。
次のようになります。
venv API の詳細については、こちらをご覧ください。
Pinokio には、ファイルを簡単かつ確実にダウンロードするためのクロスプラットフォーム API (自動再試行などを含む) があります。
PDF をダウンロードする簡単なスクリプトを書いてみましょう。
まず、Pinokio api
フォルダーの下にdownload
という名前のフォルダーを作成し、次に、 index.json
という名前のファイルを作成します。
{ "run": [{"method": "fs.download","params": { "uri": "https://arxiv.org/pdf/1706.03762.pdf", "dir": "pdf"} }] }
これにより、https://arxiv.org/pdf/1706.03762.pdf にあるファイルがpdf
という名前のフォルダーにダウンロードされます (フォルダーが存在しない場合は、 fs.download
API によってその場所にフォルダーが自動的に作成されます)。以下にその様子を示します。
fs.download
API の詳細については、こちらをご覧ください。
多くの場合、別のスクリプトからスクリプトを呼び出したい場合があります。いくつかの例:
stable diffusion
起動してからllama
起動するオーケストレーション スクリプト。
stable diffusion
開始し、すぐにイメージ生成のリクエストを行い、最後にstable diffusion
サーバーを自動的に停止してリソースを節約するエージェント。
llama
エンドポイントにリクエストを送信し、その応答をstable diffusion
エンドポイントにフィードするエージェント。
これは、 script
API を使用して実現できます。
script.start
: リモート スクリプトを開始します (まだ存在しない場合は、最初にダウンロードします)
script.return
: 現在のスクリプトが子プロセスの場合は、呼び出し側スクリプトの次のステップで使用できる戻り値を指定します。
ここに例を示します。単純なcaller.json
とcallee.json
を作成してみましょう。
caller.json
:
{ "run": [{"method": "script.start","params": { "uri": "callee.json", "params": { "a": 1, "b": 2 } } }, {"メソッド": "ログ","パラメータ": { "json2": "{{input}}"} }] }
最初のステップでは、 caller.json
パラメータ{ "a": 1, "b": 2 }
を使用してcallee.json
を呼び出します。
この params オブジェクトはargs
としてcallee.json
に渡されます。
callee.json
:
{ "run": [{"method": "script.return","params": { "response": "{{args.a + args.b}}"} }] }
callee.json
スクリプトは、 script.return
呼び出しで値{{args.a + args.b}}
をすぐに返します。
最後に、 caller.json
最後のステップlog
呼び出し、値{{input}}
を出力します。これはcallee.json
からの戻り値です。これにより3
出力されます:
最後のセクションでは、同じリポジトリ内からスクリプトを呼び出す方法について説明しました。しかし、他のリポジトリからスクリプトを呼び出したい場合はどうすればよいでしょうか?
script.start
API は、リモート スクリプトをオンザフライでダウンロードして実行することもできます。
Pinokio api
フォルダーの下にremotescript
という名前のフォルダーを作成し、 api/remotescript
の下にinstall.json
という名前のファイルを作成します。
{ "run": [{"method": "script.start","params": { "uri": "https://github.com/cocktailpeanutlabs/moondream2.git/install.js"} }, {"method": "script.start","params": { "uri": "https://github.com/cocktailpeanutlabs/moondream2.git/start.js"} }, {"id": "run","method": "gradio.predict","params": { "uri": "{{kernel.script.local('https://github.com/cocktailpeanutlabs/ Moondream2.git/start.js').url}}", "path": "/answer_question_1", "params": [ { "path": "https://media.timeout.com/images/105795964/750/422/image.jpg" },"ここで何が起こっているのか説明してください" ] } }, {"メソッド": "ログ","パラメータ": { "json2": "{{input}}"} }, {"メソッド": "script.stop","params": { "uri": "https://github.com/cocktailpeanutlabs/moondream2.git/start.js"} }] }
最初のステップでは、スクリプト https://github.com/cocktailpeanutlabs/moondream2.git/install.js を開始します。
moondream2.git
リポジトリが Pinokio にすでに存在する場合、install.js スクリプトが実行されます。
まだ存在しない場合、Pinokio はまずhttps://github.com/cocktailpeanutlabs/moondream2.git
リポジトリのクローンを自動的に作成し、その後 install.js スクリプトを開始します。
インストールが完了したら、https://github.com/cocktailpeanutlabs/moondream2.git/start.js スクリプトを使用して gradio アプリを起動します。このスクリプトは、サーバーが起動した後に返されます。
次に、 gradio.predict
を実行し、 kernel.script.local() API を使用して start.js スクリプトのローカル変数オブジェクトを取得し、そのurl
値 ( moondream2.git/start.js
内でプログラム的に設定されます) を取得します。スクリプト)。
基本的に、このステップは gradio エンドポイントにリクエストを作成し、LLM に「ここで何が起こっているのか説明してください」と要求し、画像を渡します。
次に、 gradio.predict
からの戻り値が、 log
API を使用して端末に記録されます。
最後に、 moondream2/start.js
スクリプトを停止し、 script.stop
API を使用して Moondream gradio サーバーをシャットダウンします。
script.stop
呼び出さない場合、このスクリプトが停止した後でも、moondream2 アプリは実行を続けます。
これは次のようになります。
script.start
実行してからscript.stop
実行する機能は、パーソナル コンピュータで AI を実行する場合に非常に役立ちます。これは、ほとんどのパーソナル コンピュータには無制限のメモリが搭載されておらず、これらの AI エンジンをシャットダウンできないとコンピュータのメモリがすぐに足りなくなってしまうためです。プログラム的に。
script.stop
を使用すると、スクリプトを開始してその応答を取得し、タスクが完了したらすぐにシャットダウンできます。これによりシステム メモリが解放され、後続の他の AI タスクの実行に使用できるようになります。
Pinokio アプリの構造は単純です。
ショートカット: Pinokio ホームに表示されるアプリのショートカット。
app: アプリのメイン UI レイアウト
Shortcut
App
メニュー:実行できるすべてのリンク (およびその実行ステータス) を表示するサイドバー
ウィンドウ: Web ページを表示するビューポート、またはスクリプトを実行する端末
プロジェクトにpinokio.js
ファイルがない場合、デフォルトでは、
ショートカットには、タイトルとしてフォルダー名が表示され、アプリのアイコンとしてデフォルトのアイコンが表示されます。
メニューには、リポジトリ ルートにあるすべての.js
または.json
ファイルが表示されます。
これは始めるには便利ですが、柔軟性が十分ではありません。
メニューバーに何を表示するかを制御することはできません
スクリプトの起動方法を制御することはできません ( params
を渡すなど)。
アプリの表示方法を制御することはできません
アプリのタイトルがフォルダー名になります
説明はありません
アイコンにはデフォルトのアイコンが表示されるだけです。
アプリ自体の動作をカスタマイズするには、 pinokio.js
という名前の UI スクリプトを作成します。
最小限の UI を書いてみましょう。
/PINOKIO_HOME/api
フォルダーにdownloader
という名前のフォルダーを作成します。
任意のアイコンを/PINOKIO_HOME/api/downloader
フォルダーに追加し、 icon.png
という名前を付けます。
/PINOKIO_HOME/api/downloader/download.json
という名前のファイルを作成します
/PINOKIO_HOME/api/downloader/pinokio.js
という名前のファイルを作成します
/PINOKIO_HOME/api/downloader/icon.png
/PINOKIO_HOME/api/downloader/download.json
{ "run": [{"method": "shell.run","params": { "message": "git clone {{input.url}}"} }] }
/PINOKIO_HOME/api/downloader/pinokio.js
module.exports = { タイトル: "何でもダウンロード", 説明: "git リポジトリをダウンロードする", アイコン: "icon.png", menu: [{text: "開始",href: "download.json",params: { url: "https://github.com/cocktailpeanut/dalai"} }]}
最終結果はファイル エクスプローラーで次のように表示されます。
Pinokio に戻って更新すると、アプリが表示されることがわかります。
タイトルにはDownload Anything
と表示されます
説明にDownload a git repository
が表示されます
アイコンは追加したicon.png
です
アプリをクリックすると、次の内容が表示されます。
メニュー項目Start
表示されます。
これをクリックすると、 href
属性で指定されたdownload.json
が実行されます。
また、スクリプトが https://github.com/cocktailpeanut/dalai の値をparams.url
値として渡していることにも注意してください。
download.json
に渡されるparams
input
変数として利用できるため、 git clone {{input.url}}
はgit clone https://github.com/cocktailpeanut/dalai
としてインスタンス化されます。
動作するスクリプト リポジトリを作成したら、任意の git ホスティング サービスに公開して URL を共有すると、誰でもスクリプトをインストールして実行できるようになります。
pinokio スクリプト リポジトリは非常に簡単にインストールできます。
Discover ページの上部にある [URL からダウンロード] ボタンをクリックします。
git URL を入力します (オプションでブランチも指定できます)。
github に公開した場合は、リポジトリに「pinokio」のタグを付けて、Discover ページの「最新」セクションに表示されるようにすることができます。
これで、「最新」セクション (「検出」ページの下部) に自動的に表示されるようになります。
Pinokio は、https://api.github.com/search/repositories?q=topic:pinokio&sort=updated&direction=desc にある GitHub の「/repositories」API から「最新」セクションを自動的に構築します。
したがって、リポジトリに「pinokio」のタグを付けたのに表示されない場合は、API の結果をチェックインして、そこにリポジトリが含まれていない理由を調べてください。
これらすべてがどのように機能するかを理解することは重要ですが、ほとんどの場合、次のような単純な「ランチャー コンボ」が必要になります。
アプリのインストール スクリプト:アプリの依存関係をインストールします。
アプリ起動スクリプト:アプリを起動します。
UI:ランチャー UI を表示します。
リセット スクリプト:何か問題が発生した場合にアプリの状態をリセットします。
更新スクリプト: 1 クリックでアプリを最新バージョンに更新します。
このユースケースは非常に頻繁に必要となるため、これらのスクリプトを即座に自動的に生成するプログラムを実装しました。ゲペトといいます。
多くの場合、各スクリプトに関する詳細情報を共有したい場合があります。そのためにニュースフィードを使用できます。
これを行うには、単にpinokio_meta.json
ファイルを作成し、 posts
配列属性を指定します。各項目は x.com URL です。以下に例を示します。
{ "投稿": ["https://x.com/cocktailpeanut/status/1819482952071323788","https://x.com/cocktailpeanut/status/1819439443394109837","https://x.com/cocktailpeanut/status /1800944955738685648","https://x.com/cocktailpeanut/status/1754244867159413001","https://x.com/cocktailpeanut/status/1729884460114727197","https://x.com/cocktailpeanut/status/1728075 614807048208 」 】 }
実際の動作を見ることができます: https://github.com/cocktailpeanutlabs/comfyui/blob/main/pinokio_meta.json
公開すると、すぐにスクリプトのランディング ページに反映されます。
まずは実際にアプリとそのランチャーを 1 分で生成してみましょう。