···4444 [1] One notification
4545 *[other] { $count } notifications
4646}
4747+4848+## Offline User
4949+user-offline = user is offline
5050+user-offline-message = { $source ->
5151+ [streamer] Looks like <1>@{ $handle } is offline</1>, but they recommend checking out:
5252+ *[default] Looks like <1>@{ $handle } is offline</1>, but we recommend checking out:
5353+}
5454+user-offline-no-recommendations =
5555+ Looks like <1>@{ $handle } is offline</1> right now.
5656+ Check back later.
5757+streaming-title = streaming { $title }
5858+viewer-count = { $count ->
5959+ [0] 0 viewers
6060+ [1] 1 viewer
6161+ *[other] { $count } viewers
6262+}
+13
js/components/locales/en-US/settings.ftl
···8080 *[other] { $count } keys
8181}
82828383+## Recommendations
8484+recommendations = Recommendations
8585+manage-recommendations = Manage Recommendations
8686+recommendations-to-others = Recommendations to Others
8787+recommendations-description = Share up to 8 streamers you recommend to your viewers
8888+no-recommendations-yet = No recommendations configured yet
8989+add-recommendation = Add Recommendation
9090+streamer-did = Streamer DID
9191+recommendations-count = { $count ->
9292+ [one] { $count } recommendation
9393+ *[other] { $count } recommendations
9494+}
9595+8396## Webhook Management
8497webhooks = Webhooks
8598webhook-integrations = Webhook Integrations
+16
js/components/locales/es-ES/common.ftl
···4444 [1] Una notificación
4545 *[other] { $count } notificaciones
4646}
4747+4848+## Offline User
4949+user-offline = usuario desconectado
5050+user-offline-message = { $source ->
5151+ [streamer] Parece que <1>@{ $handle } está desconectado</1>, pero ellos recomiendan ver:
5252+ *[default] Parece que <1>@{ $handle } está desconectado</1>, pero te recomendamos ver:
5353+}
5454+user-offline-no-recommendations =
5555+ Parece que <1>@{ $handle } está desconectado</1> ahora mismo.
5656+ Vuelve más tarde.
5757+streaming-title = transmitiendo { $title }
5858+viewer-count = { $count ->
5959+ [0] 0 espectadores
6060+ [1] 1 espectador
6161+ *[other] { $count } espectadores
6262+}
+1-1
js/components/locales/es-ES/settings.ftl
···113113manage-keys = Gestionar Claves
114114your-stream-pubkeys = Tus Claves Públicas de Transmisión
115115no-keys = No hay claves configuradas
116116-pubkey-description = Las claves públicas se emparejan con claves de transmisión (usadas en software de streaming) para firmar y verificar tu transmisión
116116+pubkey-description = Las claves públicas se emparejan con claves de transmisión (usadas en software de transmitiendo) para firmar y verificar tu transmisión
117117118118keys-count = { $count ->
119119 [one] { $count } clave
+16
js/components/locales/fr-FR/common.ftl
···4444 [1] Une notification
4545 *[other] { $count } notifications
4646}
4747+4848+## Offline User
4949+user-offline = utilisateur hors ligne
5050+user-offline-message = { $source ->
5151+ [streamer] On dirait que <1>@{ $handle } est hors ligne</1>, mais ils recommandent de regarder :
5252+ *[default] On dirait que <1>@{ $handle } est hors ligne</1>, mais nous recommandons de regarder :
5353+}
5454+user-offline-no-recommendations =
5555+ On dirait que <1>@{ $handle } est hors ligne</1> maintenant.
5656+ Revenez plus tard.
5757+streaming-title = diffusion de { $title }
5858+viewer-count = { $count ->
5959+ [0] 0 spectateurs
6060+ [1] 1 spectateur
6161+ *[other] { $count } spectateurs
6262+}
+16
js/components/locales/pt-BR/common.ftl
···4444 [1] Uma notificação
4545 *[other] { $count } notificações
4646}
4747+4848+## Offline User
4949+user-offline = usuário offline
5050+user-offline-message = { $source ->
5151+ [streamer] Parece que <1>@{ $handle } está offline</1>, mas eles recomendam assistir:
5252+ *[default] Parece que <1>@{ $handle } está offline</1>, mas recomendamos assistir:
5353+}
5454+user-offline-no-recommendations =
5555+ Parece que <1>@{ $handle } está offline</1> agora.
5656+ Volte mais tarde.
5757+streaming-title = transmitindo { $title }
5858+viewer-count = { $count ->
5959+ [0] 0 espectadores
6060+ [1] 1 espectador
6161+ *[other] { $count } espectadores
6262+}
+1-1
js/components/locales/pt-BR/settings.ftl
···111111manage-keys = Gerenciar Chaves
112112your-stream-pubkeys = Suas Chaves Públicas de Transmissão
113113no-keys = Nenhuma chave configurada
114114-pubkey-description = Chaves públicas são emparelhadas com chaves de transmissão (usadas em software de streaming) para assinar e verificar sua transmissão
114114+pubkey-description = Chaves públicas são emparelhadas com chaves de transmissão (usadas em software de transmitindo) para assinar e verificar sua transmissão
115115116116keys-count = { $count ->
117117 [one] { $count } chave
···55export function LivestreamProvider({
66 children,
77 src,
88+ ignoreOuterContext = false,
89}: {
910 children: React.ReactNode;
1011 src: string;
1212+ ignoreOuterContext?: boolean;
1113}) {
1214 const context = useContext(LivestreamContext);
1315 const store = useRef(makeLivestreamStore()).current;
···1517 // this is ok, there's use cases for having one in another
1618 // like having a player component that's independently usable
1719 // but can also be embedded within an entire livestream page
1818- return <>{children}</>;
2020+ if (!ignoreOuterContext) {
2121+ return <>{children}</>;
2222+ }
1923 }
2024 (window as any).livestreamStore = store;
2125 return (
···10101111## Prerequisites
12121313-- [Node.js](https://nodejs.org/)
1313+Except for the C/C++ compilers, we'd highly recommend using
1414+[mise](https://mise.jdx.dev/) to get your workspace set up for development.
1515+1616+- [Node.js](https://nodejs.org/) (version 22 [important!])
1417- [pnpm](https://pnpm.io/)
1515- - A way to install it is with `npm install -g pnpm` if corepack is not enabled
1616- in your node install.
1718- Go (version 1.24)
1818- - If you use `mise`, you can install latest Go 1.24 with
1919- `mise install go@prefix:1.24`
1919+- Rust
2020- Meson
2121- Ninja
2222- pkg-config
2323-- Rust
2423- Working C and C++ compilers: `gcc` on Linux or `clang` (via Xcode) on macOS.
2424+ - On most unix-like systems, a c/++ compiler is included with the distro's
2525+ version of `build-essential`/`base-devel` (`xcode-select –-install` on
2626+ macOS)
25272628## Get Started
2729
···1111This record is created by users through the Streamplace frontend and contains
1212three main components:
13131414-1. **Content Warnings** (`place.stream.metadata.contentWarnings`): Users can
1515- select content warnings to indicate to node operators and viewers what types
1616- of warnings have been disclosed. The system supports ten predefined warning
1717- categories including _violence_, _nudity_, _flashing lights_, _language_,
1818- _drug use_, _death_, _sexuality_, _suffering_, _fantasy violence_, and
1919- _personally identifiable information (PII)_. These categories are based on
2020- the
1414+1. **Content Warnings** (`place.stream.metadata.configuration.contentWarnings`):
1515+ Users can select content warnings to indicate to node operators and viewers
1616+ what types of warnings have been disclosed. The system supports ten
1717+ predefined warning categories including _violence_, _nudity_, _flashing
1818+ lights_, _language_, _drug use_, _death_, _sexuality_, _suffering_, _fantasy
1919+ violence_, and _personally identifiable information (PII)_. These categories
2020+ are based on the
2121 [IPTC controlled vocabulary for content warnings](https://cv.iptc.org/newscodes/contentwarning/).
2222 Each warning provides descriptions to help creators properly categorize their
2323 content. Streamplace node operators may also configure their nodes to exclude
2424 certain types of content.
2525-2. **Content Rights** (`place.stream.metadata.contentRights`): This section
2626- captures copyright and attribution information, including the creator’s name,
2727- copyright notice, publication year, license type, and credit line. The system
2828- supports various pre-defined licensing options from several Creative Commons
2929- licenses (CC0, CC-BY, CC-BY-SA, CC-BY-NC, CC-BY-NC-SA, CC-BY-ND, and
3030- CC-BY-NC-ND) to “All Rights Reserved”, as well as the option to input custom
3131- licensing terms.
2525+2. **Content Rights** (`place.stream.metadata.configuration.contentRights`):
2626+ This section captures copyright and attribution information, including the
2727+ creator’s name, copyright notice, publication year, license type, and credit
2828+ line. The system supports various pre-defined licensing options from several
2929+ Creative Commons licenses (CC0, CC-BY, CC-BY-SA, CC-BY-NC, CC-BY-NC-SA,
3030+ CC-BY-ND, and CC-BY-NC-ND) to “All Rights Reserved”, as well as the option to
3131+ input custom licensing terms.
32323. **Distribution Policy** (`place.stream.metadata.distributionPolicy`): This
3333 section currently allows creators to specify a `deleteAfter` property, which
3434 is meant to indicate the time after which the user no longer wants the stream