Skip to main content
Glama
schema.py4.25 kB
"""BrowserFrame component schema and metadata.""" from typing import Literal from pydantic import BaseModel, Field from chuk_motion.components.base import ComponentMetadata class TabConfig(BaseModel): """Configuration for a browser tab.""" title: str = Field(default="New Tab", description="Tab title") active: bool = Field(default=False, description="Whether this tab is active") class BrowserFrameProps(BaseModel): """Props for BrowserFrame component.""" startFrame: int = Field(..., description="Frame when component becomes visible") durationInFrames: int = Field(..., description="Duration in frames") url: str = Field(default="https://example.com", description="URL to display in the address bar") theme: Literal["light", "dark", "chrome", "firefox", "safari", "arc"] = Field( default="chrome", description="Browser theme style" ) tabs: list[TabConfig] | None = Field( default=None, description="List of tabs to display (each with title and active status)" ) showStatus: bool = Field(default=False, description="Show status bar at bottom") statusText: str = Field(default="", description="Status bar text to display") content: str = Field( default="", description="Content to display in browser window (image path or text)" ) width: int = Field(default=1200, description="Browser window width in pixels", ge=400, le=1920) height: int = Field(default=800, description="Browser window height in pixels", ge=300, le=1080) position: Literal[ "center", "top-left", "top-center", "top-right", "center-left", "center-right", "bottom-left", "bottom-center", "bottom-right", ] = Field(default="center", description="Position of browser window on screen") shadow: bool = Field(default=True, description="Enable window shadow") class Config: extra = "forbid" METADATA = ComponentMetadata( name="BrowserFrame", description="Realistic browser window with URL bar, tabs, swappable themes (Chrome, Firefox, Safari, Arc), and optional status bar", category="demo_realism", ) # MCP schema (backward compatible) MCP_SCHEMA = { "startFrame": { "type": "number", "description": "Frame when component becomes visible", "required": True, }, "durationInFrames": { "type": "number", "description": "Duration in frames", "required": True, }, "url": { "type": "string", "description": "URL to display in the address bar", "default": "https://example.com", }, "theme": { "type": "string", "description": "Browser theme: light, dark, chrome, firefox, safari, arc", "default": "chrome", "enum": ["light", "dark", "chrome", "firefox", "safari", "arc"], }, "tabs": { "type": "array", "description": "List of tabs (objects with title and active properties)", "default": None, }, "showStatus": { "type": "boolean", "description": "Show status bar at bottom", "default": False, }, "statusText": { "type": "string", "description": "Status bar text to display", "default": "", }, "content": { "type": "string", "description": "Content to display in browser window", "default": "", }, "width": { "type": "number", "description": "Browser window width in pixels (400-1920)", "default": 1200, }, "height": { "type": "number", "description": "Browser window height in pixels (300-1080)", "default": 800, }, "position": { "type": "string", "description": "Position of browser window on screen", "default": "center", "enum": [ "center", "top-left", "top-center", "top-right", "center-left", "center-right", "bottom-left", "bottom-center", "bottom-right", ], }, "shadow": { "type": "boolean", "description": "Enable window shadow", "default": True, }, }

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/chrishayuk/chuk-mcp-remotion'

If you have feedback or need assistance with the MCP directory API, please join our Discord server