Skip to content

fix(store): scope "screenpipe" ignore-pattern to app name only#4019

Merged
louis030195 merged 2 commits into
screenpipe:mainfrom
divanshu-go:fix/screenpipe-window-title-false-exclusion
Jun 11, 2026
Merged

fix(store): scope "screenpipe" ignore-pattern to app name only#4019
louis030195 merged 2 commits into
screenpipe:mainfrom
divanshu-go:fix/screenpipe-window-title-false-exclusion

Conversation

@divanshu-go

@divanshu-go divanshu-go commented Jun 11, 2026

Copy link
Copy Markdown
Contributor

Root cause

The default ignored_windows list contained the unscoped entry "screenpipe". Unscoped patterns match when the substring appears in either the app name or the window title. This caused any browser tab whose title contained "screenpipe" (e.g. screenpipe/screenpipe — GitHub) to be resolved as an excluded SCK window ID and rendered black in capture.

Fix

Changed "screenpipe""screenpipe::". The :: scope syntax constrains the match to the app name only, leaving the title unchecked. The screenpipe app window is still excluded from self-capture; browser tabs are unaffected.

Reference

//! This module introduces a `::` delimiter convention without changing the
//! storage shape (still `Vec<String>` everywhere on disk and on the wire):
//!
//! ```text
//! "Slack" → legacy: matches app contains "slack" OR title contains "slack"
//! "Slack::#general" → scoped: app contains "slack" AND title contains "#general"
//! "::confidential" → any app, title contains "confidential"
//! "Slack::" → equivalent to legacy "Slack"
//! ```
//!

Before

Screenshot 2026-06-12 at 2 40 28 AM

After

Screenshot 2026-06-12 at 2 45 56 AM

Unscoped entry matched app name OR window title — browser tabs titled
"screenpipe/screenpipe — GitHub" were falsely excluded and rendered black.
"screenpipe::" scopes to app name only (self-capture still blocked).

https://github.com/screenpipe/screenpipe/blob/main/crates/screenpipe-core/src/window_pattern.rs#L14-L21
… app-scoped

Existing store.bin entries still carried the legacy "screenpipe" string.
Patch it to "screenpipe::" on load so the fix applies to existing installs
without requiring a manual settings reset.

https://github.com/screenpipe/screenpipe/blob/main/crates/screenpipe-core/src/window_pattern.rs#L13-L22
@divanshu-go divanshu-go reopened this Jun 11, 2026
Comment on lines +1333 to +1343
// Migrate unscoped "screenpipe" ignore-pattern to app-scoped "screenpipe::"
// so browser tabs whose title contains "screenpipe" are no longer falsely
// excluded from SCK capture and rendered black.
if let Some(Value::Array(windows)) = obj.get_mut("ignoredWindows") {
for entry in windows.iter_mut() {
if entry.as_str() == Some("screenpipe") {
*entry = Value::String("screenpipe::".to_string());
}
}
}

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The migration block is there because the default fix alone only helps new installs — existing users already have the old value written to disk.

This patches it silently on next launch. No action needed from the user.

@louis030195 louis030195 merged commit 1f07d50 into screenpipe:main Jun 11, 2026
7 of 18 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants