Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
62 changes: 38 additions & 24 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -22,21 +22,29 @@

## See it working first

Before setup, this sample n8n configuration shows GPT-5.6 model aliases in the
OpenAI Chat Model selector. The exact model list depends on the signed-in
ChatGPT account and can change over time.
This documented example follows a tested n8n OpenAI credential through a
published Telegram-triggered workflow. It is a product-operation record, not
an endorsement, sponsorship, or affiliation by OpenAI, n8n, Hostinger,
Telegram, or AppBuildersPH.

<figure>
<img src="docs/images/examples/gpt-56-model-selector.png" alt="Model selector listing GPT-5.6 Sol, Luna, and Terra model aliases" width="480">
<figcaption>Compatibility preview: the model selector includes <code>gpt-5.6-sol</code>, <code>gpt-5.6-luna</code>, and <code>gpt-5.6-terra</code>.</figcaption>
<img src="docs/images/examples/n8n-openai-credential-connected.png" alt="n8n OpenAI credential dialog showing that the connection test succeeded" width="960">
<figcaption>The n8n OpenAI credential connection test succeeded; the credential value itself is obscured.</figcaption>
</figure>

After Relmio completes the installation, Docker shows the existing n8n stack
and the new private OAuth sidecar running together.
<figure>
<img src="docs/images/examples/gpt-56-model-selector.png" alt="n8n model selector with gpt-5.6-terra selected and an account-specific model list" width="500">
<figcaption>This signed-in account's n8n model list includes <code>gpt-5.6-terra</code>; model availability is account-dependent and can change.</figcaption>
</figure>

<figure>
<img src="docs/images/examples/sidecar-docker-containers-running.png" alt="Docker Desktop showing the n8n and n8n-openai-oauth containers running" width="960">
<figcaption>Completed setup: the existing <code>n8n</code> stack and the <code>n8n-openai-oauth</code> sidecar are both running.</figcaption>
<img src="docs/images/examples/telegram-n8n-workflow-execution.png" alt="Successful n8n execution of a Telegram-triggered workflow with HTTP Request, Basic LLM Chain, and AI Agent branches" width="960">
<figcaption>The published Telegram-triggered n8n workflow completed successfully across its HTTP Request, Basic LLM Chain, and AI Agent branches.</figcaption>
</figure>

<figure>
<img src="docs/images/examples/telegram-model-results.png" alt="Telegram conversation receiving HTTP Request, Basic LLM Chain, and AI Agent outputs" width="682">
<figcaption>Telegram received the HTTP Request, Basic LLM Chain, and AI Agent outputs sent by that workflow.</figcaption>
</figure>

## Quick install
Expand Down Expand Up @@ -380,7 +388,13 @@ you want to inspect, reproduce, improve, or debug the method, use
Do **not** run an installer command on the VPS. Run it on the computer where
you will complete the browser sign-in.

### 1. Start the newest published wizard
### 1. Choose an installation method in the hosted wizard

The hosted installation page starts with a selector for macOS/Linux,
Homebrew, PowerShell, Command Prompt, and NPX. Choose the terminal already
installed on your computer, then run the displayed command locally.

![Step 1: hosted installation method selector](docs/images/setup/00-install-methods.png)

Choose a terminal already installed on your computer.

