Templates are pre-built starting points for exploring your archive. Pick one in the Studio and you'll have a working app in seconds — then customize it through conversation.
Ask questions about your archive and get cited answers grounded in the actual content. Uses search → clip → cite pipeline with cached question history.
You can also describe something entirely custom — the AI will plan and build it for you using the SDK methods below.
Every app runs inside a sandbox with access to the ideo global. These are the methods available for searching, browsing, and interacting with your archive.
search ideo.search(query, options?)Find relevant media items via vector similarity. Returns ranked items with similarity scores. Pure retrieval — does not extract passages.
clip ideo.clip(query, { itemId, minDuration? })Extract a relevant passage from a specific item. LLM reads the transcript and finds the best matching segment. minDuration defaults to 180s (3 min).
cite ideo.cite(query, sources)Produce a cited answer grounded in clip sources. Returns [answerText, sources] with inline [0], [1] citations.
items ideo.items()List all media items in the archive with titles, durations, and metadata.
transcript ideo.transcript(itemId)Full timestamped transcript for a media item. Returns paragraphs with speaker labels.
save ideo.save(key, value)Persist a JSON value under a key, scoped to this archive. Use for caching app state, bookmarks, user interactions, etc.
load ideo.load(key)Load a previously saved value by key. Returns null if not found.
// Search for relevant items
const items = await ideo.search("climate change");
// items: [{ id, title, mediaType, durationSeconds, similarity }, ...]
// Extract a clip from a specific item
const clip = await ideo.clip("key moment", { itemId: items[0].id });
// clip: { mediaItemId, content, startTime, endTime, playbackId }
// Full AMA pipeline: search → clip → cite
const ranked = await ideo.search("key themes");
const clips = await Promise.all(
ranked.map(item => ideo.clip("key themes", { itemId: item.id }))
);
const [answer, refs] = await ideo.cite("What are the key themes?", clips);
// Browse all media
const allItems = await ideo.items();
const fullTranscript = await ideo.transcript(allItems[0].id);
// Persist and retrieve app state
await ideo.save("bookmarks", [{ itemId: "...", note: "interesting" }]);
const bookmarks = await ideo.load("bookmarks");The Studio is where you build custom exploration tools for your archive. Start from a template or describe what you want, then refine it through conversation.
When you're satisfied with an app, you can save and publish it:
/explore/[slug] — a standalone page anyone can visit and use.