{
"addOns": {
"common": {
"name": "TogetherLens Photo Room",
"logoUrl": "https://togetherlens.app/icon.png"
},
"meet": {
"web": {
"sidePanelUrl": "https://togetherlens.app/resources/google-meet-photo-room/",
"supportsScreenSharing": true,
"addOnOrigins": [
"https://togetherlens.app"
],
"logoUrl": "https://togetherlens.app/icon.png",
"darkModeLogoUrl": "https://togetherlens.app/icon.png"
}
}
}
}A collaborative starting point
Make the next
scene a group decision.
Copy a small Google Meet add-on starter that lets a team, family, or couple choose a public scene together. The screen-share bridge can surface the activity while someone is presenting, before anyone sends a portrait.
The Meet moment
A presentation banner
becomes a shared choice.
Google Meet can promote a published add-on from a screen-shared page. The starter keeps the first step lightweight: a bounded, browser-local duel that asks the group to choose a scene before the app handoff.
Read Google’s screen-sharing guidance ↗Choose a scene together. No account or portrait is needed for the first decision.
The free loop
From presentation
to portrait plan.
Use the artifacts below in an owner-controlled Google Cloud project. Nothing is registered or published from this page.
- 01Copy the deployment manifest
Set the side-panel URL and allowed origin, then replace the explicit project-number placeholder in your own deployment.
- 02Start one Meet activity
The add-on opens a public two-scene choice. Its additional state contains only the finite TogetherLens acquisition tuple.
- 03Let the group continue by choice
After the decision, participants can follow the normal Meet-room handoff. Store links contain no meeting, participant, or claim identifier.
Copy-safe artifacts
Three small files.
One clear route.
The examples use Google’s Meet Add-ons SDK method names and keep all user-owned configuration visible. They never embed a meeting ID, account, participant, or uploaded image.
import { meet } from "@googleworkspace/meet-addons/meet.addons";
const CLOUD_PROJECT_NUMBER = "YOUR_CLOUD_PROJECT_NUMBER";
const MAIN_STAGE_URL = "https://togetherlens.app/duel/?round=17&utm_source=google_meet&utm_medium=activity&utm_campaign=meet_group_room&utm_content=participant";
const SIDE_PANEL_URL = "https://togetherlens.app/resources/google-meet-photo-room/";
export async function setUpTogetherLensActivity() {
const session = await meet.addon.createAddonSession({
cloudProjectNumber: CLOUD_PROJECT_NUMBER,
});
const sidePanelClient = await session.createSidePanelClient();
document.querySelector("#start-togetherlens-activity")?.addEventListener("click", async () => {
await sidePanelClient.startActivity({
mainStageUrl: MAIN_STAGE_URL,
sidePanelUrl: SIDE_PANEL_URL,
additionalData: JSON.stringify({
source: "google_meet",
medium: "activity",
campaign: "meet_group_room",
content: "participant",
}),
});
});
}<script src="https://www.gstatic.com/meetjs/addons/1.1.0/meet.addons.screenshare.js"></script>
<script>
meet.addon.screensharing.exposeToMeetWhenScreensharing({
cloudProjectNumber: "YOUR_CLOUD_PROJECT_NUMBER",
startActivityOnOpen: true,
mainStageUrl: "https://togetherlens.app/duel/?round=17&utm_source=google_meet&utm_medium=activity&utm_campaign=meet_group_room&utm_content=participant",
sidePanelUrl: "https://togetherlens.app/resources/google-meet-photo-room/",
});
</script>When the group agrees
Bring the chosen scene
into TogetherLens.
The demo is free and browser-local. If everyone has permissioned source portraits ready, continue to the app through the existing Meet-room cohort.