From 8781edffb7050b8ffd97c186c9ce5346bd629e8d Mon Sep 17 00:00:00 2001 From: Adam Spice Date: Wed, 30 Sep 2026 23:11:25 +1300 Subject: [PATCH] Add opt-in portrait and landscape stream overlay artwork (#3183) --- .../public/img/bambuddy_logo_powered_by.png | Bin 0 -> 67595 bytes frontend/scripts/check-i18n-parity.mjs | 3 + .../components/StreamOverlayBuilder.test.tsx | 16 ++ .../pages/StreamOverlayPage.test.tsx | 89 +++++++ .../src/components/StreamOverlayBuilder.tsx | 21 +- .../src/components/UpdatedStreamOverlay.css | 245 ++++++++++++++++++ .../src/components/UpdatedStreamOverlay.tsx | 173 +++++++++++++ frontend/src/i18n/locales/de.ts | 5 + frontend/src/i18n/locales/en.ts | 5 + frontend/src/i18n/locales/es.ts | 5 + frontend/src/i18n/locales/fr.ts | 5 + frontend/src/i18n/locales/it.ts | 5 + frontend/src/i18n/locales/ja.ts | 5 + frontend/src/i18n/locales/ko.ts | 5 + frontend/src/i18n/locales/nl.ts | 5 + frontend/src/i18n/locales/pt-BR.ts | 5 + frontend/src/i18n/locales/ru.ts | 5 + frontend/src/i18n/locales/sv.ts | 5 + frontend/src/i18n/locales/tr.ts | 5 + frontend/src/i18n/locales/uk.ts | 5 + frontend/src/i18n/locales/zh-CN.ts | 5 + frontend/src/i18n/locales/zh-TW.ts | 5 + frontend/src/pages/StreamOverlayPage.tsx | 23 ++ 23 files changed, 644 insertions(+), 1 deletion(-) create mode 100644 frontend/public/img/bambuddy_logo_powered_by.png create mode 100644 frontend/src/components/UpdatedStreamOverlay.css create mode 100644 frontend/src/components/UpdatedStreamOverlay.tsx diff --git a/frontend/public/img/bambuddy_logo_powered_by.png b/frontend/public/img/bambuddy_logo_powered_by.png new file mode 100644 index 0000000000000000000000000000000000000000..9a87c672a7ecff1f721aff7d70c0821205720470 GIT binary patch literal 67595 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 literal 0 HcmV?d00001 diff --git a/frontend/scripts/check-i18n-parity.mjs b/frontend/scripts/check-i18n-parity.mjs index e2ef21c36..3f448d90c 100644 --- a/frontend/scripts/check-i18n-parity.mjs +++ b/frontend/scripts/check-i18n-parity.mjs @@ -176,6 +176,7 @@ const DE_COGNATES = [ 'Diagnose', // DE: same spelling/meaning as EN — camera diagnostic button label '{{filament}} @ {{temp}}°C', // drying badge: filament code + universal °C 'Score', // #1546 AI detection modal — established DE loanword (Duden) + 'Version 2', // stream overlay artwork picker (#3177) — same word in German ]; // French cognates — many UI labels overlap with English exactly. @@ -225,6 +226,7 @@ const FR_COGNATES = [ 'Simple', 'Expert', // slicer settings visibility tiers — identical words in French 'Support', // same word in French 'Photos', '{{count}} photo', '{{count}} photos', // file details photo strip (#3077) — same word in French + 'Version 2', // stream overlay artwork picker (#3177) — same word in French ]; // Italian cognates. @@ -393,6 +395,7 @@ const SV_COGNATES = [ 'Port', '(System)', 'Autologin', 'Process', 'Filament {{n}}', 'Region', 'Global', 'Normal', 'Version', 'max {{n}}', 'Expert', 'Filament {{index}} ({{type}})', 'Material:', '(Inv)', 'Original', 'Commit', 'Extruder', 'Gradient', 'Proxy', 'Metadata', '{{count}} filament', 'Temp', 'Min', 'ntfy, Pushover, Discord, etc.', 'Hex: #{{hex}}', 'Designer', 'Prefix', 'Trend', 'max(global {{global}}d, SKU {{sku}}d)', 'Slicer', + 'Version 2', // stream overlay artwork picker (#3177) — same word in Swedish ]; // Turkish cognates — technical UI labels that Turkish speakers use verbatim diff --git a/frontend/src/__tests__/components/StreamOverlayBuilder.test.tsx b/frontend/src/__tests__/components/StreamOverlayBuilder.test.tsx index 921a2baac..3026ba432 100644 --- a/frontend/src/__tests__/components/StreamOverlayBuilder.test.tsx +++ b/frontend/src/__tests__/components/StreamOverlayBuilder.test.tsx @@ -68,6 +68,22 @@ describe('StreamOverlayBuilder', () => { expect(screen.getByTitle('Overlay preview')).toHaveAttribute('src', originalUrl); }); + it('opts into artwork in the URL and preview and restores the original URL', async () => { + const user = userEvent.setup(); + render(); + const artwork = await screen.findByLabelText('Artwork'); + expect(artwork).toHaveValue('1'); + const original = shownUrl(); + expect(new URL(original).searchParams.has('artwork')).toBe(false); + await user.selectOptions(artwork, 'Version 2'); + expect(new URL(shownUrl()).searchParams.get('artwork')).toBe('2'); + await user.click(screen.getByRole('button', { name: 'Show preview' })); + expect(screen.getByTitle('Overlay preview')).toHaveAttribute('src', shownUrl()); + await user.selectOptions(artwork, 'Classic'); + expect(shownUrl()).toBe(original); + expect(screen.getByTitle('Overlay preview')).toHaveAttribute('src', original); + }); + it('switches printer', async () => { const user = userEvent.setup(); render(); diff --git a/frontend/src/__tests__/pages/StreamOverlayPage.test.tsx b/frontend/src/__tests__/pages/StreamOverlayPage.test.tsx index bb0e093a0..78d70e053 100644 --- a/frontend/src/__tests__/pages/StreamOverlayPage.test.tsx +++ b/frontend/src/__tests__/pages/StreamOverlayPage.test.tsx @@ -106,6 +106,95 @@ describe('StreamOverlayPage', () => { vi.unstubAllGlobals(); }); + describe('updated artwork', () => { + it('maps legacy model codes in version 2', async () => { + server.use(http.get('/api/v1/printers/:id', () => HttpResponse.json({ ...mockPrinter, model: 'BL-P001' }))); + renderOverlayPage(1, '?artwork=2&show=model'); + expect(await screen.findByText('X1C')).toBeInTheDocument(); + expect(screen.queryByText('BL-P001')).not.toBeInTheDocument(); + }); + + it.each(['', '?artwork=other', '?artwork=updated'])('retains the original renderer for %s', async (query) => { + const { container } = renderOverlayPage(1, query); + await screen.findByAltText('Bambuddy'); + expect(container.querySelector('.updated-overlay')).not.toBeInTheDocument(); + expect(screen.getByAltText('Camera stream')).toHaveClass('object-contain'); + }); + it('uses token data, rotation and both nozzles without inventing missing temperatures', async () => { + server.use(http.get('/api/v1/printers/:id/overlay-status', () => HttpResponse.json({ + ...mockStatusPrinting, name: 'Token printer', model: 'O1D', camera_rotation: 90, + time_format: '24h', temperatures: { nozzle: 210, nozzle_target: 220, nozzle_2: 215, bed: 45 }, + }))); + renderOverlayPage(1, '?artwork=2&token=bblt_test&show=model,nozzle,bed,chamber&size=large'); + expect(await screen.findByText('H2D')).toBeInTheDocument(); + expect(screen.queryByText('Token printer')).not.toBeInTheDocument(); + expect(screen.getByText('Nozzle 2')).toBeInTheDocument(); + expect(screen.queryByText('Chamber')).not.toBeInTheDocument(); + const camera = screen.getByAltText('Camera stream'); + expect(camera).toHaveAttribute('src', expect.stringContaining('token=bblt_test')); + expect(camera).toHaveStyle({ transform: 'translate(-50%, -50%) rotate(90deg)' }); + expect(camera.closest('.updated-overlay')).toHaveAttribute('data-size', 'large'); + expect(screen.queryByRole('progressbar')).not.toBeInTheDocument(); + }); + + it.each([ + [90, { width: '640px', height: '360px' }], + [0, null], + ])('sizes a camera turned %i degrees from its slot, not the viewport', async (rotation, expected) => { + // A portrait source: the camera fills a 360 x 640 middle row, so the + // viewport (the old vw/vh fallback) would be the wrong box to swap. + const rect = vi.spyOn(HTMLElement.prototype, 'getBoundingClientRect').mockImplementation(function (this: HTMLElement) { + return this.classList.contains('updated-overlay__camera') + ? ({ width: 360, height: 640, top: 0, left: 0, right: 360, bottom: 640, x: 0, y: 0, toJSON: () => ({}) } as DOMRect) + : ({ width: 0, height: 0, top: 0, left: 0, right: 0, bottom: 0, x: 0, y: 0, toJSON: () => ({}) } as DOMRect); + }); + try { + server.use(http.get('/api/v1/printers/:id', () => HttpResponse.json({ ...mockPrinter, camera_rotation: rotation }))); + renderOverlayPage(1, '?artwork=2'); + const camera = await screen.findByAltText('Camera stream'); + await waitFor(() => expect(camera).toHaveStyle({ transform: `translate(-50%, -50%) rotate(${rotation}deg)` })); + if (expected) { + await waitFor(() => expect(camera).toHaveStyle(expected)); + } else { + expect(camera.style.width).toBe(''); + expect(camera.style.height).toBe(''); + } + } finally { + rect.mockRestore(); + } + }); + + it('renders selected fields and accessible progress', async () => { + server.use(http.get('/api/v1/printers/:id/status', () => HttpResponse.json(mockStatusPrinting))); + renderOverlayPage(1, '?artwork=2&show=printer,model,filename,status,progress,layers,eta'); + expect(await screen.findByRole('progressbar')).toHaveAttribute('aria-valuenow', '45'); + expect(screen.getByText('X1 Carbon')).toBeInTheDocument(); + expect(screen.getByText('X1C')).toBeInTheDocument(); + expect(screen.getByText('Benchy')).toBeInTheDocument(); + expect(screen.getByText('150 / 300')).toBeInTheDocument(); + }); + it('hides all unselected information, including idle status', async () => { + const { container } = renderOverlayPage(1, '?artwork=2&show=&camera=false'); + await screen.findByAltText('Bambuddy'); + expect(screen.queryByText('Printer is idle')).not.toBeInTheDocument(); + expect(screen.queryByAltText('Camera stream')).not.toBeInTheDocument(); + expect(container.querySelector('.updated-overlay__panel')).not.toBeInTheDocument(); + }); + it.each(['FINISH', 'FAILED'])('shows %s without contradictory idle text', async (state) => { + server.use(http.get('/api/v1/printers/:id/status', () => HttpResponse.json({ ...mockStatusPrinting, state }))); + renderOverlayPage(1, '?artwork=2&show=status,progress'); + expect(await screen.findByText(state === 'FINISH' ? 'Finished' : 'Failed')).toBeInTheDocument(); + expect(screen.queryByText('Printer is idle')).not.toBeInTheDocument(); + expect(screen.queryByRole('progressbar')).not.toBeInTheDocument(); + }); + it('hides stale progress when disconnected', async () => { + server.use(http.get('/api/v1/printers/:id/status', () => HttpResponse.json({ ...mockStatusPrinting, connected: false }))); + renderOverlayPage(1, '?artwork=2&show=status,progress,layers,eta'); + expect(await screen.findByText('Printer offline')).toBeInTheDocument(); + expect(screen.queryByRole('progressbar')).not.toBeInTheDocument(); + }); + }); + describe('rendering', () => { it('renders overlay page for printer', async () => { renderOverlayPage(1); diff --git a/frontend/src/components/StreamOverlayBuilder.tsx b/frontend/src/components/StreamOverlayBuilder.tsx index c9c7810c0..02be20e4a 100644 --- a/frontend/src/components/StreamOverlayBuilder.tsx +++ b/frontend/src/components/StreamOverlayBuilder.tsx @@ -47,6 +47,9 @@ export function StreamOverlayBuilder() { const [fields, setFields] = useState(DEFAULT_FIELDS); const [size, setSize] = useState('medium'); const [fps, setFps] = useState(DEFAULT_FPS); + // '1' is the original overlay; the renderer is picked by version, not by a + // name like "updated" that stops being true once there's a newer one. + const [artwork, setArtwork] = useState<'1' | '2'>('1'); const [showCamera, setShowCamera] = useState(true); const [token, setToken] = useState(''); const [preview, setPreview] = useState(false); @@ -80,10 +83,11 @@ export function StreamOverlayBuilder() { params.set('show', selected.join(',')); if (size !== 'medium') params.set('size', size); if (fps !== DEFAULT_FPS) params.set('fps', String(fps)); + if (artwork !== '1') params.set('artwork', artwork); if (!showCamera) params.set('camera', 'false'); if (token.trim()) params.set('token', token.trim()); return `${window.location.origin}/overlay/${id}?${params.toString()}`; - }, [printerId, fields, size, fps, showCamera, token]); + }, [printerId, fields, size, fps, showCamera, token, artwork]); const toggleField = (key: string) => { setFields((prev) => (prev.includes(key) ? prev.filter((f) => f !== key) : [...prev, key])); @@ -162,6 +166,21 @@ export function StreamOverlayBuilder() { +

+ + +
+