Openai Whisper
OpenAI Whisper:使用 Whisper 模型进行视频语音识别和转录。
clawhub install openai-whisperCanvas as an app platform. Build, store, and run rich visual apps on the OpenClaw Canvas.
# Install Skill (downloads SKILL.md to .claude/skills/) clawhub install canvas-os # Then just tell Claude: "use 🖥️ Canvas-OS to help me..."
# Same install command — works with all SKILL.md-compatible AI coding tools clawhub install canvas-os
This Skill is compatible with the OpenClaw standard. After installation, a SKILL.md file is auto-generated, usable by any OpenClaw-compatible AI Agent (Claude Code, Cursor, Windsurf, etc.).
file:///path/to/file.html (blocked by Canvas security)CANVAS-LOADING.md for detailed guide + troubleshootingcanvas-inject.py — Formats HTML for direct injection~/.openclaw/workspace/apps/[app-name]/
├── index.html # The UI (self-contained recommended)
├── data.json # Persistent state
└── manifest.json # App metadata
cd ~/.openclaw/workspace/apps/[app-name]
python3 -m http.server [PORT] > /dev/null 2>&1 &
NODE="Your Node Name" # Get from: openclaw nodes status
openclaw nodes canvas navigate --node "$NODE" "http://localhost:[PORT]/"
openclaw nodes canvas eval --node "$NODE" --js "app.setData({...})"
openclaw-canvas:// URL scheme has issues in current OpenClaw versions. Use http://localhost: instead.NODE="Your Node Name"
PORT=9876
APP="my-app"
# 1. Kill any existing server on the port
lsof -ti:$PORT | xargs kill -9 2>/dev/null
# 2. Start server
cd ~/.openclaw/workspace/apps/$APP
python3 -m http.server $PORT > /dev/null 2>&1 &
# 3. Wait for server
sleep 1
# 4. Navigate Canvas
openclaw nodes canvas navigate --node "$NODE" "http://localhost:$PORT/"
# 5. Inject data
openclaw nodes canvas eval --node "$NODE" --js "app.loadData({...})"
# Example using canvas tool
canvas.present(url="about:blank", target=node_name)
html_content = """<!DOCTYPE html>
<html>
<head>
<style>
body { background: #667eea; color: white; padding: 40px; }
.card { background: white; color: #333; padding: 30px; border-radius: 16px; }
</style>
</head>
<body>
<div class="card">
<h1>Your Content Here</h1>
</div>
</body>
</html>"""
# Escape backticks and inject
js_code = f"""document.open();
document.write({html_content});
document.close();"""
canvas.eval(javaScript=js_code, target=node_name)
file:///path/to/file.html) are blocked in Canvas for security. Always use localhost or direct injection.window.app or window.[appname] object:window.app = {
// Update values
setValue: (key, val) => {
document.getElementById(key).textContent = val;
},
// Bulk update
loadData: (data) => { /* render all */ },
// Notifications
notify: (msg) => { /* show toast */ }
};
function sendToAgent(message) {
window.location.href = openclaw://agent?message=${encodeURIComponent(message)};
}
// Button click → agent command
document.getElementById('btn').onclick = () => {
sendToAgent('Refresh my dashboard');
};
dashboard.setRevenue(), dashboard.setProgress(), dashboard.notify()tracker.setItems(), tracker.addItem(), tracker.toggleItem()openclaw nodes canvas a2ui push --node "$NODE" --text "
📊 QUICK STATUS
Revenue: \$500
Users: 100
Done!
"
:root {
--bg-primary: #0a0a0a;
--bg-card: #1a1a2e;
--accent-green: #00d4aa;
--accent-blue: #4a9eff;
--accent-orange: #f59e0b;
--text-primary: #fff;
--text-muted: #888;
--border: #333;
}
window.app.*openclaw nodes canvas navigate, not just openfile:/// URLs for security (sandboxing)canvas eval + document.write() insteadcurl http://localhost:[PORT]/http://localhost: not openclaw-canvas:// (URL scheme has issues)openclaw nodes canvas eval --js "typeof window.app"lsof -ti:[PORT] | xargs kill -9# Example usage in Python
from canvas_inject import inject_html_to_canvas
html = open("my-dashboard.html").read()
commands = inject_html_to_canvas(html, node_name="Your Node")
# Then use canvas tool with these commands
canvas.present(**commands["step1_present"])
canvas.eval(**commands["step2_inject"])
clawhub canvas-os create --name DataDashboard && cd DataDashboard && clawhub canvas-os dev