# Tatolab > Tatolab turns anything into a realtime stream and lets you decide exactly who can reach it. Tatolab turns anything with an API (cameras, microphones, screens, sensors, models) into a realtime stream. Nothing leaves your machine until you expose it, and you choose who can reach each stream: your own machines, your team, or any app or agent through a URL. Install it with Homebrew on a Mac (`brew install --cask tatolab/tap/tatolab`) or with one command on Linux (`curl -fsSL https://get.tatolab.com/install.sh | sh`); the install guide is https://tatolab.com/docs/install. Every page on this site is also available as Markdown: request it with `Accept: text/markdown`, or add `.md` to the path. Each starts with YAML front matter. The whole site in one file: https://tatolab.com/llms-full.txt. ## Pages - [Home](https://tatolab.com/index.md): What Tatolab is, how it works, and how to install it. - [About us](https://tatolab.com/about.md): Who builds Tatolab, and where. - [Docs](https://tatolab.com/docs.md): Install Tatolab, build your first stream, and run it on your own machines. - [Blog](https://tatolab.com/blog.md): What we're building, what we're reading, and the events we're following. - [Privacy Policy](https://tatolab.com/privacy.md): What personal information we handle and how. - [Terms of Service](https://tatolab.com/terms.md): The terms for using tatolab.com. ## Docs - [Quickstart](https://tatolab.com/docs/quickstart.md): Create a stream, run it, see the output it shares with other streams and agents, and change it while it runs. About five minutes once Tatolab is installed. - [How Tatolab works](https://tatolab.com/docs/how-it-works.md): Streams, nodes, ports and bags; exposing outputs so other streams, tools and agents can read them; the URLs a machine's MoQ relay gives them; and the runtime that runs it all. - [Install Tatolab](https://tatolab.com/docs/install.md): Install the Tatolab runtime and CLI with Homebrew on a Mac or one command on Linux, then add the Python SDK to your projects. - [Install on macOS](https://tatolab.com/docs/install/macos.md): Install the Tatolab app with Homebrew or from a download. The app starts the runtime, keeps it running, and lives in your menu bar. - [Install on Linux](https://tatolab.com/docs/install/linux.md): Install the runtime and CLI with one command. The installer runs the runtime as a systemd user service, so it starts on its own and stays up. - [Build from source](https://tatolab.com/docs/install/from-source.md): Build the runtime and CLI from the streamlib repository. Use it while the installers roll out, on a setup they don't cover, or to work on Tatolab itself. - [Python SDK](https://tatolab.com/docs/install/python.md): Install uv, choose a Python version, and add the Python SDK, tatolab-stream, to a new or an existing project. - [Tutorial: build and share a stream](https://tatolab.com/docs/tutorial.md): Build a stream that reports motion, share its reports with a second stream in another project, look inside both, keep them running, and hand them to an agent. - [1. Start from the scaffold](https://tatolab.com/docs/tutorial/scaffold.md): Create the motion watcher project with tatolab new, run it, and find your way around its files. - [2. Write your first node](https://tatolab.com/docs/tutorial/first-node.md): Write a motion detector in Python and numpy, give it a setting, wire it into the stream, and watch it report motion. - [3. Share the motion reports](https://tatolab.com/docs/tutorial/share.md): Expose the detector's reports, then write a second stream, in a project of its own, that reads them and keeps a log of motion events. - [4. Look inside](https://tatolab.com/docs/tutorial/look-inside.md): Use tatolab streams, graph, tap, logs and exchange to see what the two streams are doing while they run, and find each stream's JSON Lines log. - [5. Optional: show motion on the picture](https://tatolab.com/docs/tutorial/gpu-tint.md): An optional step. Write a GPU effect that tints the picture red while the detector reports motion, steered from Python. - [6. Keep it running](https://tatolab.com/docs/tutorial/keep-running.md): Hand both streams to the runtime with tatolab run -d, so they keep running after you close the terminals and come back after a restart. - [7. Let an agent watch](https://tatolab.com/docs/tutorial/agents.md): Connect Claude Code, or any MCP client, to the runtime so an agent can read the motion reports, look at frames and change the running streams. - [Share between streams](https://tatolab.com/docs/share/between-streams.md): Expose a stream's outputs so other streams on the machine can read them, control who can, and change that while everything runs. - [Agents and MCP](https://tatolab.com/docs/share/agents.md): Connect Claude Code, Codex, Cursor, Gemini CLI or any other MCP client to the runtime, see every tool and recipe it offers, know what leaves the machine, and write nodes that agents understand. - [Across machines](https://tatolab.com/docs/share/across-machines.md): How streams are shared beyond one machine, over MoQ through a relay the runtime runs on each machine, which gives every exposed output a URL, and how to control another machine's runtime over ssh. - [Write a node](https://tatolab.com/docs/build/nodes.md): Everything a Python node can declare and do, with working examples of a filter, a logger, a timed source and a source driven by its own thread. - [Audio](https://tatolab.com/docs/build/audio.md): Capture from a microphone, process audio in Python in exactly the format you ask for, play it back, and line it up with video. - [Record and encode](https://tatolab.com/docs/build/recording.md): Compress video and audio with hardware encoders, record any number of tracks into one MP4, and work with the encoded stream in Python. - [Virtual camera](https://tatolab.com/docs/build/virtual-camera.md): Present any video in a stream as a camera that Zoom, Google Meet, OBS or a browser can select. Linux only. - [GPU effects](https://tatolab.com/docs/build/gpu-effects.md): Write pixel effects as one GLSL function, steer them from Python with dials, and know when to reach for a full compute kernel. - [Use your model](https://tatolab.com/docs/build/models.md): Run PyTorch, ONNX Runtime, MLX or any other framework on live frames, with the frame handed to the model on the GPU and the results published for the rest of the stream. - [WebRTC (WHIP and WHEP)](https://tatolab.com/docs/build/webrtc.md): The tatolab-webrtc package's two nodes, which send encoded video and audio to a WHIP endpoint or receive them from a WHEP endpoint. - [Manage streams](https://tatolab.com/docs/run/manage.md): Load streams attached or kept, choose which stream in a project to run, and stop, start and remove them. - [Inspect a running stream](https://tatolab.com/docs/run/inspect.md): Find out what a running stream is really doing with graph, tap, logs and exchange, and match common symptoms to the command that explains them. - [Logs](https://tatolab.com/docs/run/logs.md): Every stream writes a JSON Lines log in its project. Read it with tatolab logs, query it with jq, or ship it to your own tools, including OpenTelemetry. - [Deploy to a machine](https://tatolab.com/docs/run/deploy.md): Put a stream on a server or a small box by the door, keep it running without anyone logged in, update it, and manage it remotely. - [Use cases](https://tatolab.com/docs/use-cases.md): Problems Tatolab helps with, each with an example of streams that solve it, what you'd write yourself, and what isn't built yet. - [An agent should see what's happening now](https://tatolab.com/docs/use-cases/agents.md): Give an AI agent live data from your streams, a way to look at frames, and the logs, so it can answer questions about what's happening and help keep the streams running. - [Several programs need the same camera](https://tatolab.com/docs/use-cases/video-analytics.md): Run a detector, a recorder and alerts on one camera, each in a stream of its own, so each can change or fail without touching the others. A security and operations example. - [One camera, many destinations](https://tatolab.com/docs/use-cases/streaming.md): Apply a look to your camera once, then use the result in video calls and OBS, and record it, without chaining apps that each grab the camera. For streamers, teachers and small productions. - [Several sources, one record](https://tatolab.com/docs/use-cases/research.md): Record video, audio and instrument readings on one machine, on one clock, so a trial's data can be lined up afterwards, and watch it live without touching the recording. A research lab example. - [Examples](https://tatolab.com/docs/examples.md): What each example in the streamlib repository shows, what it needs, and how its stream is wired with the current API. - [CLI reference](https://tatolab.com/docs/reference/cli.md): Every tatolab command, its options, and what it prints. - [Python SDK reference](https://tatolab.com/docs/reference/python-api.md): The tatolab.stream package, a section at a time. Streams and the builder, node declarations, contexts, ports, bag types, GPU tools, logging and the clock. - [Built-in nodes](https://tatolab.com/docs/reference/built-in-nodes.md): Every node that ships inside the runtime, with its ports, settings and defaults, and what it does on Linux and macOS. - [Troubleshooting](https://tatolab.com/docs/reference/troubleshooting.md): The errors you're most likely to meet, what they mean, and how to fix them. ## Blog - [IETF 127](https://tatolab.com/blog/event-ietf-127.md): The next IETF meeting, where the standards for QUIC, MoQ and the rest of the internet's protocols are worked out. Hackathon on the opening weekend. - [MoQ interop and issue discussion](https://tatolab.com/blog/event-moq-interop-seattle.md): The IETF MoQ working group tests implementations against its draft-20 target on October 12–13, then works through open issues on October 14–15. Hybrid. - [DEMOQED 2026](https://tatolab.com/blog/event-demoqed-2026.md): The MoQ Alliance's Media over QUIC conference, with talks and demos of MoQ in practice, held in place of Demuxed this year. - [Announcing iceoryx2 v0.10.0](https://tatolab.com/blog/iceoryx2-v0-10.md): Zero-copy shared memory now handles payloads that grow at runtime, FlatBuffers can be built in place, and event notifications are no longer dropped. - [IBC 2026](https://tatolab.com/blog/event-ibc-2026.md): MoQ demos across the show floor from Red5, nanocosmos, Vindral, Broadpeak, Oracle, Bitmovin, Quortex and Ant Media. - [An API for MoQ: provision your own isolated relays](https://tatolab.com/blog/cloudflare-moq-relays.md): Cloudflare can now spin up a dedicated Media over QUIC relay in seconds, with separate credentials for publishers and subscribers. Free during the beta. - [IETF 126: MoQ working group](https://tatolab.com/blog/event-ietf-126-moq.md): The working group pushed the core MoQ transport draft forward, worked on authorization, and planned an interop day for draft-18. - [OpenAI's WebRTC Problem](https://tatolab.com/blog/moq-openai-webrtc-problem.md): The author of MoQ argues that WebRTC is the wrong foundation for voice AI, and that QUIC handles dropped packets, setup and load balancing better. - [NAB Show 2026](https://tatolab.com/blog/event-nab-2026.md): Oracle and partners showed a MoQ workflow from ingest to playback, with Ateme encoding, Broadpeak packaging, Cloudflare delivery and Bitmovin playback. ## Optional - [GitHub](https://github.com/tatolab): Tatolab's public repositories