OmniVoice-Studio / scripts /capture-screenshots.cjs
LΓͺ Phi Nam
Deploy to HF Space
94004a2
Raw
History Blame Contribute Delete
4.38 kB
const { chromium } = require('playwright');
(async () => {
const browser = await chromium.launch({ headless: true });
const ctx = await browser.newContext({
viewport: { width: 1440, height: 900 },
deviceScaleFactor: 2,
colorScheme: 'dark',
});
const page = await ctx.newPage();
const dir = 'docs';
await page.goto('http://localhost:3901', { waitUntil: 'networkidle', timeout: 15000 });
await page.waitForTimeout(2000);
// Helper: click a sidebar icon by index (0-based, top to bottom)
async function clickSidebarIcon(index) {
const icons = page.locator('nav button, nav a, aside button, aside a, [class*="sidebar"] button, [class*="sidebar"] a, [class*="Sidebar"] button');
const count = await icons.count();
if (index < count) {
await icons.nth(index).click();
await page.waitForTimeout(1500);
}
}
// 1. Gallery / Voice Library β€” click the icon that looks like a folder/library
// Try to find gallery-related navigation
try {
// Look for gallery/library nav item
const galleryBtn = page.locator('button:has-text("Gallery"), a:has-text("Gallery"), [data-tab="gallery"], [title*="allery"], [title*="ibrary"]').first();
if (await galleryBtn.isVisible({ timeout: 1000 })) {
await galleryBtn.click();
await page.waitForTimeout(2000);
await page.screenshot({ path: `${dir}/screenshot-gallery.png`, fullPage: false });
console.log('βœ… screenshot-gallery.png');
}
} catch(e) { console.log('Gallery not found via text, trying sidebar icons'); }
// 2. Settings page
try {
const settingsBtn = page.locator('button:has-text("Settings"), a:has-text("Settings"), [data-tab="settings"], [title*="etting"]').first();
if (await settingsBtn.isVisible({ timeout: 1000 })) {
await settingsBtn.click();
await page.waitForTimeout(2000);
await page.screenshot({ path: `${dir}/screenshot-settings.png`, fullPage: false });
console.log('βœ… screenshot-settings.png');
}
} catch(e) { console.log('Settings not found via text'); }
// 3. Try clicking each sidebar icon to discover hidden views
// The sidebar icons are the vertical strip on the left
const sideIcons = page.locator('aside > div > button, aside > button, nav[class*="side"] button, [class*="sidebar"] > button, [class*="Sidebar"] > button');
const iconCount = await sideIcons.count();
console.log(`Found ${iconCount} sidebar icons`);
// Click each icon and screenshot if it reveals a new view
const captured = new Set();
for (let i = 0; i < Math.min(iconCount, 10); i++) {
try {
await sideIcons.nth(i).click();
await page.waitForTimeout(1500);
// Get the page title/header to name the screenshot
const header = await page.locator('h1, h2, [class*="title"], [class*="header"] span').first().textContent().catch(() => '');
const name = (header || `view-${i}`).toLowerCase().replace(/[^a-z0-9]+/g, '-').slice(0, 30);
if (!captured.has(name)) {
captured.add(name);
await page.screenshot({ path: `${dir}/screenshot-${name}.png`, fullPage: false });
console.log(`βœ… screenshot-${name}.png (icon ${i})`);
}
} catch(e) {}
}
// 4. Also try bottom-bar items (LOGS, Backend, Frontend, Tauri)
try {
const logsBtn = page.locator('button:has-text("LOGS"), [class*="log"] button').first();
if (await logsBtn.isVisible({ timeout: 1000 })) {
await logsBtn.click();
await page.waitForTimeout(1500);
// Expand log panel if collapsed
await page.screenshot({ path: `${dir}/screenshot-logs.png`, fullPage: false });
console.log('βœ… screenshot-logs.png');
}
} catch(e) {}
// 5. A/B Compare button
try {
// First go to launchpad
await page.goto('http://localhost:3901', { waitUntil: 'networkidle', timeout: 10000 });
await page.waitForTimeout(1500);
const abBtn = page.locator('button:has-text("A/B"), button:has-text("Compare")').first();
if (await abBtn.isVisible({ timeout: 1000 })) {
await abBtn.click();
await page.waitForTimeout(2000);
await page.screenshot({ path: `${dir}/screenshot-ab-compare.png`, fullPage: false });
console.log('βœ… screenshot-ab-compare.png');
}
} catch(e) { console.log('A/B Compare not found'); }
await browser.close();
console.log('All done!');
})();