diff --git a/src/renderer/assets/participant-avatars/01.png b/src/renderer/assets/participant-avatars/01.png index 555980fc..152705e6 100644 Binary files a/src/renderer/assets/participant-avatars/01.png and b/src/renderer/assets/participant-avatars/01.png differ diff --git a/src/renderer/assets/participant-avatars/02.png b/src/renderer/assets/participant-avatars/02.png index 868dacec..310b3657 100644 Binary files a/src/renderer/assets/participant-avatars/02.png and b/src/renderer/assets/participant-avatars/02.png differ diff --git a/src/renderer/assets/participant-avatars/03.png b/src/renderer/assets/participant-avatars/03.png index d2e053ca..1a35f451 100644 Binary files a/src/renderer/assets/participant-avatars/03.png and b/src/renderer/assets/participant-avatars/03.png differ diff --git a/src/renderer/assets/participant-avatars/04.png b/src/renderer/assets/participant-avatars/04.png index a9269b1f..7c0479a7 100644 Binary files a/src/renderer/assets/participant-avatars/04.png and b/src/renderer/assets/participant-avatars/04.png differ diff --git a/src/renderer/assets/participant-avatars/05.png b/src/renderer/assets/participant-avatars/05.png index b3008d0e..14a55382 100644 Binary files a/src/renderer/assets/participant-avatars/05.png and b/src/renderer/assets/participant-avatars/05.png differ diff --git a/src/renderer/assets/participant-avatars/06.png b/src/renderer/assets/participant-avatars/06.png index 10bdde45..6906ebed 100644 Binary files a/src/renderer/assets/participant-avatars/06.png and b/src/renderer/assets/participant-avatars/06.png differ diff --git a/src/renderer/assets/participant-avatars/07.png b/src/renderer/assets/participant-avatars/07.png index 71092d70..e07a9285 100644 Binary files a/src/renderer/assets/participant-avatars/07.png and b/src/renderer/assets/participant-avatars/07.png differ diff --git a/src/renderer/assets/participant-avatars/08.png b/src/renderer/assets/participant-avatars/08.png index ee2d3b23..f1dd891b 100644 Binary files a/src/renderer/assets/participant-avatars/08.png and b/src/renderer/assets/participant-avatars/08.png differ diff --git a/src/renderer/assets/participant-avatars/09.png b/src/renderer/assets/participant-avatars/09.png index ceebd09a..3876a971 100644 Binary files a/src/renderer/assets/participant-avatars/09.png and b/src/renderer/assets/participant-avatars/09.png differ diff --git a/src/renderer/assets/participant-avatars/10.png b/src/renderer/assets/participant-avatars/10.png index 388d005f..7a70935c 100644 Binary files a/src/renderer/assets/participant-avatars/10.png and b/src/renderer/assets/participant-avatars/10.png differ diff --git a/src/renderer/assets/participant-avatars/11.png b/src/renderer/assets/participant-avatars/11.png index 2dbf8426..26414da4 100644 Binary files a/src/renderer/assets/participant-avatars/11.png and b/src/renderer/assets/participant-avatars/11.png differ diff --git a/src/renderer/assets/participant-avatars/12.png b/src/renderer/assets/participant-avatars/12.png index 1706574f..13805457 100644 Binary files a/src/renderer/assets/participant-avatars/12.png and b/src/renderer/assets/participant-avatars/12.png differ diff --git a/src/renderer/assets/participant-avatars/13.png b/src/renderer/assets/participant-avatars/13.png index 3d26dee8..82be9a89 100644 Binary files a/src/renderer/assets/participant-avatars/13.png and b/src/renderer/assets/participant-avatars/13.png differ diff --git a/test/renderer/utils/memberAvatarCatalog.assets.test.ts b/test/renderer/utils/memberAvatarCatalog.assets.test.ts new file mode 100644 index 00000000..c4335a7d --- /dev/null +++ b/test/renderer/utils/memberAvatarCatalog.assets.test.ts @@ -0,0 +1,41 @@ +import { readdirSync, readFileSync } from 'node:fs'; +import path from 'node:path'; + +import { describe, expect, it } from 'vitest'; + +const AVATAR_DIR = path.join(process.cwd(), 'src/renderer/assets/participant-avatars'); +const EXPECTED_AVATAR_COUNT = 13; +const MAX_AVATAR_DIMENSION_PX = 256; +const MAX_AVATAR_FILE_BYTES = 120 * 1024; +const MAX_AVATAR_CATALOG_BYTES = 1.25 * 1024 * 1024; + +function readPngDimensions(buffer: Buffer): { width: number; height: number } { + expect(buffer.subarray(0, 8).toString('hex')).toBe('89504e470d0a1a0a'); + return { + width: buffer.readUInt32BE(16), + height: buffer.readUInt32BE(20), + }; +} + +describe('participant avatar assets', () => { + it('keeps startup avatars within the renderer asset budget', () => { + const avatarFiles = readdirSync(AVATAR_DIR) + .filter((fileName) => fileName.endsWith('.png')) + .sort(); + let totalBytes = 0; + + expect(avatarFiles).toHaveLength(EXPECTED_AVATAR_COUNT); + + for (const fileName of avatarFiles) { + const buffer = readFileSync(path.join(AVATAR_DIR, fileName)); + totalBytes += buffer.byteLength; + const dimensions = readPngDimensions(buffer); + + expect(dimensions.width, fileName).toBeLessThanOrEqual(MAX_AVATAR_DIMENSION_PX); + expect(dimensions.height, fileName).toBeLessThanOrEqual(MAX_AVATAR_DIMENSION_PX); + expect(buffer.byteLength, fileName).toBeLessThanOrEqual(MAX_AVATAR_FILE_BYTES); + } + + expect(totalBytes).toBeLessThanOrEqual(MAX_AVATAR_CATALOG_BYTES); + }); +});