Skip to content
Full Desktop in Browser
HTML5 Display Client
Multiplayer Sharing
H264 Video Encoding
Configurable URL Parameters
Screenshot API
Auto-Reconnect
Embeddable via iframe
Full Desktop in Browser
HTML5 Display Client
Multiplayer Sharing
H264 Video Encoding
Configurable URL Parameters
Screenshot API
Auto-Reconnect
Embeddable via iframe
Full Desktop in Browser
HTML5 Display Client
Multiplayer Sharing
H264 Video Encoding
Configurable URL Parameters
Screenshot API
Auto-Reconnect
Embeddable via iframe
Full Desktop in Browser
HTML5 Display Client
Multiplayer Sharing
H264 Video Encoding
Configurable URL Parameters
Screenshot API
Auto-Reconnect
Embeddable via iframe
home / kit / display
DisplayKit Service

Display

A full Linux desktop streamed to any browser. Launch any X11 app — Firefox, VS Code, GIMP, LibreOffice — and reach it from a URL. The HTML5 display client encodes the stream as H264, WebP, JPEG, or PNG, all tuned by query parameters. No VNC client, no RDP client, no desktop app. Just a browser tab.

display-1 — HoodyConnected · H264
https://abc123-def456-display-1.node-us-1.containers.hoody.com/?sharing=true&encoding=h264
Firefox
code — main.py

1 import requests

2

3 r = requests.get(

4 '.../screenshot'

5 )

6 with open('f.png', 'wb') as f:

7 f.write(r.content)

8 # 1920x1080 PNG

alice
bob
1920 × 1080 · 2 users
H264 video encoding·HTML5 client·Shared: 2 clients·~2.3 Mbps
home / kit / display / features
How It Works

Five ways to use Display

Display adapts to how you work. Run a full Linux desktop in a tab, share it with your team, capture it programmatically, embed it in your own UI, or tune it for low-bandwidth links — all from the same URL.

display-1

Full Linux Desktop

Run any X11 application — browsers, IDEs, image editors — in a sandboxed container and stream it to a browser tab. No VNC, no RDP, no native client.

# before / after

- vncviewer user@server:5901 (install client, open port)

+ Open the display URL in any browser — works on any device

# Check the display is up

$ curl /api/v1/display/health

> {"status": "ok"}

 

# Inspect the session + its screenshots

$ curl /api/v1/display/info

> {

> "display": 1,

> "screenshots": [

> { "timestamp": "1749541160",

> "full": { "width": 1920, "height": 1080 } }

> ]

> }

Desktop1/5
home / kit / display / params
URL Parameters

One URL, every parameter

Everything about a display session is controlled by the URL. Flip a chip below and the URL updates — then open it, iframe it, or send it to a teammate.

https://abc123-def456-display-1.node-us-1.containers.hoody.com/
Open

Session

Who can connect, who can take over, whether to reconnect on drops.

Media & Features

Sound, clipboard sync, file transfer, printing — lock down or open up.

Encoding

Auto picks the codec by default. Force H264 for motion, WebP for balance, PNG for lossless, JPEG for metered links.

Bandwidth cap

Hard cap on bits per second. 0 means unlimited.

Keyboard layout

Layout code. Use swap_keys=true on macOS for Cmd to Ctrl mapping.

No overrides — using defaults
home / kit / display / api
HTTP API

Every pixel is an HTTP response

Capture screenshots, pull thumbnails, and read session metadata over plain HTTP. The display is addressable, observable, and programmable end to end.

View All Endpoints
display-api.sh

# Capture the live desktop as a PNG

curl -X GET \

https://abc123-def456-display-1.node-us-1.containers.hoody.com/api/v1/display/screenshot \

-H "Authorization: Bearer $TOKEN" \

-o frame.png

 

# Or get base64 + metadata in JSON

curl "https://abc123-def456-display-1.node-us-1.containers.hoody.com/api/v1/display/screenshot?base64=true" \

-H "Authorization: Bearer $TOKEN"

 

# Response:

# {

# "image": { "data": "iVBORw0KG..." },

# "info": {

# "full": { "width": 1920, "height": 1080 },

# "timestamp": "1749541160"

# }

# }