Expand Down Expand Up @@ -452,9 +466,10 @@ npm view relmio version
```

> [!NOTE]
> Every wizard screenshot below comes from the built-in sanitized preview. It
> uses a reserved documentation IP, fake fingerprint, fake container data, and
> fake models. No real VPS, credential, or browser session is shown.
> These current product screenshots omit or redact sensitive values. In
> particular, the VPS identity screen redacts the address and SSH fingerprint;
> none of the screenshots includes an OAuth token, password, private key, or
> live wizard session URL.

### 2. Complete or reuse the local ChatGPT sign-in

Expand All @@ -469,11 +484,10 @@ credential already exists, **Continue to VPS** reuses it. Use **Refresh
ChatGPT sign-in** when it is expired, belongs to another account, or you want
a new session.

After a fresh login, check the **Credential updated** timestamp. It is shown
in your computer's local time so you can tell that the browser approval
actually reached the wizard.
After a fresh login, the browser confirmation states that the ChatGPT
credentials were saved locally; return to the terminal to continue.

![Step 1: local ChatGPT credential found with its update timestamp](docs/images/setup/01-local-sign-in-ready.png)
![Step 2: local ChatGPT sign-in completion confirmation](docs/images/setup/01-local-sign-in-ready.png)

If a browser extension named **Sign in with ChatGPT** or **OpenAI OAuth**
captures the callback, temporarily disable that extension and start the
Expand All @@ -486,19 +500,19 @@ Enter the VPS address exactly as your provider shows it. Select **Check server
identity**, compare the SHA-256 fingerprint with the intended server, and
confirm it before the password field unlocks.

![Step 2: sanitized VPS address and SSH fingerprint confirmation](docs/images/setup/02-vps-identity-confirmed.png)
![Step 3: VPS identity confirmation with the address and SSH fingerprint redacted](docs/images/setup/02-vps-identity-confirmed.png)

The screenshot uses the reserved documentation address `192.0.2.10`, a fake
fingerprint, and an empty password field. Never publish a real password,
private key, session URL, or OAuth file.
The screenshot redacts the VPS address and SSH fingerprint and obscures the
password field. Never publish a real password, private key, session URL, or
OAuth file.

### 4. Choose the detected n8n container and shared network

The wizard connects over SSH, runs read-only Docker discovery, and lists the
running n8n container and its networks. Choose the network that n8n should
share with the sidecar; on many Hostinger templates it is named `proxy`.

![Step 3: sanitized n8n container and Docker network discovery](docs/images/setup/03-n8n-detected.png)
![Step 4: detected n8n container and shared Docker network](docs/images/setup/03-n8n-detected.png)

### 5. Review and approve the exact plan

Expand All @@ -507,7 +521,7 @@ managed directory, service, Docker network, and private hostname. It also
states the forbidden actions: no n8n edit, rebuild, restart, or recreation;
no host port; and no Traefik route.

![Step 4: exact sidecar-only installation plan](docs/images/setup/04-install-plan.png)
![Step 5: exact sidecar-only installation plan](docs/images/setup/04-install-plan.png)

Only after you select the approval checkbox can the wizard upload the OAuth
file and build the separate sidecar.
Expand All @@ -517,7 +531,7 @@ file and build the separate sidecar.
The final screen appears only after the sidecar is healthy, the model list is
reachable, and Docker reports no published host port.

![Step 5: verified private bridge and n8n credential values](docs/images/setup/05-bridge-ready.png)
![Step 6: verified private bridge and n8n credential values](docs/images/setup/05-bridge-ready.png)

Use the button beside each value to copy it individually, or select
**Copy credential settings** for the labeled credential set. Then create or
Expand Down
Binary file modified docs/images/examples/gpt-56-model-selector.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added docs/images/examples/telegram-model-results.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added docs/images/setup/00-install-methods.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified docs/images/setup/01-local-sign-in-ready.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified docs/images/setup/02-vps-identity-confirmed.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified docs/images/setup/03-n8n-detected.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified docs/images/setup/04-install-plan.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified docs/images/setup/05-bridge-ready.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
72 changes: 50 additions & 22 deletions npm/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,21 +15,29 @@

## See it working first

Before setup, this sample n8n configuration shows GPT-5.6 model aliases in the
OpenAI Chat Model selector. The exact model list depends on the signed-in
ChatGPT account and can change over time.
This documented example follows a tested n8n OpenAI credential through a
published Telegram-triggered workflow. It is a product-operation record, not
an endorsement, sponsorship, or affiliation by OpenAI, n8n, Hostinger,
Telegram, or AppBuildersPH.

<figure>
<img src="https://cdn.jsdelivr.net/npm/relmio@latest/docs/images/examples/gpt-56-model-selector.png" alt="Model selector listing GPT-5.6 Sol, Luna, and Terra model aliases" width="480">
<figcaption>Compatibility preview: the model selector includes <code>gpt-5.6-sol</code>, <code>gpt-5.6-luna</code>, and <code>gpt-5.6-terra</code>.</figcaption>
<img src="https://cdn.jsdelivr.net/npm/relmio@latest/docs/images/examples/n8n-openai-credential-connected.png" alt="n8n OpenAI credential dialog showing that the connection test succeeded" width="960">
<figcaption>The n8n OpenAI credential connection test succeeded; the credential value itself is obscured.</figcaption>
</figure>

After Relmio completes the installation, Docker shows the existing n8n stack
and the new private OAuth sidecar running together.
<figure>
<img src="https://cdn.jsdelivr.net/npm/relmio@latest/docs/images/examples/gpt-56-model-selector.png" alt="n8n model selector with gpt-5.6-terra selected and an account-specific model list" width="500">
<figcaption>This signed-in account's n8n model list includes <code>gpt-5.6-terra</code>; model availability is account-dependent and can change.</figcaption>
</figure>

<figure>
<img src="https://cdn.jsdelivr.net/npm/relmio@latest/docs/images/examples/telegram-n8n-workflow-execution.png" alt="Successful n8n execution of a Telegram-triggered workflow with HTTP Request, Basic LLM Chain, and AI Agent branches" width="960">
<figcaption>The published Telegram-triggered n8n workflow completed successfully across its HTTP Request, Basic LLM Chain, and AI Agent branches.</figcaption>
</figure>

<figure>
<img src="https://cdn.jsdelivr.net/npm/relmio@latest/docs/images/examples/sidecar-docker-containers-running.png" alt="Docker Desktop showing the n8n and n8n-openai-oauth containers running" width="960">
<figcaption>Completed setup: the existing <code>n8n</code> stack and the <code>n8n-openai-oauth</code> sidecar are both running.</figcaption>
<img src="https://cdn.jsdelivr.net/npm/relmio@latest/docs/images/examples/telegram-model-results.png" alt="Telegram conversation receiving HTTP Request, Basic LLM Chain, and AI Agent outputs" width="682">
<figcaption>Telegram received the HTTP Request, Basic LLM Chain, and AI Agent outputs sent by that workflow.</figcaption>
</figure>

Relmio is a local browser wizard that installs a private
Expand Down Expand Up @@ -184,28 +192,47 @@ it is not currently advertised as supported.

## Visual walkthrough

All images below are sanitized previews with reserved addresses, fake server
data, and no real credential or session information.
These current product screenshots omit or redact sensitive values. The VPS
identity screen redacts the address and SSH fingerprint; none of the images
includes an OAuth token, password, private key, or live wizard session URL.

### 1. Choose a hosted installation method

<img src="https://cdn.jsdelivr.net/npm/relmio@latest/docs/images/setup/00-install-methods.png" alt="Hosted Relmio installation page with macOS/Linux, Homebrew, PowerShell, Command Prompt, and NPX choices" width="720">

The hosted page starts with the installation-method selector. Run the selected
command locally, not on the VPS.

### 2. Complete the local ChatGPT/Codex sign-in

<img src="https://cdn.jsdelivr.net/npm/relmio@latest/docs/images/setup/01-local-sign-in-ready.png" alt="OpenAI OAuth browser page confirming that local ChatGPT credentials were saved" width="626">

The browser confirmation states that the ChatGPT credentials were saved locally.

### 3. Verify the VPS identity

### 1. Confirm the local ChatGPT/Codex sign-in
<img src="https://cdn.jsdelivr.net/npm/relmio@latest/docs/images/setup/02-vps-identity-confirmed.png" alt="VPS identity confirmation with the address and SSH fingerprint redacted" width="720">

<img src="https://cdn.jsdelivr.net/npm/relmio@latest/docs/images/setup/01-local-sign-in-ready.png" alt="Sanitized local sign-in ready screen" width="720">
Confirm the SSH host fingerprint before authentication. The screenshot redacts
the address and fingerprint and obscures the password field.

### 2. Verify the VPS identity
### 4. Choose the detected n8n container and network

<img src="https://cdn.jsdelivr.net/npm/relmio@latest/docs/images/setup/02-vps-identity-confirmed.png" alt="Sanitized VPS fingerprint confirmation screen" width="720">
<img src="https://cdn.jsdelivr.net/npm/relmio@latest/docs/images/setup/03-n8n-detected.png" alt="Detected n8n container and shared Docker network" width="720">

### 3. Choose the detected n8n container and network
Discovery is read-only; choose the existing n8n container and shared Docker
network.

<img src="https://cdn.jsdelivr.net/npm/relmio@latest/docs/images/setup/03-n8n-detected.png" alt="Sanitized n8n discovery screen" width="720">
### 5. Review the exact sidecar-only plan

### 4. Review the exact sidecar-only plan
<img src="https://cdn.jsdelivr.net/npm/relmio@latest/docs/images/setup/04-install-plan.png" alt="Exact sidecar-only installation plan, including forbidden actions" width="720">

<img src="https://cdn.jsdelivr.net/npm/relmio@latest/docs/images/setup/04-install-plan.png" alt="Sanitized installation plan screen" width="720">
The plan names the allowed sidecar work and explicitly excludes edits or
restarts of n8n, a published host port, and a Traefik route.

### 5. Copy the verified n8n settings
### 6. Copy the verified n8n settings

<img src="https://cdn.jsdelivr.net/npm/relmio@latest/docs/images/setup/05-bridge-ready.png" alt="Sanitized verified bridge screen" width="720">
<img src="https://cdn.jsdelivr.net/npm/relmio@latest/docs/images/setup/05-bridge-ready.png" alt="Private bridge ready screen with n8n OpenAI credential settings" width="720">

Use these values in an n8n OpenAI credential:

Expand Down Expand Up @@ -265,7 +292,8 @@ has the importable cURL version.
- Relmio never edits, rebuilds, recreates, stops, or restarts the existing n8n
container.
- This is an unofficial community project, not affiliated with or endorsed by
OpenAI, xAI, or n8n. Provider access, models, limits, and policies can change.
OpenAI, xAI, n8n, Hostinger, Telegram, or AppBuildersPH. Provider access,
models, limits, and policies can change.
- Use it only where your account, subscription, provider terms, and applicable
policies allow.

Expand Down
20 changes: 20 additions & 0 deletions test/package-contents.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,11 @@ const expectedPackedFiles = new Set([
"docs/images/examples/gpt-56-model-selector.png",
"docs/images/examples/gpt-56-sol-chat-model-run.png",
"docs/images/examples/hosted-chat-connected.png",
"docs/images/examples/n8n-openai-credential-connected.png",
"docs/images/examples/sidecar-docker-containers-running.png",
"docs/images/examples/telegram-model-results.png",
"docs/images/examples/telegram-n8n-workflow-execution.png",
"docs/images/setup/00-install-methods.png",
"docs/images/setup/01-local-sign-in-ready.png",
"docs/images/setup/02-vps-identity-confirmed.png",
"docs/images/setup/03-n8n-detected.png",
Expand Down Expand Up @@ -244,6 +248,22 @@ test("npm package substitutes a registry-safe README without changing GitHub dia
npmReadme,
/https:\/\/cdn\.jsdelivr\.net\/npm\/relmio@latest\/docs\/images\/setup\/05-bridge-ready\.png/u,
);
assert.match(
npmReadme,
/https:\/\/cdn\.jsdelivr\.net\/npm\/relmio@latest\/docs\/images\/setup\/00-install-methods\.png/u,
);
assert.match(
npmReadme,
/https:\/\/cdn\.jsdelivr\.net\/npm\/relmio@latest\/docs\/images\/examples\/n8n-openai-credential-connected\.png/u,
);
assert.match(
npmReadme,
/https:\/\/cdn\.jsdelivr\.net\/npm\/relmio@latest\/docs\/images\/examples\/telegram-model-results\.png/u,
);
assert.match(
npmReadme,
/https:\/\/cdn\.jsdelivr\.net\/npm\/relmio@latest\/docs\/images\/examples\/telegram-n8n-workflow-execution\.png/u,
);
assert.match(
npmReadme,
/https:\/\/cdn\.jsdelivr\.net\/npm\/relmio@latest\/docs\/images\/examples\/hosted-chat-connected\.png/u,
Expand Down
Loading
Loading