docs: update banner tagline to Android Phone and add native Chinese banner
This commit is contained in:
1 parent
62cb3d8e53
commit
46e1e8b935
6 files changed
+90
-32
No files matched your search
@@ -1,5 +1,5 @@
|
|||||||
<p align="center">
|
<p align="center">
|
||||||
<img src="./docs/assets/artemis-banner.png?v=2" alt="ARTEMIS Banner" width="100%" />
|
<img src="./docs/assets/artemis-banner.png?v=3" alt="ARTEMIS Banner" width="100%" />
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
|
|||||||
+1
-1
@@ -1,5 +1,5 @@
|
|||||||
<p align="center">
|
<p align="center">
|
||||||
<img src="./docs/assets/artemis-banner.png?v=2" alt="ARTEMIS Banner" width="100%" />
|
<img src="./docs/assets/artemis-banner-cn.png?v=3" alt="ARTEMIS Banner" width="100%" />
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
|
|||||||
Binary file not shown.
|
After Width: | Height: | Size: 205 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 205 KiB After Width: | Height: | Size: 204 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 205 KiB After Width: | Height: | Size: 204 KiB |
@@ -16,8 +16,8 @@ import os
|
|||||||
import subprocess
|
import subprocess
|
||||||
|
|
||||||
|
|
||||||
def create_banner_html():
|
def create_banner_html(lang="en"):
|
||||||
return """<!DOCTYPE html>
|
html_template = """<!DOCTYPE html>
|
||||||
<html lang="en">
|
<html lang="en">
|
||||||
<head>
|
<head>
|
||||||
<meta charset="UTF-8">
|
<meta charset="UTF-8">
|
||||||
@@ -719,20 +719,20 @@ def create_banner_html():
|
|||||||
|
|
||||||
<!-- Clear, Crisp Subtitle -->
|
<!-- Clear, Crisp Subtitle -->
|
||||||
<div class="brand-tagline">
|
<div class="brand-tagline">
|
||||||
Test Any Pixel / Android App with <span>Autonomous AI</span>
|
__TAGLINE__
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- User Prompt Input Example -->
|
<!-- User Prompt Input Example -->
|
||||||
<div class="prompt-box">
|
<div class="prompt-box">
|
||||||
<div class="prompt-header">
|
<div class="prompt-header">
|
||||||
<span class="prompt-label">Goal / Prompt</span>
|
<span class="prompt-label">__PROMPT_LABEL__</span>
|
||||||
<div class="prompt-status">
|
<div class="prompt-status">
|
||||||
<div class="status-pulse"></div>
|
<div class="status-pulse"></div>
|
||||||
<span>RUNNING ON DEVICE</span>
|
<span>__PROMPT_STATUS__</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="prompt-text">
|
<div class="prompt-text">
|
||||||
<span>></span> Connect to Bluetooth earbuds, play a song, and capture CPU usage metrics
|
<span>></span> __PROMPT_TEXT__
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -745,51 +745,51 @@ def create_banner_html():
|
|||||||
<div class="console-header">
|
<div class="console-header">
|
||||||
<div class="console-title-group">
|
<div class="console-title-group">
|
||||||
<div class="console-dot"></div>
|
<div class="console-dot"></div>
|
||||||
<span class="console-title">Host Agent Console</span>
|
<span class="console-title">__CONSOLE_TITLE__</span>
|
||||||
</div>
|
</div>
|
||||||
<span class="console-badge">MONITORING</span>
|
<span class="console-badge">__CONSOLE_BADGE__</span>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="step-list">
|
<div class="step-list">
|
||||||
<div class="step-item">
|
<div class="step-item">
|
||||||
<span class="step-icon-done">✓</span>
|
<span class="step-icon-done">✓</span>
|
||||||
<span class="step-text-done">1. Connect to Bluetooth earbuds</span>
|
<span class="step-text-done">__STEP_1__</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="step-item">
|
<div class="step-item">
|
||||||
<span class="step-icon-done">✓</span>
|
<span class="step-icon-done">✓</span>
|
||||||
<span class="step-text-done">2. Launch music player & play song</span>
|
<span class="step-text-done">__STEP_2__</span>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- Active Step -->
|
<!-- Active Step -->
|
||||||
<div class="step-active-card">
|
<div class="step-active-card">
|
||||||
<div class="step-active-header">
|
<div class="step-active-header">
|
||||||
<span class="step-active-title">▶ 3. Capture CPU usage metrics</span>
|
<span class="step-active-title">__STEP_3_TITLE__</span>
|
||||||
<span class="step-active-time">Active</span>
|
<span class="step-active-time">__STEP_3_TIME__</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="step-active-desc">
|
<div class="step-active-desc">
|
||||||
ADB polling top -n 1 <span>(pid: 14208)</span>
|
__STEP_3_DESC__
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- Host Telemetry Metrics Box -->
|
<!-- Host Telemetry Metrics Box -->
|
||||||
<div class="metrics-panel">
|
<div class="metrics-panel">
|
||||||
<div class="metric-row">
|
<div class="metric-row">
|
||||||
<span class="metric-label">Target App CPU</span>
|
<span class="metric-label">__METRIC_1_LABEL__</span>
|
||||||
<span class="metric-value cpu-highlight">4.2%</span>
|
<span class="metric-value cpu-highlight">4.2%</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="metric-row">
|
<div class="metric-row">
|
||||||
<span class="metric-label">Bluetooth Audio</span>
|
<span class="metric-label">__METRIC_2_LABEL__</span>
|
||||||
<span class="metric-value status-ok">● Connected</span>
|
<span class="metric-value status-ok">__METRIC_2_VAL__</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="metric-row">
|
<div class="metric-row">
|
||||||
<span class="metric-label">Sample Rate</span>
|
<span class="metric-label">__METRIC_3_LABEL__</span>
|
||||||
<span class="metric-value">48kHz / A2DP</span>
|
<span class="metric-value">48kHz / A2DP</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="step-pending">
|
<div class="step-pending">
|
||||||
<span>○</span>
|
<span>○</span>
|
||||||
<span>4. Assert CPU < 5.0% threshold</span>
|
<span>__STEP_4__</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -800,31 +800,31 @@ def create_banner_html():
|
|||||||
<div class="phone-island"></div>
|
<div class="phone-island"></div>
|
||||||
|
|
||||||
<div class="screen-header">
|
<div class="screen-header">
|
||||||
<span class="screen-title">Now Playing</span>
|
<span class="screen-title">__SCREEN_TITLE__</span>
|
||||||
<span class="device-tag">● PIXEL LAB</span>
|
<span class="device-tag">__DEVICE_TAG__</span>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="mock-item-card">
|
<div class="mock-item-card">
|
||||||
<div class="item-thumb">🎵</div>
|
<div class="item-thumb">🎵</div>
|
||||||
<div class="item-info">
|
<div class="item-info">
|
||||||
<span class="item-title">Coldplay - Yellow</span>
|
<span class="item-title">Coldplay - Yellow</span>
|
||||||
<span class="item-sub">Output: Pixel Buds Pro</span>
|
<span class="item-sub">__ITEM_SUB__</span>
|
||||||
</div>
|
</div>
|
||||||
<span class="item-price">Playing ▶</span>
|
<span class="item-price">__ITEM_PRICE__</span>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="mock-secondary-card">
|
<div class="mock-secondary-card">
|
||||||
<span class="secondary-text">Active Audio Output Device</span>
|
<span class="secondary-text">__SEC_TEXT__</span>
|
||||||
<span class="secondary-val">🎧 Pixel Buds Pro (A2DP)</span>
|
<span class="secondary-val">🎧 Pixel Buds Pro (A2DP)</span>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="action-target-wrapper">
|
<div class="action-target-wrapper">
|
||||||
<!-- AI Grounding Box on Real Mobile Target -->
|
<!-- AI Grounding Box on Real Mobile Target -->
|
||||||
<div class="grounding-box">
|
<div class="grounding-box">
|
||||||
<div class="grounding-tag">🎯 GROUNDED (0.99)</div>
|
<div class="grounding-tag">__GROUNDING_TAG__</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="mock-btn">
|
<div class="mock-btn">
|
||||||
Media Output Controls
|
__MOCK_BTN__
|
||||||
</div>
|
</div>
|
||||||
<!-- Tap Ripple -->
|
<!-- Tap Ripple -->
|
||||||
<div class="tap-point">
|
<div class="tap-point">
|
||||||
@@ -840,6 +840,62 @@ def create_banner_html():
|
|||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
"""
|
"""
|
||||||
|
if lang == "cn":
|
||||||
|
replacements = {
|
||||||
|
"__TAGLINE__": "用 <span>自主 AI</span> 测试任意安卓手机",
|
||||||
|
"__PROMPT_LABEL__": "目标 / 提示词",
|
||||||
|
"__PROMPT_STATUS__": "设备实机运行中",
|
||||||
|
"__PROMPT_TEXT__": "连接蓝牙耳机播放歌曲,并持续采集 CPU 性能指标",
|
||||||
|
"__CONSOLE_TITLE__": "宿主智能体控制台",
|
||||||
|
"__CONSOLE_BADGE__": "实时监控中",
|
||||||
|
"__STEP_1__": "1. 自动连接蓝牙耳机",
|
||||||
|
"__STEP_2__": "2. 打开播放器并播放歌曲",
|
||||||
|
"__STEP_3_TITLE__": "▶ 3. 持续采集 CPU 性能指标",
|
||||||
|
"__STEP_3_TIME__": "运行中",
|
||||||
|
"__STEP_3_DESC__": "ADB 轮询 top -n 1 <span>(进程 ID: 14208)</span>",
|
||||||
|
"__METRIC_1_LABEL__": "目标应用 CPU",
|
||||||
|
"__METRIC_2_LABEL__": "蓝牙音频状态",
|
||||||
|
"__METRIC_2_VAL__": "● 已连接",
|
||||||
|
"__METRIC_3_LABEL__": "音频采样率",
|
||||||
|
"__STEP_4__": "4. 断言验证 CPU < 5.0% 阈值",
|
||||||
|
"__SCREEN_TITLE__": "正在播放",
|
||||||
|
"__DEVICE_TAG__": "● PIXEL 实机",
|
||||||
|
"__ITEM_SUB__": "输出设备: Pixel Buds Pro",
|
||||||
|
"__ITEM_PRICE__": "播放中 ▶",
|
||||||
|
"__SEC_TEXT__": "当前音频输出设备",
|
||||||
|
"__GROUNDING_TAG__": "🎯 AI 视觉锚定 (0.99)",
|
||||||
|
"__MOCK_BTN__": "媒体输出控制器",
|
||||||
|
}
|
||||||
|
else:
|
||||||
|
replacements = {
|
||||||
|
"__TAGLINE__": "Test Any Android Phone with <span>Autonomous AI</span>",
|
||||||
|
"__PROMPT_LABEL__": "Goal / Prompt",
|
||||||
|
"__PROMPT_STATUS__": "RUNNING ON DEVICE",
|
||||||
|
"__PROMPT_TEXT__": "Connect to Bluetooth earbuds, play a song, and capture CPU usage metrics",
|
||||||
|
"__CONSOLE_TITLE__": "Host Agent Console",
|
||||||
|
"__CONSOLE_BADGE__": "MONITORING",
|
||||||
|
"__STEP_1__": "1. Connect to Bluetooth earbuds",
|
||||||
|
"__STEP_2__": "2. Launch music player & play song",
|
||||||
|
"__STEP_3_TITLE__": "▶ 3. Capture CPU usage metrics",
|
||||||
|
"__STEP_3_TIME__": "Active",
|
||||||
|
"__STEP_3_DESC__": "ADB polling top -n 1 <span>(pid: 14208)</span>",
|
||||||
|
"__METRIC_1_LABEL__": "Target App CPU",
|
||||||
|
"__METRIC_2_LABEL__": "Bluetooth Audio",
|
||||||
|
"__METRIC_2_VAL__": "● Connected",
|
||||||
|
"__METRIC_3_LABEL__": "Sample Rate",
|
||||||
|
"__STEP_4__": "4. Assert CPU < 5.0% threshold",
|
||||||
|
"__SCREEN_TITLE__": "Now Playing",
|
||||||
|
"__DEVICE_TAG__": "● PIXEL LAB",
|
||||||
|
"__ITEM_SUB__": "Output: Pixel Buds Pro",
|
||||||
|
"__ITEM_PRICE__": "Playing ▶",
|
||||||
|
"__SEC_TEXT__": "Active Audio Output Device",
|
||||||
|
"__GROUNDING_TAG__": "🎯 GROUNDED (0.99)",
|
||||||
|
"__MOCK_BTN__": "Media Output Controls",
|
||||||
|
}
|
||||||
|
|
||||||
|
for key, val in replacements.items():
|
||||||
|
html_template = html_template.replace(key, val)
|
||||||
|
return html_template
|
||||||
|
|
||||||
|
|
||||||
def render_image(html_str, output_path):
|
def render_image(html_str, output_path):
|
||||||
@@ -870,9 +926,11 @@ from pathlib import Path
|
|||||||
assets_dir = Path(__file__).resolve().parent
|
assets_dir = Path(__file__).resolve().parent
|
||||||
os.makedirs(assets_dir, exist_ok=True)
|
os.makedirs(assets_dir, exist_ok=True)
|
||||||
|
|
||||||
html_content = create_banner_html()
|
# Generate English main banner and en banner
|
||||||
|
en_html = create_banner_html(lang="en")
|
||||||
|
render_image(en_html, str(assets_dir / "artemis-banner.png"))
|
||||||
|
render_image(en_html, str(assets_dir / "artemis-banner-en.png"))
|
||||||
|
|
||||||
# Generate main banner
|
# Generate Chinese banner
|
||||||
render_image(html_content, str(assets_dir / "artemis-banner.png"))
|
cn_html = create_banner_html(lang="cn")
|
||||||
# Also update en banner for consistency
|
render_image(cn_html, str(assets_dir / "artemis-banner-cn.png"))
|
||||||
render_image(html_content, str(assets_dir / "artemis-banner-en.png"))
|
|
||||||
Reference in new issue
Block a user