home / kit / display / more
Use Cases

Desktops, on demand

A URL-addressable desktop opens up workflows that were never practical before. No installs, no clients, no OS lock-in.

AI Computer Use

Agents that click, type, and read pixels. The screenshot API feeds vision models; keyboard and mouse are HTTP. Give Claude or GPT a full Linux desktop with a URL.

abc123-def456-display-1.node-us-1.containers.hoody.com● ai-agent
GET /api/v1/display/screenshot → vision model

Remote Work Desktops

One desktop per employee, centrally managed, accessible from any device. Data never leaves the container. Onboard in seconds — share a URL.

Development Environments

Cursor, VS Code, JetBrains, full browsers — all running in the container, not on the laptop. Open a URL on a Chromebook and have a senior workstation.

SaaS Desktop Apps

Ship Linux-only software to any browser. Legacy CAD tools, scientific apps, trading terminals — wrap them in a container and charge per URL.

Monitoring Dashboards

320x180 thumbnails let you tile dozens of live desktops in a single view. Refresh every few seconds, flag anomalies, drill into the full display with one click.

Shared Presentations

?sharing=true&readonly=true turns any desktop into a broadcast. Presenter drives, audience watches — no screen-share software required.

# broadcast URL
?sharing=true&readonly=true
8 2 1viewers / presenters / muted
home / kit / display / endpoints
HTTP API

11 endpoints, full observability

Screenshots, thumbnails, session metadata, and a health check — eleven read endpoints, every one a plain HTTP GET that returns JSON or raw image bytes.

Screenshots

5 endpoints

curl .../screenshot -o frame.png → 1920x1080 PNG

GET
/api/v1/display/screenshotCapture a fresh full-resolution PNG
GET
/api/v1/display/screenshot/lastReturn the most recent screenshot
GET
/api/v1/display/screenshot/:tsFetch a past screenshot by timestamp
GET
/api/v1/display/screenshot/infoCapture and return metadata only
GET
/api/v1/display/screenshot/last/infoMetadata for the latest capture

Thumbnails

3 endpoints

curl .../thumbnail/last → 320x180 PNG preview

GET
/api/v1/display/thumbnailCapture a 320x180 PNG thumbnail
GET
/api/v1/display/thumbnail/lastMost recent thumbnail
GET
/api/v1/display/thumbnail/:tsPast thumbnail by timestamp

Info & Metadata

2 endpoints

curl .../display/info → {display: 1, screenshots: [...]}

GET
/api/v1/display/infoDisplay ID plus its screenshots
GET
/api/v1/display/screenshotsList every stored screenshot

Health

1 endpoint

curl .../display/health → {status: "ok"}

GET
/api/v1/display/healthService health check
home / kit / display / more
Capabilities

Everything built in

Every feature ships ready to use. No plugins, no drivers, no client installs.

Video Encoding

Pick a codec per session with ?encoding=. H264, VP8, and VP9 for smooth motion, WebP for balance, PNG and raw RGB for lossless, JPEG for metered links. Auto selects for you by default.

?encoding=h264?encoding=webp?encoding=jpeg?encoding=png

Clipboard Sync

Copy on your laptop, paste in the remote desktop — and back again. Plain text, HTML, and UTF-8 formats are all supported.

?clipboard=true?clipboard=false

Touch Devices

Works on phones and tablets: add ?keyboard=true for an on-screen virtual keyboard, swap_keys for Cmd/Ctrl, and reverse-scroll options.

?keyboard=true?swap_keys=true

Auto-Reconnect

Reconnect is on by default — the session restores when Wi-Fi flips or your laptop wakes, while the desktop keeps running server-side. Set ?reconnect=false to opt out.

?reconnect=true

Read-Only Mode

?readonly=true locks input for view-only access. Perfect for dashboards, presentations, and handing out demo links.

?readonly=true?steal=false

Feature Flags

Toggle sound, printing, clipboard, and file transfer independently. Lock down an environment for security or strip features for performance.

?sound=false?printing=false?file_transfer=false
home / kit / display / start

Put a desktop in a URL

Display is one of 18 Kit services that ship with every Hoody container. No installers, no clients, no VPN — just a browser tab.

Read the Docs