Bug Description
Project 268554 (EU Cloud), posthog-js 1.428.6, site: hookscreener.com
"Capture canvas elements" is ON and the remote config confirms it in the page:
{"recordCanvas": true, "canvasFps": 3, "canvasQuality": "0.4",
"recorderVersion": "v2", "scriptConfig": {"script": "posthog-recorder"}}
But every replay shows canvas areas blank.
Running rrweb directly on the page with recordCanvas:true gives ZERO canvas
mutations (type:3, source:9) while DOM mutations are captured normally:
{ total: 48, canvas: 0, bySource: { "0": 18 } }
At the same time the canvases are in the DOM, visible, and non-empty —
toDataURL("image/webp",0.4) returns 15,000–27,000 bytes for each of 11
.bkv__canvas elements.
CONTROL TEST: a brand-new plain 2D canvas, appended to the DOM and drawn to
40 times WHILE recording was running, also produced zero canvas events:
{ total: 34, canvasEvents: 0 }
So this is not specific to our rendering.
Already ruled out: SDK version (1.428.6 >> 1.105.7), project setting, a stale
config cache on our proxy (now no-store, verified), WebGL (we use 2d only),
recording being off (DOM events arrive, "[SessionRecording] starting" logs).
Is this PR PostHog/posthog#93133 ("apply later attribute mutations to the canvas replacement
image")? Its description matches our symptom exactly — "content can stay
invisible for a whole replay, even though the pixels were captured". Our
canvases do mutate width/height after creation on resize/zoom.
If so, is there an ETA for EU Cloud? Note PostHog/posthog#93133 explains blank PLAYBACK but
not the control test above, where no canvas events were emitted at RECORDING
time — possibly two separate issues.
Debug info
- [ ] PostHog Cloud, region and project ID: [please provide, you can find both at https://app.posthog.com/settings/project-details#variables]
- [ ] PostHog Hobby self-hosted with `docker compose`, version/commit: [please provide]
- [ ] PostHog self-hosted with Kubernetes (deprecated, see [`Sunsetting Kubernetes support`](https://posthog.com/blog/sunsetting-helm-support-posthog)), version/commit: [please provide]
Bug Description
Project 268554 (EU Cloud), posthog-js 1.428.6, site: hookscreener.com
"Capture canvas elements" is ON and the remote config confirms it in the page:
{"recordCanvas": true, "canvasFps": 3, "canvasQuality": "0.4",
"recorderVersion": "v2", "scriptConfig": {"script": "posthog-recorder"}}
But every replay shows canvas areas blank.
Running rrweb directly on the page with recordCanvas:true gives ZERO canvas
mutations (type:3, source:9) while DOM mutations are captured normally:
{ total: 48, canvas: 0, bySource: { "0": 18 } }
At the same time the canvases are in the DOM, visible, and non-empty —
toDataURL("image/webp",0.4) returns 15,000–27,000 bytes for each of 11
.bkv__canvas elements.
CONTROL TEST: a brand-new plain 2D canvas, appended to the DOM and drawn to
40 times WHILE recording was running, also produced zero canvas events:
{ total: 34, canvasEvents: 0 }
So this is not specific to our rendering.
Already ruled out: SDK version (1.428.6 >> 1.105.7), project setting, a stale
config cache on our proxy (now no-store, verified), WebGL (we use 2d only),
recording being off (DOM events arrive, "[SessionRecording] starting" logs).
Is this PR PostHog/posthog#93133 ("apply later attribute mutations to the canvas replacement
image")? Its description matches our symptom exactly — "content can stay
invisible for a whole replay, even though the pixels were captured". Our
canvases do mutate width/height after creation on resize/zoom.
If so, is there an ETA for EU Cloud? Note PostHog/posthog#93133 explains blank PLAYBACK but
not the control test above, where no canvas events were emitted at RECORDING
time — possibly two separate issues.
Debug info