|
Download docs/guides/multi-instance.md from AUXteam/pinch: direct link, hf CLI and curl.
- Browser
- Download file 4.02 kB
-
https://huggingface.co/spaces/AUXteam/pinch/resolve/main/docs/guides/multi-instance.md
- Command line
-
hf download hf://spaces/AUXteam/pinch/docs/guides/multi-instance.md
-
curl -L -o multi-instance.md https://huggingface.co/spaces/AUXteam/pinch/resolve/main/docs/guides/multi-instance.md
4.02 kB
| # Multi-Instance | |
| PinchTab can run multiple isolated Chrome instances at the same time. Each running instance has its own browser process, port, tabs, and profile-backed state. | |
| ## Mental Model | |
| - a profile is stored browser state on disk | |
| - an instance is a running Chrome process | |
| - one profile can have at most one active managed instance at a time | |
| - tabs belong to an instance, and tab IDs should be treated as opaque values returned by the API | |
| ## Start The Orchestrator | |
| ```bash | |
| pinchtab | |
| ``` | |
| By default the orchestrator listens on `http://localhost:9867`. | |
| ## Start An Instance | |
| Use the explicit instance API when you want predictable multi-instance behavior: | |
| ```bash | |
| curl -X POST http://localhost:9867/instances/start \ | |
| -H "Content-Type: application/json" \ | |
| -d '{"mode":"headed","port":"9999"}' | |
| # CLI Alternative | |
| pinchtab instance start --mode headed --port 9999 | |
| # Response | |
| { | |
| "id": "inst_0a89a5bb", | |
| "profileId": "prof_278be873", | |
| "profileName": "instance-1741410000000", | |
| "port": "9999", | |
| "headless": false, | |
| "status": "starting" | |
| } | |
| ``` | |
| Notes: | |
| - `POST /instances/launch` still exists as a compatibility endpoint, but `POST /instances/start` is the clearer primary form. | |
| - If you omit `profileId`, PinchTab creates a managed instance with an auto-generated profile name. | |
| - Starting an instance is only optional in workflows that use shorthand routes with auto-launch behavior, such as the `simple` strategy. In `explicit`, you should assume you need to start one yourself. | |
| ## Open A Tab In A Specific Instance | |
| ```bash | |
| curl -X POST http://localhost:9867/instances/inst_0a89a5bb/tabs/open \ | |
| -H "Content-Type: application/json" \ | |
| -d '{"url":"https://pinchtab.com"}' | |
| # Response | |
| { | |
| "tabId": "8f9c7d4e1234567890abcdef12345678", | |
| "url": "https://pinchtab.com", | |
| "title": "PinchTab" | |
| } | |
| ``` | |
| For follow-up operations, keep using the returned `tabId`: | |
| ```bash | |
| curl "http://localhost:9867/tabs/<tabId>/snapshot" | |
| curl "http://localhost:9867/tabs/<tabId>/text" | |
| curl "http://localhost:9867/tabs/<tabId>/metrics" | |
| ``` | |
| ## Reuse A Persistent Profile | |
| List existing profiles first: | |
| ```bash | |
| curl http://localhost:9867/profiles | |
| ``` | |
| Then start an instance for a known profile: | |
| ```bash | |
| curl -X POST http://localhost:9867/instances/start \ | |
| -H "Content-Type: application/json" \ | |
| -d '{"profileId":"278be873adeb","mode":"headless"}' | |
| # CLI Alternative | |
| pinchtab instance start --profileId 278be873adeb --mode headless | |
| ``` | |
| Because a profile can have only one active managed instance, starting the same profile again while it is already active returns an error instead of creating a duplicate browser. | |
| ## Monitor Running Instances | |
| ```bash | |
| curl http://localhost:9867/instances | |
| curl http://localhost:9867/instances/inst_0a89a5bb | |
| curl http://localhost:9867/instances/inst_0a89a5bb/tabs | |
| curl http://localhost:9867/instances/metrics | |
| ``` | |
| Useful fields: | |
| - `id`: stable instance identifier | |
| - `profileId` and `profileName`: the profile backing that instance | |
| - `port`: the instance's HTTP port | |
| - `headless`: whether Chrome was launched headless | |
| - `status`: usually `starting`, `running`, `stopping`, or `stopped` | |
| ## Stop An Instance | |
| ```bash | |
| curl -X POST http://localhost:9867/instances/inst_0a89a5bb/stop | |
| # CLI Alternative | |
| pinchtab instance stop inst_0a89a5bb | |
| # Response | |
| { | |
| "id": "inst_0a89a5bb", | |
| "status": "stopped" | |
| } | |
| ``` | |
| Stopping the instance frees its port. If the profile is persistent, its browser state remains on disk. | |
| ## Port Allocation | |
| If you do not pass a port, PinchTab allocates one from the configured range: | |
| ```json | |
| { | |
| "multiInstance": { | |
| "instancePortStart": 9868, | |
| "instancePortEnd": 9968 | |
| } | |
| } | |
| ``` | |
| When an instance stops, its port becomes available for reuse. | |
| ## When To Use Explicit Multi-Instance APIs | |
| Prefer explicit instance APIs when: | |
| - multiple browser sessions must stay isolated | |
| - you want separate headed and headless browsers at the same time | |
| - you need stable profile-to-instance ownership rules | |
| - you are building tooling that should never depend on implicit auto-launch | |