Docs Join alpha
Build

Photo and video proof

Kid captures real-world evidence as completion proof: either as a camera task (runMode: camera) or inside a canvas via sprout.uploadAsset(). Both Soon.

What you'll build

The kid finishes a real-world thing (cleaned room, finished art piece, practiced an instrument, did the chore) and captures evidence on the iPad: a photo, a short video. The artifact attaches to the task as completion proof. The parent sees the picture, not just a checkmark.

Both shapes below are Soon. The platform-level decisions are locked; the surfaces are landing in stages. We're publishing the pattern early so you can plan against it.

Pieces you'll combine

Two routes, pick the one that fits the activity:

Build it (planned shape)

Route A: Camera task (runMode: "camera")

A new task runMode alongside self-check, conversation, and canvas. Sprout owns the camera surface end-to-end: opens the iPad camera, captures photo or short video, lets the kid retry, hands the asset to Sprout as completion proof. Your home agent never touches the file.

Shell (planned)
task.create({
name: "<capture name>",
assignChildIds: ["<kidId>"],
runMode: "camera",
cameraTaskSpec: {
captureKind: "photo",        // "photo" | "video"
prompt: "<What the kid sees on the camera screen>",
maxDurationSeconds: 15,      // video only
retryAllowed: true,
requireParentReview: true    // pause completion in review state
},
scheduleSpec: { taskType: "schedule", days: ["Mon","Tue","Wed","Thu","Fri"], startMinutes: 1020 },
rewardSpec: { gems: 3 }
})
# Returns { taskId }
# Asset stored in Sprout. Read via task.describe: returns asset id + signed URL.

Route B: Canvas with sprout.uploadAsset()

The existing Interactive canvas pattern, plus a new SDK call. The canvas opens the camera (or photo picker) when the kid taps a capture button; the captured asset flows back to Sprout via sprout.uploadAsset(). The completion call (sprout.score / sprout.complete) fires after the upload resolves.

JavaScript inside the canvas (planned)
// In the canvas body:
captureButton.onclick = async () => {
const result = await sprout.uploadAsset({
kind: "photo",                  // or "video"
purpose: "completion-proof",
maxBytes: 8_000_000
});
// result: { assetId, signedUrl, mime, sizeBytes }
showThumbnail(result.signedUrl);
};
submitButton.onclick = () => {
sprout.complete({
summary: "Submitted with photo proof",
assetIds: [latestAssetId]
});
};

An authoring helper skill (analogous to Screen reader) ships alongside uploadAsset: it teaches your agent the canvas constraints around capture buttons, retry handling, thumbnail rendering, and the upload-then-complete sequence. Slug: photo-capture. Status: Soon, lands when uploadAsset lands.

When to use it

Tools touched (planned)

Recommended skills

No skills in the catalog pair with this pattern yet. Browse the catalog.

Roadmap

Seen in walkthroughs

Chore + photo proof

Was this page helpful?