├── .cargo └── config.toml ├── .cursorignore ├── .cursorrules ├── .devcontainer ├── Dockerfile ├── devcontainer.json └── scripts │ ├── linux_integration.sh │ ├── postCreateCommand.sh │ └── welcome-message.txt ├── .gitattributes ├── .github ├── ISSUE_TEMPLATE │ ├── bounty.md │ ├── bug_report.md │ ├── documentation.md │ ├── feature_request.md │ ├── question.md │ ├── release-test-bounty-template.md │ └── test-bounty-template.md ├── config.yml ├── pull_request_template.md ├── scripts │ ├── audio_test.wav │ ├── check_logs.sh │ ├── generate_changelog_md.sh │ ├── install_dependencies.sh │ ├── purge_crabnebula.sh │ ├── run_screenpipe.sh │ ├── setup_audio.sh │ ├── setup_display.sh │ ├── stop_screenpipe.sh │ ├── test_audio_capture.sh │ ├── test_ocr.sh │ └── verify_tesseract.sh └── workflows │ ├── benchmark.yml │ ├── build-core-pipes.yml │ ├── ci.yml │ ├── e2e-test.yml │ ├── linux-integration-test.yml │ ├── release-app.yml │ ├── release-cli.yml │ ├── release-test-bounty.yml │ ├── style.yml │ ├── test-bounty.yml │ ├── windows-integration-test.yml │ └── windows-longevity-test.yml ├── .gitignore ├── CONTRIBUTING.md ├── Cargo.lock ├── Cargo.toml ├── LICENSE.md ├── README-ja.md ├── README-zh_CN.md ├── README.md ├── TESTING.md ├── content ├── Claude_prompt.png ├── Elon_Musk_prompt.png ├── Vercel_app.png ├── audio_transcriptions.png ├── changelogs │ ├── 0.10.0.md │ ├── 0.10.1.md │ ├── 0.10.2.md │ ├── 0.11.0.md │ ├── 0.11.9.md │ ├── 0.12.3.md │ ├── 0.14.13.md │ ├── 0.14.17.md │ ├── 0.14.18.md │ ├── 0.14.2.md │ ├── 0.14.20.md │ ├── 0.14.22.md │ ├── 0.14.24.md │ ├── 0.14.33.md │ ├── 0.15.0.md │ ├── 0.15.3.md │ ├── 0.15.5.md │ ├── 0.16.0.md │ ├── 0.16.1.md │ ├── 0.16.3.md │ ├── 0.17.0.md │ ├── 0.17.1.md │ ├── 0.17.2.md │ ├── 0.17.8.md │ ├── 0.18.0.md │ ├── 0.18.1.md │ ├── 0.18.3.md │ ├── 0.18.4.md │ ├── 0.18.9.md │ ├── 0.19.0.md │ ├── 0.19.3.md │ ├── 0.19.5.md │ ├── 0.20.2.md │ ├── 0.20.6.md │ ├── 0.20.7.md │ ├── 0.20.8.md │ ├── 0.21.2.md │ ├── 0.21.8.md │ ├── 0.21.9.md │ ├── 0.22.0.md │ ├── 0.22.1.md │ ├── 0.22.2.md │ ├── 0.22.3.md │ ├── 0.22.4.md │ ├── 0.22.5.md │ ├── 0.22.6.md │ ├── 0.22.9.md │ ├── 0.23.4.md │ ├── 0.23.6.md │ ├── 0.23.9.md │ ├── 0.24.4.md │ ├── 0.24.5.md │ ├── 0.25.0.md │ ├── 0.25.3.md │ ├── 0.25.5.md │ ├── 0.25.7.md │ ├── 0.26.0.md │ ├── 0.26.2.md │ ├── 0.26.3.md │ ├── 0.26.6.md │ ├── 0.27.0.md │ ├── 0.27.1.md │ ├── 0.27.4.md │ ├── 0.27.9.md │ ├── 0.28.4.md │ ├── 0.29.7-beta.1.md │ ├── 0.30.4.md │ ├── 0.30.5.md │ ├── 0.30.7.md │ ├── 0.30.8.md │ ├── 0.31.0.md │ ├── 0.31.1.md │ ├── 0.31.3.md │ ├── 0.31.8.md │ ├── 0.32.0.md │ ├── 0.32.11.md │ ├── 0.32.4.md │ ├── 0.33.1.md │ ├── 0.33.2.md │ ├── 0.35.12.md │ ├── 0.35.14.md │ ├── 0.35.3.md │ ├── 0.36.4.md │ ├── 0.36.5.md │ ├── 0.37.1.md │ ├── 0.37.2.md │ ├── 0.37.9.md │ ├── 0.38.1.md │ ├── 0.38.2.md │ ├── 0.38.4.md │ ├── 0.38.5.md │ ├── 0.38.8.md │ ├── 0.38.9.md │ ├── 0.39.2.md │ ├── 0.39.5.md │ ├── 0.39.6.md │ ├── 0.41.10.md │ ├── 0.41.5.md │ ├── 0.41.9.md │ ├── 0.42.1.md │ ├── 0.42.2.md │ ├── 0.42.4.md │ ├── 0.42.8.md │ ├── 0.43.0.md │ ├── 0.43.5.md │ ├── 0.43.7.md │ ├── 0.43.9.md │ ├── 0.44.0.md │ ├── 0.44.1.md │ ├── 0.44.2.md │ ├── 0.44.3.md │ ├── v0.1.95.md │ ├── v0.1.96.md │ └── v0.1.98.md ├── developer-account.png ├── diagram2.png ├── docs-mintlify-mig-tmp │ ├── .gitignore │ ├── architecture.mdx │ ├── cli-reference.mdx │ ├── contributing.mdx │ ├── docs.json │ ├── faq.mdx │ ├── favicon.ico │ ├── getting-started.mdx │ ├── home.mdx │ ├── mcp-server.mdx │ ├── openapi.yaml │ ├── operator-api.mdx │ ├── plugins.mdx │ ├── public │ │ ├── 5ire-setup.gif │ │ ├── claude-setup.gif │ │ ├── cursor-mcp-result.png │ │ ├── cursor-setup.gif │ │ ├── favicon.ico │ │ ├── lmstudio1.png │ │ ├── lmstudio2.png │ │ └── lmstudio3.png │ ├── sdk-reference.mdx │ └── terminator │ │ ├── getting-started.mdx │ │ ├── introduction.mdx │ │ ├── js-sdk-reference.mdx │ │ └── python-sdk-reference.mdx └── frame_text.png ├── install.ps1 ├── install.sh ├── pipes ├── README.md ├── assistant-ui-ollama-openai-screenpipe │ ├── .eslintrc.json │ ├── .gitignore │ ├── README.md │ ├── app │ │ ├── api │ │ │ ├── chat │ │ │ │ └── route.ts │ │ │ ├── click-by-index │ │ │ │ └── route.ts │ │ │ ├── component-source │ │ │ │ └── route.ts │ │ │ ├── fetch-external │ │ │ │ └── route.ts │ │ │ ├── get-apps │ │ │ │ └── route.ts │ │ │ ├── get-interactive-list │ │ │ │ └── route.ts │ │ │ ├── get-text │ │ │ │ └── route.ts │ │ │ ├── locator │ │ │ │ └── route.ts │ │ │ ├── log │ │ │ │ └── route.ts │ │ │ ├── press-key-by-index │ │ │ │ └── route.ts │ │ │ ├── settings │ │ │ │ └── route.ts │ │ │ └── type-by-index │ │ │ │ └── route.ts │ │ ├── assistant.tsx │ │ ├── favicon.ico │ │ ├── globals.css │ │ ├── hello-world-mcp-client │ │ │ ├── WIP-interface.ts │ │ │ ├── WIP-tool-execution-logic.ts │ │ │ ├── build-workflows.ts │ │ │ ├── cli.ts │ │ │ ├── index.ts │ │ │ ├── query-processing-engine.ts │ │ │ ├── setup.ts │ │ │ └── start-here.ts │ │ ├── layout.tsx │ │ └── page.tsx │ ├── bun.lockb │ ├── components.json │ ├── components │ │ ├── ai-presets-dialog.tsx │ │ ├── ai-presets-selector.tsx │ │ ├── assistant-ui │ │ │ ├── markdown-text.tsx │ │ │ ├── thread-list.tsx │ │ │ ├── thread.tsx │ │ │ └── tooltip-icon-button.tsx │ │ ├── playground-card.tsx │ │ ├── ready-to-use-examples │ │ │ ├── health-status.tsx │ │ │ ├── last-audio-transcription.tsx │ │ │ ├── last-ocr-image.tsx │ │ │ ├── last-ui-record.tsx │ │ │ ├── realtime-audio.tsx │ │ │ └── realtime-screen.tsx │ │ └── ui │ │ │ ├── accordion.tsx │ │ │ ├── badge.tsx │ │ │ ├── button.tsx │ │ │ ├── card.tsx │ │ │ ├── checkbox.tsx │ │ │ ├── codeblock.tsx │ │ │ ├── command.tsx │ │ │ ├── dialog.tsx │ │ │ ├── icons.tsx │ │ │ ├── input.tsx │ │ │ ├── label.tsx │ │ │ ├── popover.tsx │ │ │ ├── progress.tsx │ │ │ ├── select.tsx │ │ │ ├── separator.tsx │ │ │ ├── skeleton.tsx │ │ │ ├── slider.tsx │ │ │ ├── switch.tsx │ │ │ ├── tabs.tsx │ │ │ ├── textarea.tsx │ │ │ ├── toast.tsx │ │ │ ├── toaster.tsx │ │ │ ├── tooltip.tsx │ │ │ └── use-toast.ts │ ├── content │ │ └── components-list.json │ ├── hooks │ │ ├── use-ai-provider.tsx │ │ ├── use-health.tsx │ │ └── use-toast.ts │ ├── lib │ │ ├── actions │ │ │ ├── get-screenpipe-app-settings.ts │ │ │ ├── update-pipe-config.ts │ │ │ └── video-actions.ts │ │ ├── client-only.tsx │ │ ├── hooks │ │ │ ├── generic-settings.tsx │ │ │ ├── use-copy-to-clipboard.tsx │ │ │ ├── use-debounce.tsx │ │ │ ├── use-health-check.tsx │ │ │ ├── use-pipe-settings.ts │ │ │ ├── use-settings.ts │ │ │ └── use-sql-autocomplete.tsx │ │ ├── html-content-parser.ts │ │ ├── ollama-models-list.tsx │ │ ├── settings-provider.tsx │ │ ├── types.ts │ │ └── utils.ts │ ├── next.config.mjs │ ├── package-lock.json │ ├── package.json │ ├── pipe.json │ ├── postcss.config.mjs │ ├── public │ │ └── 128x128.png │ ├── tailwind.config.ts │ └── tsconfig.json ├── data-table │ ├── .gitignore │ ├── README.md │ ├── bun.lockb │ ├── components.json │ ├── eslint.config.mjs │ ├── next.config.ts │ ├── package.json │ ├── postcss.config.mjs │ ├── public │ │ ├── file.svg │ │ ├── globe.svg │ │ ├── next.svg │ │ ├── vercel.svg │ │ └── window.svg │ ├── src │ │ ├── app │ │ │ ├── api │ │ │ │ └── settings │ │ │ │ │ └── route.ts │ │ │ ├── favicon.ico │ │ │ ├── globals.css │ │ │ ├── layout.tsx │ │ │ └── page.tsx │ │ ├── components │ │ │ ├── ai-presets-selector.tsx │ │ │ ├── audio-transcriptions-table.tsx │ │ │ ├── database-sidebar.tsx │ │ │ ├── markdown.tsx │ │ │ ├── ocr-data-table.tsx │ │ │ ├── page.tsx │ │ │ ├── search-command.tsx │ │ │ ├── sql-autocomplete-input.tsx │ │ │ ├── ui-monitoring-table.tsx │ │ │ ├── ui │ │ │ │ ├── accordion.tsx │ │ │ │ ├── badge.tsx │ │ │ │ ├── button.tsx │ │ │ │ ├── calendar.tsx │ │ │ │ ├── card.tsx │ │ │ │ ├── checkbox.tsx │ │ │ │ ├── codeblock.tsx │ │ │ │ ├── command.tsx │ │ │ │ ├── dialog.tsx │ │ │ │ ├── dropdown-menu.tsx │ │ │ │ ├── icons.tsx │ │ │ │ ├── input.tsx │ │ │ │ ├── label.tsx │ │ │ │ ├── popover.tsx │ │ │ │ ├── progress.tsx │ │ │ │ ├── resizable.tsx │ │ │ │ ├── select.tsx │ │ │ │ ├── separator.tsx │ │ │ │ ├── sheet.tsx │ │ │ │ ├── skeleton.tsx │ │ │ │ ├── slider.tsx │ │ │ │ ├── switch.tsx │ │ │ │ ├── table.tsx │ │ │ │ ├── textarea.tsx │ │ │ │ ├── toast.tsx │ │ │ │ ├── toaster.tsx │ │ │ │ ├── tooltip.tsx │ │ │ │ └── use-toast.ts │ │ │ └── video-chunks-table.tsx │ │ └── lib │ │ │ ├── actions │ │ │ ├── get-screenpipe-app-settings.ts │ │ │ └── video-actions.ts │ │ │ ├── hooks │ │ │ ├── use-copy-to-clipboard.tsx │ │ │ ├── use-debounce.tsx │ │ │ ├── use-health-check.tsx │ │ │ ├── use-pipe-settings.tsx │ │ │ ├── use-search-history.tsx │ │ │ ├── use-settings.tsx │ │ │ └── use-sql-autocomplete.tsx │ │ │ ├── types.ts │ │ │ └── utils.ts │ ├── tailwind.config.ts │ └── tsconfig.json ├── desktop-to-table │ ├── .eslintrc.json │ ├── .gitignore │ ├── README.md │ ├── app │ │ ├── api │ │ │ ├── click-by-index │ │ │ │ └── route.ts │ │ │ ├── component-source │ │ │ │ └── route.ts │ │ │ ├── fetch-external │ │ │ │ └── route.ts │ │ │ ├── get-apps │ │ │ │ └── route.ts │ │ │ ├── get-interactive-list │ │ │ │ └── route.ts │ │ │ ├── get-text │ │ │ │ └── route.ts │ │ │ ├── locator │ │ │ │ └── route.ts │ │ │ ├── log │ │ │ │ └── route.ts │ │ │ ├── press-key-by-index │ │ │ │ └── route.ts │ │ │ ├── settings │ │ │ │ └── route.ts │ │ │ └── type-by-index │ │ │ │ └── route.ts │ │ ├── favicon.ico │ │ ├── globals.css │ │ ├── layout.tsx │ │ └── page.tsx │ ├── bun.lockb │ ├── components.json │ ├── components │ │ ├── ai-presets-dialog.tsx │ │ ├── ai-presets-selector.tsx │ │ ├── playground-card.tsx │ │ ├── ready-to-use-examples │ │ │ ├── health-status.tsx │ │ │ ├── last-audio-transcription.tsx │ │ │ ├── last-ocr-image.tsx │ │ │ ├── last-ui-record.tsx │ │ │ ├── realtime-audio.tsx │ │ │ └── realtime-screen.tsx │ │ └── ui │ │ │ ├── accordion.tsx │ │ │ ├── badge.tsx │ │ │ ├── button.tsx │ │ │ ├── card.tsx │ │ │ ├── checkbox.tsx │ │ │ ├── codeblock.tsx │ │ │ ├── command.tsx │ │ │ ├── dialog.tsx │ │ │ ├── icons.tsx │ │ │ ├── input.tsx │ │ │ ├── label.tsx │ │ │ ├── popover.tsx │ │ │ ├── progress.tsx │ │ │ ├── select.tsx │ │ │ ├── separator.tsx │ │ │ ├── skeleton.tsx │ │ │ ├── slider.tsx │ │ │ ├── switch.tsx │ │ │ ├── tabs.tsx │ │ │ ├── textarea.tsx │ │ │ ├── toast.tsx │ │ │ ├── toaster.tsx │ │ │ ├── tooltip.tsx │ │ │ └── use-toast.ts │ ├── content │ │ └── components-list.json │ ├── hooks │ │ ├── use-ai-provider.tsx │ │ ├── use-health.tsx │ │ └── use-toast.ts │ ├── lib │ │ ├── actions │ │ │ ├── get-screenpipe-app-settings.ts │ │ │ ├── update-pipe-config.ts │ │ │ └── video-actions.ts │ │ ├── client-only.tsx │ │ ├── hooks │ │ │ ├── generic-settings.tsx │ │ │ ├── use-copy-to-clipboard.tsx │ │ │ ├── use-debounce.tsx │ │ │ ├── use-health-check.tsx │ │ │ ├── use-pipe-settings.ts │ │ │ ├── use-settings.ts │ │ │ └── use-sql-autocomplete.tsx │ │ ├── html-content-parser.ts │ │ ├── ollama-models-list.tsx │ │ ├── settings-provider.tsx │ │ ├── types.ts │ │ └── utils.ts │ ├── next.config.mjs │ ├── package-lock.json │ ├── package.json │ ├── pipe.json │ ├── postcss.config.mjs │ ├── public │ │ └── 128x128.png │ ├── tailwind.config.ts │ └── tsconfig.json ├── discord-to-spreadsheet │ ├── .eslintrc.json │ ├── .gitignore │ ├── README.md │ ├── app │ │ ├── api │ │ │ ├── click-by-index │ │ │ │ └── route.ts │ │ │ ├── component-source │ │ │ │ └── route.ts │ │ │ ├── fetch-external │ │ │ │ └── route.ts │ │ │ ├── get-apps │ │ │ │ └── route.ts │ │ │ ├── get-interactive-list │ │ │ │ └── route.ts │ │ │ ├── get-text │ │ │ │ └── route.ts │ │ │ ├── locator │ │ │ │ └── route.ts │ │ │ ├── log │ │ │ │ └── route.ts │ │ │ ├── press-key-by-index │ │ │ │ └── route.ts │ │ │ ├── settings │ │ │ │ └── route.ts │ │ │ └── type-by-index │ │ │ │ └── route.ts │ │ ├── favicon.ico │ │ ├── globals.css │ │ ├── layout.tsx │ │ └── page.tsx │ ├── bun.lockb │ ├── components.json │ ├── components │ │ ├── ai-presets-dialog.tsx │ │ ├── ai-presets-selector.tsx │ │ ├── playground-card.tsx │ │ ├── ready-to-use-examples │ │ │ ├── health-status.tsx │ │ │ ├── last-audio-transcription.tsx │ │ │ ├── last-ocr-image.tsx │ │ │ ├── last-ui-record.tsx │ │ │ ├── realtime-audio.tsx │ │ │ └── realtime-screen.tsx │ │ └── ui │ │ │ ├── accordion.tsx │ │ │ ├── badge.tsx │ │ │ ├── button.tsx │ │ │ ├── card.tsx │ │ │ ├── checkbox.tsx │ │ │ ├── codeblock.tsx │ │ │ ├── command.tsx │ │ │ ├── dialog.tsx │ │ │ ├── icons.tsx │ │ │ ├── input.tsx │ │ │ ├── label.tsx │ │ │ ├── popover.tsx │ │ │ ├── progress.tsx │ │ │ ├── select.tsx │ │ │ ├── separator.tsx │ │ │ ├── skeleton.tsx │ │ │ ├── slider.tsx │ │ │ ├── switch.tsx │ │ │ ├── tabs.tsx │ │ │ ├── textarea.tsx │ │ │ ├── toast.tsx │ │ │ ├── toaster.tsx │ │ │ ├── tooltip.tsx │ │ │ └── use-toast.ts │ ├── content │ │ └── components-list.json │ ├── hooks │ │ ├── use-ai-provider.tsx │ │ ├── use-health.tsx │ │ └── use-toast.ts │ ├── lib │ │ ├── actions │ │ │ ├── get-screenpipe-app-settings.ts │ │ │ ├── update-pipe-config.ts │ │ │ └── video-actions.ts │ │ ├── client-only.tsx │ │ ├── hooks │ │ │ ├── generic-settings.tsx │ │ │ ├── use-copy-to-clipboard.tsx │ │ │ ├── use-debounce.tsx │ │ │ ├── use-health-check.tsx │ │ │ ├── use-pipe-settings.ts │ │ │ ├── use-settings.ts │ │ │ └── use-sql-autocomplete.tsx │ │ ├── html-content-parser.ts │ │ ├── ollama-models-list.tsx │ │ ├── settings-provider.tsx │ │ ├── types.ts │ │ └── utils.ts │ ├── next.config.mjs │ ├── package-lock.json │ ├── package.json │ ├── pipe.json │ ├── postcss.config.mjs │ ├── public │ │ └── 128x128.png │ ├── tailwind.config.ts │ └── tsconfig.json ├── example-pipe │ ├── .eslintrc.json │ ├── .gitignore │ ├── README.md │ ├── app │ │ ├── api │ │ │ ├── component-source │ │ │ │ └── route.ts │ │ │ ├── fetch-external │ │ │ │ └── route.ts │ │ │ └── settings │ │ │ │ └── route.ts │ │ ├── favicon.ico │ │ ├── globals.css │ │ ├── layout.tsx │ │ └── page.tsx │ ├── bun.lockb │ ├── components.json │ ├── components │ │ ├── ai-presets-dialog.tsx │ │ ├── ai-presets-selector.tsx │ │ ├── playground-card.tsx │ │ ├── ready-to-use-examples │ │ │ ├── health-status.tsx │ │ │ ├── last-audio-transcription.tsx │ │ │ ├── last-ocr-image.tsx │ │ │ ├── last-ui-record.tsx │ │ │ ├── move-mouse-click.tsx │ │ │ ├── open-app-get-text.tsx │ │ │ ├── realtime-audio.tsx │ │ │ └── realtime-screen.tsx │ │ └── ui │ │ │ ├── accordion.tsx │ │ │ ├── badge.tsx │ │ │ ├── button.tsx │ │ │ ├── card.tsx │ │ │ ├── checkbox.tsx │ │ │ ├── codeblock.tsx │ │ │ ├── command.tsx │ │ │ ├── dialog.tsx │ │ │ ├── icons.tsx │ │ │ ├── input.tsx │ │ │ ├── label.tsx │ │ │ ├── popover.tsx │ │ │ ├── progress.tsx │ │ │ ├── select.tsx │ │ │ ├── separator.tsx │ │ │ ├── skeleton.tsx │ │ │ ├── slider.tsx │ │ │ ├── sonner.tsx │ │ │ ├── switch.tsx │ │ │ ├── tabs.tsx │ │ │ ├── textarea.tsx │ │ │ ├── toast.tsx │ │ │ ├── toaster.tsx │ │ │ ├── tooltip.tsx │ │ │ └── use-toast.ts │ ├── content │ │ └── components-list.json │ ├── hooks │ │ └── use-toast.ts │ ├── lib │ │ ├── actions │ │ │ ├── get-screenpipe-app-settings.ts │ │ │ ├── update-pipe-config.ts │ │ │ └── video-actions.ts │ │ ├── client-only.tsx │ │ ├── hooks │ │ │ ├── generic-settings.tsx │ │ │ ├── use-copy-to-clipboard.tsx │ │ │ ├── use-debounce.tsx │ │ │ ├── use-health-check.tsx │ │ │ ├── use-pipe-settings.tsx │ │ │ ├── use-settings.tsx │ │ │ └── use-sql-autocomplete.tsx │ │ ├── html-content-parser.ts │ │ ├── ollama-models-list.tsx │ │ ├── settings-provider.tsx │ │ ├── types.ts │ │ └── utils.ts │ ├── next.config.mjs │ ├── package-lock.json │ ├── package.json │ ├── pipe.json │ ├── postcss.config.mjs │ ├── public │ │ └── 128x128.png │ ├── tailwind.config.ts │ └── tsconfig.json ├── hello-world-computer-use │ ├── .eslintrc.json │ ├── .gitignore │ ├── README.md │ ├── app │ │ ├── api │ │ │ ├── chat │ │ │ │ └── route.ts │ │ │ ├── click-by-index │ │ │ │ └── route.ts │ │ │ ├── component-source │ │ │ │ └── route.ts │ │ │ ├── fetch-external │ │ │ │ └── route.ts │ │ │ ├── get-apps │ │ │ │ └── route.ts │ │ │ ├── get-interactive-list │ │ │ │ └── route.ts │ │ │ ├── get-text │ │ │ │ └── route.ts │ │ │ ├── locator │ │ │ │ └── route.ts │ │ │ ├── log │ │ │ │ └── route.ts │ │ │ ├── press-key-by-index │ │ │ │ └── route.ts │ │ │ ├── settings │ │ │ │ └── route.ts │ │ │ └── type-by-index │ │ │ │ └── route.ts │ │ ├── assistant-provider.tsx │ │ ├── favicon.ico │ │ ├── globals.css │ │ ├── layout.tsx │ │ └── page.tsx │ ├── bun.lockb │ ├── components.json │ ├── components │ │ ├── ai-presets-dialog.tsx │ │ ├── ai-presets-selector.tsx │ │ ├── assistant-ui │ │ │ ├── markdown-text.tsx │ │ │ ├── thread-list.tsx │ │ │ ├── thread.tsx │ │ │ └── tooltip-icon-button.tsx │ │ ├── chat.tsx │ │ ├── playground-card.tsx │ │ ├── ready-to-use-examples │ │ │ ├── health-status.tsx │ │ │ ├── last-audio-transcription.tsx │ │ │ ├── last-ocr-image.tsx │ │ │ ├── last-ui-record.tsx │ │ │ ├── realtime-audio.tsx │ │ │ └── realtime-screen.tsx │ │ └── ui │ │ │ ├── accordion.tsx │ │ │ ├── badge.tsx │ │ │ ├── button.tsx │ │ │ ├── card.tsx │ │ │ ├── checkbox.tsx │ │ │ ├── codeblock.tsx │ │ │ ├── command.tsx │ │ │ ├── dialog.tsx │ │ │ ├── icons.tsx │ │ │ ├── input.tsx │ │ │ ├── label.tsx │ │ │ ├── popover.tsx │ │ │ ├── progress.tsx │ │ │ ├── select.tsx │ │ │ ├── separator.tsx │ │ │ ├── skeleton.tsx │ │ │ ├── slider.tsx │ │ │ ├── switch.tsx │ │ │ ├── tabs.tsx │ │ │ ├── textarea.tsx │ │ │ ├── toast.tsx │ │ │ ├── toaster.tsx │ │ │ ├── tooltip.tsx │ │ │ └── use-toast.ts │ ├── content │ │ └── components-list.json │ ├── hooks │ │ ├── use-ai-provider.tsx │ │ ├── use-health.tsx │ │ └── use-toast.ts │ ├── lib │ │ ├── actions │ │ │ ├── get-screenpipe-app-settings.ts │ │ │ ├── hello-world-mcp-client │ │ │ │ └── query-processing-engine.ts │ │ │ ├── update-pipe-config.ts │ │ │ └── video-actions.ts │ │ ├── client-only.tsx │ │ ├── hooks │ │ │ ├── generic-settings.tsx │ │ │ ├── use-copy-to-clipboard.tsx │ │ │ ├── use-debounce.tsx │ │ │ ├── use-health-check.tsx │ │ │ ├── use-pipe-settings.ts │ │ │ ├── use-settings.ts │ │ │ └── use-sql-autocomplete.tsx │ │ ├── html-content-parser.ts │ │ ├── ollama-models-list.tsx │ │ ├── settings-provider.tsx │ │ ├── types.ts │ │ └── utils.ts │ ├── next.config.mjs │ ├── package-lock.json │ ├── package.json │ ├── pipe.json │ ├── postcss.config.mjs │ ├── public │ │ └── 128x128.png │ ├── tailwind.config.ts │ └── tsconfig.json ├── identify-speakers │ ├── .gitignore │ ├── README.md │ ├── bun.lockb │ ├── components.json │ ├── eslint.config.mjs │ ├── next.config.ts │ ├── package.json │ ├── postcss.config.mjs │ ├── public │ │ ├── file.svg │ │ ├── globe.svg │ │ ├── next.svg │ │ ├── vercel.svg │ │ └── window.svg │ ├── src │ │ ├── app │ │ │ ├── api │ │ │ │ └── settings │ │ │ │ │ └── route.ts │ │ │ ├── favicon.ico │ │ │ ├── globals.css │ │ │ ├── layout.tsx │ │ │ └── page.tsx │ │ ├── components │ │ │ ├── identify-speakers.tsx │ │ │ ├── meeting-history.tsx │ │ │ ├── ui │ │ │ │ ├── accordion.tsx │ │ │ │ ├── badge.tsx │ │ │ │ ├── button.tsx │ │ │ │ ├── calendar.tsx │ │ │ │ ├── card.tsx │ │ │ │ ├── checkbox.tsx │ │ │ │ ├── codeblock.tsx │ │ │ │ ├── command.tsx │ │ │ │ ├── dialog.tsx │ │ │ │ ├── icons.tsx │ │ │ │ ├── input.tsx │ │ │ │ ├── label.tsx │ │ │ │ ├── popover.tsx │ │ │ │ ├── progress.tsx │ │ │ │ ├── select.tsx │ │ │ │ ├── separator.tsx │ │ │ │ ├── skeleton.tsx │ │ │ │ ├── slider.tsx │ │ │ │ ├── switch.tsx │ │ │ │ ├── toast.tsx │ │ │ │ ├── toaster.tsx │ │ │ │ ├── tooltip.tsx │ │ │ │ └── use-toast.ts │ │ │ └── video.tsx │ │ └── lib │ │ │ ├── actions │ │ │ └── video-actions.ts │ │ │ ├── hooks │ │ │ ├── use-copy-to-clipboard.tsx │ │ │ ├── use-debounce.tsx │ │ │ ├── use-health-check.tsx │ │ │ ├── use-search-history.tsx │ │ │ ├── use-settings.tsx │ │ │ └── use-sql-autocomplete.tsx │ │ │ └── utils.ts │ ├── tailwind.config.ts │ └── tsconfig.json ├── linkedin-ai-assistant │ ├── .eslintrc.json │ ├── .gitignore │ ├── README.md │ ├── app │ │ ├── api │ │ │ ├── chrome │ │ │ │ ├── check-login │ │ │ │ │ └── route.ts │ │ │ │ ├── navigate │ │ │ │ │ └── route.ts │ │ │ │ ├── route.ts │ │ │ │ └── status │ │ │ │ │ └── route.ts │ │ │ ├── harvest │ │ │ │ ├── check │ │ │ │ │ └── route.ts │ │ │ │ ├── connection-status-update │ │ │ │ │ ├── route.ts │ │ │ │ │ ├── shared-state.ts │ │ │ │ │ └── stop │ │ │ │ │ │ └── route.ts │ │ │ │ ├── start │ │ │ │ │ └── route.ts │ │ │ │ ├── stats │ │ │ │ │ └── route.ts │ │ │ │ ├── stop │ │ │ │ │ └── route.ts │ │ │ │ └── withdraw-connections │ │ │ │ │ └── route.ts │ │ │ ├── messages │ │ │ │ ├── check │ │ │ │ │ └── route.ts │ │ │ │ └── route.ts │ │ │ ├── profiles │ │ │ │ └── route.ts │ │ │ ├── save-template │ │ │ │ └── route.ts │ │ │ ├── sentry-example-api │ │ │ │ └── route.ts │ │ │ ├── state │ │ │ │ └── route.ts │ │ │ ├── validate-search │ │ │ │ └── route.ts │ │ │ └── workflow │ │ │ │ ├── start │ │ │ │ └── route.ts │ │ │ │ └── status │ │ │ │ ├── route.ts │ │ │ │ └── state.ts │ │ ├── favicon.ico │ │ ├── fonts │ │ │ ├── GeistMonoVF.woff │ │ │ └── GeistVF.woff │ │ ├── global-error.tsx │ │ ├── globals.css │ │ ├── layout.tsx │ │ ├── page.tsx │ │ └── sentry-example-page │ │ │ └── page.tsx │ ├── bun.lockb │ ├── components.json │ ├── components │ │ ├── harvest.tsx │ │ ├── header.tsx │ │ ├── intro-requester.tsx │ │ ├── launch-linkedin-chrome-session.tsx │ │ ├── reload-button.tsx │ │ ├── settings-editor.tsx │ │ ├── start-workflow.tsx │ │ ├── state-viewer.tsx │ │ ├── template-editor.tsx │ │ ├── toaster.tsx │ │ ├── ui │ │ │ ├── alert.tsx │ │ │ ├── button.tsx │ │ │ ├── collapsible.tsx │ │ │ ├── hover-card.tsx │ │ │ ├── switch.tsx │ │ │ ├── toast.tsx │ │ │ ├── toaster.tsx │ │ │ └── tooltip.tsx │ │ └── window-sizer.tsx │ ├── hooks │ │ └── use-toast.ts │ ├── instrumentation.ts │ ├── lib │ │ ├── browser-setup.ts │ │ ├── chrome-session.ts │ │ ├── config.ts │ │ ├── logic-sequence │ │ │ ├── check-accepted-connections.ts │ │ │ ├── check-messages.ts │ │ │ ├── check-recently-added-connections.ts │ │ │ ├── harvest-connections.ts │ │ │ ├── intro-requester.ts │ │ │ └── withdraw-connections.ts │ │ ├── route-logger.ts │ │ ├── simple-actions │ │ │ ├── check-if-connected.ts │ │ │ ├── check-if-restricted.ts │ │ │ ├── check-recent-messages.ts │ │ │ ├── click-animation.ts │ │ │ ├── click-cancel-connection-request.ts │ │ │ ├── click-first-profile-in-the-list.ts │ │ │ ├── click-message.ts │ │ │ ├── click-mutual-connection.ts │ │ │ ├── click-profile-from-message.ts │ │ │ ├── click-send.ts │ │ │ ├── close-dialogues.ts │ │ │ ├── extract-messages.ts │ │ │ ├── extract-profile-details-from-page.ts │ │ │ ├── extract-profiles-from-search-results.ts │ │ │ ├── go-to-search-results.ts │ │ │ ├── highlight-element.ts │ │ │ ├── llm-call.ts │ │ │ ├── standardize-timestamp-in-messages.ts │ │ │ ├── test-check-restriction.ts │ │ │ ├── test-click-cancel-request.ts │ │ │ ├── test-click-message.ts │ │ │ ├── test-extract-messages.ts │ │ │ └── write-message.ts │ │ ├── storage │ │ │ ├── remove-duplicates.ts │ │ │ ├── storage.ts │ │ │ ├── templates.d.ts │ │ │ ├── templates.json │ │ │ └── types.ts │ │ └── utils.ts │ ├── next.config.mjs │ ├── package-lock.json │ ├── package.json │ ├── pipe.json │ ├── postcss.config.mjs │ ├── public │ │ ├── favicon.ico │ │ ├── guide_bigger.gif │ │ ├── icon-128.png │ │ ├── icon-32.png │ │ └── li_harvester.gif │ ├── sentry.client.config.ts │ ├── sentry.edge.config.ts │ ├── sentry.server.config.ts │ ├── tailwind.config.ts │ └── tsconfig.json ├── meeting │ ├── .gitignore │ ├── README.md │ ├── bun.lockb │ ├── components.json │ ├── eslint.config.mjs │ ├── next.config.ts │ ├── package-lock.json │ ├── package.json │ ├── postcss.config.mjs │ ├── public │ │ ├── file.svg │ │ ├── globe.svg │ │ ├── next.svg │ │ ├── vercel.svg │ │ └── window.svg │ ├── src │ │ ├── app │ │ │ ├── api │ │ │ │ ├── messages │ │ │ │ │ └── route.ts │ │ │ │ └── settings │ │ │ │ │ └── route.ts │ │ │ ├── favicon.ico │ │ │ ├── globals.css │ │ │ ├── layout.tsx │ │ │ ├── meetings │ │ │ │ ├── live │ │ │ │ │ ├── loading.tsx │ │ │ │ │ └── page.tsx │ │ │ │ └── page.tsx │ │ │ └── page.tsx │ │ ├── components │ │ │ ├── chat-button.tsx │ │ │ ├── live-transcription │ │ │ │ ├── floating-container-buttons.tsx │ │ │ │ ├── hooks │ │ │ │ │ ├── ai-client.ts │ │ │ │ │ ├── ai-create-all-notes.ts │ │ │ │ │ ├── ai-create-note-based-on-chunk.ts │ │ │ │ │ ├── ai-create-note.ts │ │ │ │ │ ├── ai-improve-chunk-transcription.ts │ │ │ │ │ ├── ai-meeting-summary.ts │ │ │ │ │ ├── ai-meeting-title.ts │ │ │ │ │ ├── auto-scroll.ts │ │ │ │ │ ├── browser-stream-transcription-api.ts │ │ │ │ │ ├── handle-new-chunk.ts │ │ │ │ │ ├── health-status.ts │ │ │ │ │ ├── pull-meetings-from-screenpipe.ts │ │ │ │ │ ├── screenpipe-stream-transcription-api.ts │ │ │ │ │ ├── storage-for-live-meeting.tsx │ │ │ │ │ ├── storage-vocabulary.ts │ │ │ │ │ └── text-editor-auto-scroll.ts │ │ │ │ ├── new-meeting-wrapper.tsx │ │ │ │ ├── notes-editor.tsx │ │ │ │ ├── status-alerts.tsx │ │ │ │ ├── text-editor-within-notes-editor.tsx │ │ │ │ ├── transcription-view.tsx │ │ │ │ └── use-transcription-service.ts │ │ │ ├── meeting-history │ │ │ │ ├── components │ │ │ │ │ ├── device-selector.tsx │ │ │ │ │ ├── meeting-card.tsx │ │ │ │ │ ├── meeting-prep-card.tsx │ │ │ │ │ ├── meeting-settings.tsx │ │ │ │ │ ├── mockup-upcoming-meetings.tsx │ │ │ │ │ └── settings-summary-section.tsx │ │ │ │ ├── hooks │ │ │ │ │ ├── storage-meeting-data.ts │ │ │ │ │ └── use-meetings.ts │ │ │ │ ├── meeting-history.tsx │ │ │ │ ├── meeting-utils.ts │ │ │ │ ├── types.ts │ │ │ │ └── utils │ │ │ │ │ └── format.ts │ │ │ ├── providers │ │ │ │ ├── posthog-provider.tsx │ │ │ │ └── root-provider.tsx │ │ │ ├── status-live-transcription.tsx │ │ │ └── ui │ │ │ │ ├── accordion.tsx │ │ │ │ ├── alert.tsx │ │ │ │ ├── badge.tsx │ │ │ │ ├── button.tsx │ │ │ │ ├── calendar.tsx │ │ │ │ ├── card.tsx │ │ │ │ ├── checkbox.tsx │ │ │ │ ├── collapsible.tsx │ │ │ │ ├── command.tsx │ │ │ │ ├── dialog.tsx │ │ │ │ ├── hover-card.tsx │ │ │ │ ├── icons.tsx │ │ │ │ ├── input.tsx │ │ │ │ ├── label.tsx │ │ │ │ ├── popover.tsx │ │ │ │ ├── progress.tsx │ │ │ │ ├── select.tsx │ │ │ │ ├── separator.tsx │ │ │ │ ├── skeleton.tsx │ │ │ │ ├── slider.tsx │ │ │ │ ├── switch.tsx │ │ │ │ ├── tabs.tsx │ │ │ │ ├── textarea.tsx │ │ │ │ ├── toast.tsx │ │ │ │ ├── toaster.tsx │ │ │ │ └── tooltip.tsx │ │ ├── hooks │ │ │ └── use-toast.ts │ │ └── lib │ │ │ ├── actions │ │ │ └── video-actions.ts │ │ │ ├── hooks │ │ │ ├── use-copy-to-clipboard.tsx │ │ │ ├── use-debounce.tsx │ │ │ ├── use-health-check.tsx │ │ │ ├── use-search-history.tsx │ │ │ ├── use-settings.tsx │ │ │ └── use-sql-autocomplete.tsx │ │ │ ├── storage │ │ │ └── chat-storage.ts │ │ │ └── utils.ts │ ├── tailwind.config.ts │ └── tsconfig.json ├── memories │ ├── .gitignore │ ├── README.md │ ├── bun.lockb │ ├── components.json │ ├── eslint.config.mjs │ ├── next.config.ts │ ├── package.json │ ├── postcss.config.mjs │ ├── public │ │ ├── file.svg │ │ ├── globe.svg │ │ ├── next.svg │ │ ├── vercel.svg │ │ └── window.svg │ ├── src │ │ ├── app │ │ │ ├── api │ │ │ │ └── settings │ │ │ │ │ └── route.ts │ │ │ ├── favicon.ico │ │ │ ├── globals.css │ │ │ ├── layout.tsx │ │ │ └── page.tsx │ │ ├── components │ │ │ ├── memories-gallery.tsx │ │ │ ├── ui │ │ │ │ ├── accordion.tsx │ │ │ │ ├── badge.tsx │ │ │ │ ├── button.tsx │ │ │ │ ├── calendar.tsx │ │ │ │ ├── card.tsx │ │ │ │ ├── checkbox.tsx │ │ │ │ ├── codeblock.tsx │ │ │ │ ├── command.tsx │ │ │ │ ├── dialog.tsx │ │ │ │ ├── icons.tsx │ │ │ │ ├── input.tsx │ │ │ │ ├── label.tsx │ │ │ │ ├── popover.tsx │ │ │ │ ├── progress.tsx │ │ │ │ ├── select.tsx │ │ │ │ ├── separator.tsx │ │ │ │ ├── skeleton.tsx │ │ │ │ ├── slider.tsx │ │ │ │ ├── switch.tsx │ │ │ │ ├── toast.tsx │ │ │ │ ├── toaster.tsx │ │ │ │ ├── tooltip.tsx │ │ │ │ └── use-toast.ts │ │ │ └── video.tsx │ │ └── lib │ │ │ ├── actions │ │ │ └── video-actions.ts │ │ │ ├── hooks │ │ │ ├── use-copy-to-clipboard.tsx │ │ │ ├── use-debounce.tsx │ │ │ ├── use-health-check.tsx │ │ │ ├── use-search-history.tsx │ │ │ ├── use-settings.tsx │ │ │ └── use-sql-autocomplete.tsx │ │ │ └── utils.ts │ ├── tailwind.config.ts │ └── tsconfig.json ├── notion │ ├── .gitignore │ ├── README.md │ ├── bun.lockb │ ├── components.json │ ├── eslint.config.mjs │ ├── next.config.ts │ ├── package.json │ ├── pipe.json │ ├── postcss.config.mjs │ ├── public │ │ ├── file.svg │ │ ├── globe.svg │ │ ├── next.svg │ │ ├── vercel.svg │ │ └── window.svg │ ├── src │ │ ├── app │ │ │ ├── api │ │ │ │ ├── intelligence │ │ │ │ │ └── route.ts │ │ │ │ ├── log │ │ │ │ │ └── route.ts │ │ │ │ ├── notion │ │ │ │ │ └── pages │ │ │ │ │ │ └── route.ts │ │ │ │ └── setup │ │ │ │ │ └── route.ts │ │ │ ├── favicon.ico │ │ │ ├── globals.css │ │ │ ├── layout.tsx │ │ │ └── page.tsx │ │ ├── components │ │ │ ├── ai-presets-selector.tsx │ │ │ ├── file-suggest-textarea.tsx │ │ │ ├── notion-settings.tsx │ │ │ ├── notion-url-to-input.tsx │ │ │ ├── ollama-models-list.tsx │ │ │ └── ui │ │ │ │ ├── accordion.tsx │ │ │ │ ├── badge.tsx │ │ │ │ ├── button.tsx │ │ │ │ ├── calendar.tsx │ │ │ │ ├── card.tsx │ │ │ │ ├── checkbox.tsx │ │ │ │ ├── codeblock.tsx │ │ │ │ ├── command.tsx │ │ │ │ ├── dialog.tsx │ │ │ │ ├── dropdown-menu.tsx │ │ │ │ ├── icons.tsx │ │ │ │ ├── input.tsx │ │ │ │ ├── label.tsx │ │ │ │ ├── popover.tsx │ │ │ │ ├── progress.tsx │ │ │ │ ├── select.tsx │ │ │ │ ├── separator.tsx │ │ │ │ ├── skeleton.tsx │ │ │ │ ├── slider.tsx │ │ │ │ ├── switch.tsx │ │ │ │ ├── tabs.tsx │ │ │ │ ├── textarea.tsx │ │ │ │ ├── toast.tsx │ │ │ │ ├── toaster.tsx │ │ │ │ ├── tooltip.tsx │ │ │ │ └── use-toast.ts │ │ ├── hooks │ │ │ └── use-toast.ts │ │ └── lib │ │ │ ├── actions │ │ │ ├── get-screenpipe-app-settings.ts │ │ │ ├── update-pipe-config.ts │ │ │ └── video-actions.ts │ │ │ ├── helpers.ts │ │ │ ├── hooks │ │ │ ├── use-copy-to-clipboard.tsx │ │ │ ├── use-debounce.tsx │ │ │ ├── use-health-check.tsx │ │ │ ├── use-pipe-settings.ts │ │ │ ├── use-settings.ts │ │ │ └── use-sql-autocomplete.tsx │ │ │ ├── notion │ │ │ ├── client.ts │ │ │ ├── notion.ts │ │ │ └── setup.ts │ │ │ ├── store │ │ │ └── settings-store.ts │ │ │ ├── types.ts │ │ │ └── utils.ts │ ├── tailwind.config.ts │ └── tsconfig.json ├── obsidian │ ├── .gitignore │ ├── README.md │ ├── bun.lockb │ ├── components.json │ ├── eslint.config.mjs │ ├── next.config.ts │ ├── package-lock.json │ ├── package.json │ ├── pipe.json │ ├── postcss.config.mjs │ ├── public │ │ ├── file.svg │ │ ├── globe.svg │ │ ├── next.svg │ │ ├── vercel.svg │ │ └── window.svg │ ├── src │ │ ├── app │ │ │ ├── api │ │ │ │ ├── check-folder │ │ │ │ │ └── route.ts │ │ │ │ ├── files │ │ │ │ │ └── route.ts │ │ │ │ ├── intelligence │ │ │ │ │ └── route.ts │ │ │ │ ├── log │ │ │ │ │ └── route.ts │ │ │ │ └── obsidian-paths │ │ │ │ │ └── route.ts │ │ │ ├── favicon.ico │ │ │ ├── globals.css │ │ │ ├── layout.tsx │ │ │ └── page.tsx │ │ ├── components │ │ │ ├── ai-presets-selector.tsx │ │ │ ├── file-suggest-textarea.tsx │ │ │ ├── markdown.tsx │ │ │ ├── obsidian-settings.tsx │ │ │ ├── ollama-models-list.tsx │ │ │ ├── ui │ │ │ │ ├── accordion.tsx │ │ │ │ ├── badge.tsx │ │ │ │ ├── button.tsx │ │ │ │ ├── calendar.tsx │ │ │ │ ├── card.tsx │ │ │ │ ├── checkbox.tsx │ │ │ │ ├── codeblock.tsx │ │ │ │ ├── command.tsx │ │ │ │ ├── dialog.tsx │ │ │ │ ├── icons.tsx │ │ │ │ ├── input.tsx │ │ │ │ ├── label.tsx │ │ │ │ ├── popover.tsx │ │ │ │ ├── progress.tsx │ │ │ │ ├── select.tsx │ │ │ │ ├── separator.tsx │ │ │ │ ├── skeleton.tsx │ │ │ │ ├── slider.tsx │ │ │ │ ├── switch.tsx │ │ │ │ ├── tabs.tsx │ │ │ │ ├── textarea.tsx │ │ │ │ ├── toast.tsx │ │ │ │ ├── toaster.tsx │ │ │ │ ├── tooltip.tsx │ │ │ │ └── use-toast.ts │ │ │ └── video.tsx │ │ ├── hooks │ │ │ └── use-toast.ts │ │ └── lib │ │ │ ├── actions │ │ │ ├── get-screenpipe-app-settings.ts │ │ │ ├── obsidian.ts │ │ │ ├── update-pipe-config.ts │ │ │ └── video-actions.ts │ │ │ ├── hooks │ │ │ ├── use-copy-to-clipboard.tsx │ │ │ ├── use-debounce.tsx │ │ │ ├── use-health-check.tsx │ │ │ ├── use-pipe-settings.tsx │ │ │ ├── use-settings.tsx │ │ │ └── use-sql-autocomplete.tsx │ │ │ ├── store │ │ │ └── settings-store.ts │ │ │ ├── types.ts │ │ │ └── utils.ts │ ├── tailwind.config.ts │ └── tsconfig.json ├── pipe-for-loom │ ├── .eslintrc.json │ ├── .gitignore │ ├── README.md │ ├── app │ │ ├── api │ │ │ └── file │ │ │ │ └── route.ts │ │ ├── favicon.ico │ │ ├── globals.css │ │ ├── layout.tsx │ │ └── page.tsx │ ├── bun.lockb │ ├── components │ │ ├── date-time-picker.tsx │ │ ├── header.tsx │ │ ├── pipe.tsx │ │ ├── share-on-socials.tsx │ │ ├── toaster.tsx │ │ └── ui │ │ │ ├── badge.tsx │ │ │ ├── button.tsx │ │ │ ├── calendar.tsx │ │ │ ├── dialog.tsx │ │ │ ├── input.tsx │ │ │ ├── popover.tsx │ │ │ └── toast.tsx │ ├── lib │ │ ├── use-toast.ts │ │ └── utils.ts │ ├── next.config.mjs │ ├── package-lock.json │ ├── package.json │ ├── postcss.config.mjs │ ├── public │ │ └── 128x128.png │ ├── tailwind.config.ts │ └── tsconfig.json ├── pipe-simple-nextjs │ ├── .eslintrc.json │ ├── .gitignore │ ├── README.md │ ├── app │ │ ├── favicon.ico │ │ ├── fonts │ │ │ ├── GeistMonoVF.woff │ │ │ └── GeistVF.woff │ │ ├── globals.css │ │ ├── layout.tsx │ │ └── page.tsx │ ├── bun.lockb │ ├── components │ │ └── keyword-cloud.tsx │ ├── next.config.mjs │ ├── package-lock.json │ ├── package.json │ ├── postcss.config.mjs │ ├── tailwind.config.ts │ └── tsconfig.json ├── reddit-auto-posts │ ├── .eslintrc.json │ ├── .gitignore │ ├── README.md │ ├── app │ │ ├── api │ │ │ ├── pipeline │ │ │ │ └── route.ts │ │ │ └── settings │ │ │ │ └── route.ts │ │ ├── favicon.ico │ │ ├── globals.css │ │ ├── layout.tsx │ │ └── page.tsx │ ├── bun.lockb │ ├── components.json │ ├── components │ │ ├── header.tsx │ │ ├── markdown.tsx │ │ ├── pipe.tsx │ │ ├── spinner.tsx │ │ ├── sql-autocomplete-input.tsx │ │ ├── toaster.tsx │ │ └── ui │ │ │ ├── alert.tsx │ │ │ ├── badge.tsx │ │ │ ├── button.tsx │ │ │ ├── codeblock.tsx │ │ │ ├── icons.tsx │ │ │ ├── input.tsx │ │ │ ├── label.tsx │ │ │ ├── select.tsx │ │ │ ├── toast.tsx │ │ │ └── tooltip.tsx │ ├── lib │ │ ├── actions │ │ │ ├── generate-log.ts │ │ │ ├── generate-reddit-links.ts │ │ │ ├── generate-reddit-question.ts │ │ │ ├── send-email.ts │ │ │ └── update-pipe-config.ts │ │ ├── hooks │ │ │ ├── use-ai-provider.tsx │ │ │ ├── use-copy-to-clipboard.tsx │ │ │ ├── use-health.tsx │ │ │ ├── use-settings.ts │ │ │ └── use-sql-autocomplete.ts │ │ ├── types.ts │ │ ├── use-toast.ts │ │ └── utils.ts │ ├── next.config.mjs │ ├── package-lock.json │ ├── package.json │ ├── pipe.json │ ├── postcss.config.mjs │ ├── public │ │ └── 128x128.png │ ├── tailwind.config.ts │ └── tsconfig.json ├── rewind │ ├── .gitignore │ ├── README.md │ ├── bun.lockb │ ├── components.json │ ├── eslint.config.mjs │ ├── next.config.ts │ ├── package.json │ ├── postcss.config.mjs │ ├── public │ │ ├── file.svg │ │ ├── globe.svg │ │ ├── next.svg │ │ ├── vercel.svg │ │ └── window.svg │ ├── src │ │ ├── app │ │ │ ├── api │ │ │ │ └── settings │ │ │ │ │ └── route.ts │ │ │ ├── favicon.ico │ │ │ ├── globals.css │ │ │ ├── layout.tsx │ │ │ ├── page.tsx │ │ │ └── search │ │ │ │ └── page.tsx │ │ ├── components │ │ │ ├── ai-presets-selector.tsx │ │ │ ├── chat-message-actions.tsx │ │ │ ├── chat-message.tsx │ │ │ ├── context-usage-indicator.tsx │ │ │ ├── current-frame-search.tsx │ │ │ ├── current-frame-timeline.tsx │ │ │ ├── custom-dialog-content.tsx │ │ │ ├── date-range-picker.tsx │ │ │ ├── date-time-picker.tsx │ │ │ ├── example-search-cards.tsx │ │ │ ├── export-button.tsx │ │ │ ├── image-card.tsx │ │ │ ├── markdown.tsx │ │ │ ├── scroll-container.tsx │ │ │ ├── search-bar.tsx │ │ │ ├── search-command.tsx │ │ │ ├── settings-provider.tsx │ │ │ ├── spinner.tsx │ │ │ ├── timeline │ │ │ │ ├── agents.tsx │ │ │ │ ├── ai-panel.tsx │ │ │ │ ├── audio-transcript.tsx │ │ │ │ ├── timeline-controls.tsx │ │ │ │ ├── timeline-dock-section.tsx │ │ │ │ ├── timeline-search-v2.tsx │ │ │ │ ├── timeline-search.tsx │ │ │ │ ├── timeline-selection.tsx │ │ │ │ └── timeline.tsx │ │ │ ├── ui │ │ │ │ ├── accordion.tsx │ │ │ │ ├── badge.tsx │ │ │ │ ├── button.tsx │ │ │ │ ├── calendar.tsx │ │ │ │ ├── card.tsx │ │ │ │ ├── checkbox.tsx │ │ │ │ ├── codeblock.tsx │ │ │ │ ├── command.tsx │ │ │ │ ├── dialog.tsx │ │ │ │ ├── icons.tsx │ │ │ │ ├── input.tsx │ │ │ │ ├── label.tsx │ │ │ │ ├── multi-select-combobox.tsx │ │ │ │ ├── popover.tsx │ │ │ │ ├── progress.tsx │ │ │ │ ├── scroll-area.tsx │ │ │ │ ├── select.tsx │ │ │ │ ├── separator.tsx │ │ │ │ ├── skeleton.tsx │ │ │ │ ├── slider.tsx │ │ │ │ ├── switch.tsx │ │ │ │ ├── textarea.tsx │ │ │ │ ├── toast.tsx │ │ │ │ ├── toaster.tsx │ │ │ │ ├── tooltip.tsx │ │ │ │ └── use-toast.ts │ │ │ └── video.tsx │ │ └── lib │ │ │ ├── actions │ │ │ ├── get-screenpipe-app-settings.ts │ │ │ ├── get-start-date.ts │ │ │ ├── has-frames-date.ts │ │ │ └── video-actions.ts │ │ │ ├── hooks │ │ │ ├── use-ai-provider.tsx │ │ │ ├── use-app-name-suggestion.tsx │ │ │ ├── use-copy-to-clipboard.tsx │ │ │ ├── use-current-frame.tsx │ │ │ ├── use-debounce.tsx │ │ │ ├── use-health-check.tsx │ │ │ ├── use-keyword-params.tsx │ │ │ ├── use-keyword-search-store.tsx │ │ │ ├── use-pipe-settings.ts │ │ │ ├── use-search-history.tsx │ │ │ ├── use-settings.ts │ │ │ ├── use-sql-autocomplete.tsx │ │ │ ├── use-suggestion.tsx │ │ │ ├── use-timeline-data.tsx │ │ │ ├── use-timeline-selection.tsx │ │ │ └── use-timeline-store.tsx │ │ │ ├── keyword-parser.ts │ │ │ ├── raw_sql_queries.ts │ │ │ ├── types.ts │ │ │ └── utils.ts │ ├── tailwind.config.ts │ └── tsconfig.json ├── screen-avatar │ ├── .gitignore │ ├── README.md │ ├── bun.lockb │ ├── components.json │ ├── eslint.config.mjs │ ├── next.config.ts │ ├── package-lock.json │ ├── package.json │ ├── postcss.config.mjs │ ├── public │ │ ├── 0920242-meeting.png │ │ ├── file.svg │ │ ├── globe.svg │ │ ├── next.svg │ │ ├── vercel.svg │ │ └── window.svg │ ├── raw_response.json │ ├── src │ │ ├── app │ │ │ ├── api │ │ │ │ ├── check-folder │ │ │ │ │ └── route.ts │ │ │ │ ├── files │ │ │ │ │ └── route.ts │ │ │ │ ├── heygen │ │ │ │ │ ├── avatar-preview │ │ │ │ │ │ └── route.ts │ │ │ │ │ ├── avatars │ │ │ │ │ │ └── route.ts │ │ │ │ │ └── token │ │ │ │ │ │ └── route.ts │ │ │ │ ├── intelligence │ │ │ │ │ └── route.ts │ │ │ │ ├── log │ │ │ │ │ └── route.ts │ │ │ │ ├── obsidian-paths │ │ │ │ │ └── route.ts │ │ │ │ └── test │ │ │ │ │ └── route.ts │ │ │ ├── avatar-jealous │ │ │ │ └── page.tsx │ │ │ ├── avatar │ │ │ │ └── page.tsx │ │ │ ├── favicon.ico │ │ │ ├── globals.css │ │ │ ├── human-operator │ │ │ │ └── page.tsx │ │ │ ├── layout.tsx │ │ │ ├── notification │ │ │ │ └── page.tsx │ │ │ ├── page.tsx │ │ │ └── providers │ │ │ │ └── providers.tsx │ │ ├── components │ │ │ ├── ai-transcription.tsx │ │ │ ├── ai-vision.tsx │ │ │ ├── analysis-results-table.tsx │ │ │ ├── audio-input.tsx │ │ │ ├── avatar-gallery.tsx │ │ │ ├── avatar-text-input.tsx │ │ │ ├── avatar-video-transparent.tsx │ │ │ ├── avatar-video.tsx │ │ │ ├── realtime-audio.tsx │ │ │ ├── realtime-screen.tsx │ │ │ ├── streaming-avatar.tsx │ │ │ └── ui │ │ │ │ ├── accordion.tsx │ │ │ │ ├── badge.tsx │ │ │ │ ├── button.tsx │ │ │ │ ├── calendar.tsx │ │ │ │ ├── card.tsx │ │ │ │ ├── checkbox.tsx │ │ │ │ ├── codeblock.tsx │ │ │ │ ├── command.tsx │ │ │ │ ├── dialog.tsx │ │ │ │ ├── icons.tsx │ │ │ │ ├── input.tsx │ │ │ │ ├── label.tsx │ │ │ │ ├── popover.tsx │ │ │ │ ├── progress.tsx │ │ │ │ ├── select.tsx │ │ │ │ ├── separator.tsx │ │ │ │ ├── skeleton.tsx │ │ │ │ ├── slider.tsx │ │ │ │ ├── switch.tsx │ │ │ │ ├── tabs.tsx │ │ │ │ ├── textarea.tsx │ │ │ │ ├── toast.tsx │ │ │ │ ├── toaster.tsx │ │ │ │ ├── tooltip.tsx │ │ │ │ └── use-toast.ts │ │ ├── env.mjs │ │ ├── hooks │ │ │ ├── use-avatar-initialization.ts │ │ │ └── use-toast.ts │ │ └── lib │ │ │ ├── actions │ │ │ └── get-screenpipe-app-settings.ts │ │ │ ├── constants.ts │ │ │ ├── eleven-labs.ts │ │ │ ├── hooks │ │ │ ├── ai-client.ts │ │ │ ├── use-copy-to-clipboard.tsx │ │ │ ├── use-debounce.tsx │ │ │ ├── use-health-check.tsx │ │ │ ├── use-pipe-settings.tsx │ │ │ └── use-sql-autocomplete.tsx │ │ │ ├── push-to-talk.ts │ │ │ ├── types.ts │ │ │ └── utils.ts │ ├── tailwind.config.ts │ └── tsconfig.json └── search │ ├── .gitignore │ ├── README.md │ ├── bun.lockb │ ├── components.json │ ├── eslint.config.mjs │ ├── next.config.ts │ ├── package.json │ ├── postcss.config.mjs │ ├── public │ ├── file.svg │ ├── globe.svg │ ├── next.svg │ ├── vercel.svg │ └── window.svg │ ├── src │ ├── app │ │ ├── api │ │ │ └── settings │ │ │ │ └── route.ts │ │ ├── favicon.ico │ │ ├── globals.css │ │ ├── layout.tsx │ │ └── page.tsx │ ├── components │ │ ├── ai-presets-dialog.tsx │ │ ├── ai-presets-selector.tsx │ │ ├── ai-provider-config.tsx │ │ ├── chat-message-actions.tsx │ │ ├── chat-message.tsx │ │ ├── context-usage-indicator.tsx │ │ ├── date-time-picker.tsx │ │ ├── example-search-cards.tsx │ │ ├── icons.tsx │ │ ├── markdown.tsx │ │ ├── search-chat.tsx │ │ ├── search-filter-generator.tsx │ │ ├── spinner.tsx │ │ ├── sql-autocomplete-input.tsx │ │ ├── ui │ │ │ ├── accordion.tsx │ │ │ ├── alert.tsx │ │ │ ├── avatar.tsx │ │ │ ├── badge.tsx │ │ │ ├── button.tsx │ │ │ ├── calendar.tsx │ │ │ ├── card.tsx │ │ │ ├── checkbox.tsx │ │ │ ├── codeblock.tsx │ │ │ ├── command.tsx │ │ │ ├── dialog.tsx │ │ │ ├── icons.tsx │ │ │ ├── input.tsx │ │ │ ├── label.tsx │ │ │ ├── multi-select-combobox.tsx │ │ │ ├── popover.tsx │ │ │ ├── progress.tsx │ │ │ ├── scroll-area.tsx │ │ │ ├── select.tsx │ │ │ ├── separator.tsx │ │ │ ├── sheet.tsx │ │ │ ├── skeleton.tsx │ │ │ ├── slider.tsx │ │ │ ├── switch.tsx │ │ │ ├── textarea.tsx │ │ │ ├── toast.tsx │ │ │ ├── toaster.tsx │ │ │ └── tooltip.tsx │ │ └── video.tsx │ └── lib │ │ ├── actions │ │ ├── get-screenpipe-app-settings.ts │ │ └── video-actions.ts │ │ ├── hooks │ │ ├── use-ai-provider.tsx │ │ ├── use-copy-to-clipboard.tsx │ │ ├── use-debounce.tsx │ │ ├── use-health-check.tsx │ │ ├── use-pipe-settings.ts │ │ ├── use-search-history.tsx │ │ ├── use-settings.tsx │ │ └── use-sql-autocomplete.tsx │ │ ├── types.ts │ │ ├── use-toast.ts │ │ └── utils.ts │ ├── tailwind.config.ts │ └── tsconfig.json ├── rust-toolchain.toml ├── screenpipe-app-tauri ├── .eslintrc.json ├── .gitignore ├── .mocharc.js ├── README.md ├── app │ ├── favicon.ico │ ├── global-error.jsx │ ├── globals.css │ ├── layout.tsx │ ├── not-found.tsx │ ├── page.tsx │ └── providers.tsx ├── bun.lockb ├── components.json ├── components │ ├── breaking-changes-instructions-dialog.tsx │ ├── changelog-dialog.tsx │ ├── cli-command-dialog.tsx │ ├── date-time-picker.tsx │ ├── dev-mode-settings.tsx │ ├── empty-screen.tsx │ ├── feature-request-link.tsx │ ├── header.tsx │ ├── inbox-messages.tsx │ ├── log-file-button.tsx │ ├── log-viewer-v2.tsx │ ├── login-dialog.tsx │ ├── markdown-with-external-links.tsx │ ├── markdown.tsx │ ├── model-download-tracker.tsx │ ├── notification-handler.tsx │ ├── onboarding.tsx │ ├── onboarding │ │ ├── api-setup.tsx │ │ ├── dev-configuration.tsx │ │ ├── dev-or-non-dev.tsx │ │ ├── explain-instructions.tsx │ │ ├── introduction.tsx │ │ ├── login.tsx │ │ ├── navigation.tsx │ │ ├── personalize.tsx │ │ ├── pipe-store.tsx │ │ ├── pipes.tsx │ │ ├── single-codeblock.tsx │ │ ├── status.tsx │ │ └── usecases-selection.tsx │ ├── pipe-config-form.tsx │ ├── pipe-logger.tsx │ ├── pipe-store-markdown.tsx │ ├── pipe-store.tsx │ ├── pipe-store │ │ ├── add-pipe-form.tsx │ │ ├── pipe-card.tsx │ │ ├── pipe-details.tsx │ │ └── types.ts │ ├── pretty-link.tsx │ ├── publish-dialog.tsx │ ├── screenpipe-status.tsx │ ├── settings.tsx │ ├── settings │ │ ├── account-section.tsx │ │ ├── ai-presets.tsx │ │ ├── ai-section.tsx │ │ ├── data-import-section.tsx │ │ ├── disk-usage.tsx │ │ ├── general-settings.tsx │ │ ├── pricing-toggle.tsx │ │ ├── recording-settings.tsx │ │ ├── shortcut-row.tsx │ │ └── shortcut-section.tsx │ ├── share-logs-button.tsx │ ├── spinner.tsx │ ├── sql-autocomplete-input.tsx │ ├── status │ │ └── permission-buttons.tsx │ ├── store │ │ └── credit-purchase-dialog.tsx │ ├── ui │ │ ├── accordion.tsx │ │ ├── alert-dialog.tsx │ │ ├── alert.tsx │ │ ├── avatar.tsx │ │ ├── badge.tsx │ │ ├── button.tsx │ │ ├── calendar.tsx │ │ ├── card.tsx │ │ ├── checkbox.tsx │ │ ├── codeblock.tsx │ │ ├── collapsible.tsx │ │ ├── command.tsx │ │ ├── dialog.tsx │ │ ├── dock.tsx │ │ ├── dropdown-menu.tsx │ │ ├── icons.tsx │ │ ├── input.tsx │ │ ├── label.tsx │ │ ├── multi-select.tsx │ │ ├── popover.tsx │ │ ├── progress.tsx │ │ ├── rainbow-button.tsx │ │ ├── resizable.tsx │ │ ├── scroll-area.tsx │ │ ├── select.tsx │ │ ├── separator.tsx │ │ ├── sheet.tsx │ │ ├── sidebar.tsx │ │ ├── skeleton.tsx │ │ ├── slider.tsx │ │ ├── switch.tsx │ │ ├── tabs.tsx │ │ ├── textarea.tsx │ │ ├── toast.tsx │ │ ├── toaster.tsx │ │ ├── tooltip.tsx │ │ └── use-toast.ts │ ├── update-notification.tsx │ └── updater.tsx ├── e2e │ ├── record.js │ ├── terminator-e2e │ │ ├── mocha.global.js │ │ └── screenpipe.spec.js │ ├── tests │ │ └── health-check.js │ ├── utils.js │ └── videos │ │ └── .keep ├── lib │ ├── api │ │ ├── index.ts │ │ └── store │ │ │ └── index.ts │ ├── hooks │ │ ├── use-app-version.tsx │ │ ├── use-changelog-dialog.tsx │ │ ├── use-copy-to-clipboard.tsx │ │ ├── use-debounce.tsx │ │ ├── use-health-check.tsx │ │ ├── use-interval.tsx │ │ ├── use-mobile.tsx │ │ ├── use-onboarding.tsx │ │ ├── use-pipes.tsx │ │ ├── use-pipesv2.tsx │ │ ├── use-platform.tsx │ │ ├── use-profiles.tsx │ │ ├── use-scroll-anchor.tsx │ │ ├── use-settings-dialog.ts │ │ ├── use-settings.tsx │ │ ├── use-sql-autocomplete.tsx │ │ └── use-status-dialog.tsx │ ├── language.ts │ ├── shortcuts.ts │ ├── supabase │ │ └── client.ts │ └── utils.ts ├── next.config.mjs ├── package-lock.json ├── package.json ├── postcss.config.mjs ├── public │ ├── 128x128.png │ ├── CHANGELOG.md │ ├── images │ │ ├── custom.png │ │ ├── ollama.png │ │ ├── openai.png │ │ └── screenpipe.png │ ├── next.svg │ ├── pipe-store-preview.png │ ├── placeholder-user.jpg │ ├── screenpipe.svg │ └── vercel.svg ├── scripts │ └── pre_build.js ├── src-tauri │ ├── .gitignore │ ├── Cargo.lock │ ├── Cargo.toml │ ├── Info.plist │ ├── assets │ │ ├── dmg-background.png │ │ ├── nsis-header.bmp │ │ ├── nsis-sidebar.bmp │ │ ├── screenpipe-logo-tray-black-failed.png │ │ ├── screenpipe-logo-tray-black.png │ │ ├── screenpipe-logo-tray-updates-black.png │ │ ├── screenpipe-logo-tray-updates-white.png │ │ ├── screenpipe-logo-tray-white-failed.png │ │ ├── screenpipe-logo-tray-white.png │ │ └── svg │ │ │ ├── screenpipe-logo-tray-black-failed.svg │ │ │ ├── screenpipe-logo-tray-black.svg │ │ │ ├── screenpipe-logo-tray-updates-black.svg │ │ │ ├── screenpipe-logo-tray-updates-white.svg │ │ │ ├── screenpipe-logo-tray-white-failed.svg │ │ │ └── screenpipe-logo-tray-white.svg │ ├── build.rs │ ├── capabilities │ │ └── main.json │ ├── entitlements.plist │ ├── gen │ │ └── schemas │ │ │ ├── acl-manifests.json │ │ │ ├── capabilities.json │ │ │ ├── desktop-schema.json │ │ │ ├── linux-schema.json │ │ │ ├── macOS-schema.json │ │ │ └── windows-schema.json │ ├── icons │ │ ├── 1024x1024.png │ │ ├── 128x128.png │ │ ├── 128x128@2x.png │ │ ├── 256x256.png │ │ ├── 32x32.png │ │ ├── 512x512.png │ │ ├── Square107x107Logo.png │ │ ├── Square142x142Logo.png │ │ ├── Square150x150Logo.png │ │ ├── Square284x284Logo.png │ │ ├── Square30x30Logo.png │ │ ├── Square310x310Logo.png │ │ ├── Square44x44Logo.png │ │ ├── Square71x71Logo.png │ │ ├── Square89x89Logo.png │ │ ├── StoreLogo.png │ │ ├── android │ │ │ ├── mipmap-hdpi │ │ │ │ ├── ic_launcher.png │ │ │ │ ├── ic_launcher_foreground.png │ │ │ │ └── ic_launcher_round.png │ │ │ ├── mipmap-mdpi │ │ │ │ ├── ic_launcher.png │ │ │ │ ├── ic_launcher_foreground.png │ │ │ │ └── ic_launcher_round.png │ │ │ ├── mipmap-xhdpi │ │ │ │ ├── ic_launcher.png │ │ │ │ ├── ic_launcher_foreground.png │ │ │ │ └── ic_launcher_round.png │ │ │ ├── mipmap-xxhdpi │ │ │ │ ├── ic_launcher.png │ │ │ │ ├── ic_launcher_foreground.png │ │ │ │ └── ic_launcher_round.png │ │ │ └── mipmap-xxxhdpi │ │ │ │ ├── ic_launcher.png │ │ │ │ ├── ic_launcher_foreground.png │ │ │ │ └── ic_launcher_round.png │ │ ├── icon.icns │ │ ├── icon.ico │ │ ├── icon.png │ │ ├── ios │ │ │ ├── AppIcon-20x20@1x.png │ │ │ ├── AppIcon-20x20@2x-1.png │ │ │ ├── AppIcon-20x20@2x.png │ │ │ ├── AppIcon-20x20@3x.png │ │ │ ├── AppIcon-29x29@1x.png │ │ │ ├── AppIcon-29x29@2x-1.png │ │ │ ├── AppIcon-29x29@2x.png │ │ │ ├── AppIcon-29x29@3x.png │ │ │ ├── AppIcon-40x40@1x.png │ │ │ ├── AppIcon-40x40@2x-1.png │ │ │ ├── AppIcon-40x40@2x.png │ │ │ ├── AppIcon-40x40@3x.png │ │ │ ├── AppIcon-512@2x.png │ │ │ ├── AppIcon-60x60@2x.png │ │ │ ├── AppIcon-60x60@3x.png │ │ │ ├── AppIcon-76x76@1x.png │ │ │ ├── AppIcon-76x76@2x.png │ │ │ └── AppIcon-83.5x83.5@2x.png │ │ ├── screenpipe-logo-tray-black.png │ │ └── screenpipe-logo-tray-failed.png │ ├── src │ │ ├── analytics.rs │ │ ├── commands.rs │ │ ├── config.rs │ │ ├── disk_usage.rs │ │ ├── health.rs │ │ ├── icons.rs │ │ ├── main.rs │ │ ├── permissions.rs │ │ ├── server.rs │ │ ├── sidecar.rs │ │ ├── store.rs │ │ ├── tray.rs │ │ ├── updates.rs │ │ └── window_api.rs │ ├── tauri.conf.json │ ├── tauri.linux.conf.json │ ├── tauri.macos.conf.json │ ├── tauri.windows.conf.json │ ├── ui_monitor-aarch64-apple-darwin │ └── ui_monitor-x86_64-apple-darwin ├── tailwind.config.ts ├── tsconfig.json └── wdio.conf.js ├── screenpipe-audio ├── Cargo.toml ├── README.md ├── build.rs ├── examples │ └── screenpipe-audio.rs ├── models │ ├── pyannote │ │ ├── segmentation-3.0.onnx │ │ └── wespeaker_en_voxceleb_CAM++.onnx │ └── whisper │ │ ├── melfilters.bytes │ │ └── melfilters128.bytes ├── src │ ├── audio_manager │ │ ├── builder.rs │ │ ├── device_monitor.rs │ │ ├── manager.rs │ │ └── mod.rs │ ├── core │ │ ├── device.rs │ │ ├── engine.rs │ │ ├── mod.rs │ │ ├── run_record_and_transcribe.rs │ │ └── stream.rs │ ├── device │ │ ├── device_manager.rs │ │ └── mod.rs │ ├── lib.rs │ ├── segmentation │ │ ├── mod.rs │ │ └── segmentation_manager.rs │ ├── speaker │ │ ├── embedding.rs │ │ ├── embedding_manager.rs │ │ ├── mod.rs │ │ ├── models.rs │ │ ├── prepare_segments.rs │ │ └── segment.rs │ ├── transcription │ │ ├── deepgram │ │ │ ├── batch.rs │ │ │ ├── mod.rs │ │ │ └── streaming.rs │ │ ├── handle_new_transcript.rs │ │ ├── mod.rs │ │ ├── stt.rs │ │ ├── text_utils.rs │ │ ├── transcription_result.rs │ │ └── whisper │ │ │ ├── batch.rs │ │ │ ├── detect_language.rs │ │ │ ├── mod.rs │ │ │ └── model.rs │ ├── utils │ │ ├── audio │ │ │ ├── convert.rs │ │ │ ├── mod.rs │ │ │ ├── normalization.rs │ │ │ ├── pcm_decode.rs │ │ │ ├── resample.rs │ │ │ └── spectral_subtraction.rs │ │ ├── ffmpeg.rs │ │ └── mod.rs │ └── vad │ │ ├── mod.rs │ │ ├── silero.rs │ │ └── webrtc.rs ├── test_data │ ├── Arifi.wav │ ├── accuracy1.wav │ ├── accuracy2.wav │ ├── accuracy3.wav │ ├── accuracy4.mp4 │ ├── accuracy4.wav │ ├── accuracy5.mp4 │ ├── accuracy5.wav │ ├── poetic_kapil_gupta.wav │ ├── selah.mp3 │ ├── selah.mp4 │ └── speaker_identification │ │ ├── 6_speakers.wav │ │ └── obama.wav └── tests │ ├── accuracy_test.rs │ ├── core_tests.rs │ ├── realtime_test.rs │ └── speaker_identification.rs ├── screenpipe-core ├── Cargo.toml ├── examples │ ├── cron.rs │ ├── google.rs │ ├── llama.rs │ ├── mistral.rs │ ├── phi.rs │ ├── win_automation.rs │ └── windows_pdf_to_legacy.rs ├── src │ ├── actions.rs │ ├── embedding │ │ ├── mod.rs │ │ └── model.rs │ ├── ffmpeg.rs │ ├── google.rs │ ├── language.rs │ ├── lib.rs │ ├── llama.rs │ ├── llm.rs │ ├── mistral.rs │ ├── network.rs │ ├── operator │ │ ├── LICENSE │ │ ├── element.rs │ │ ├── errors.rs │ │ ├── locator.rs │ │ ├── mod.rs │ │ ├── platforms │ │ │ ├── linux.rs │ │ │ ├── macos.rs │ │ │ ├── mod.rs │ │ │ ├── tree_search.rs │ │ │ └── windows.rs │ │ ├── selector.rs │ │ └── tests.rs │ ├── phi.rs │ ├── pii_removal.rs │ └── pipes.rs └── tests │ └── pipes_test.rs ├── screenpipe-db ├── Cargo.toml ├── benches │ ├── db_benchmarks.rs │ └── new_db_benchmark.rs ├── src │ ├── db.rs │ ├── lib.rs │ ├── migration_worker.rs │ ├── migrations │ │ ├── 20240703111257_screenpipe.sql │ │ ├── 20240715121444_indexes.sql │ │ ├── 20240716120000_add_fields_to_ocr_text.sql │ │ ├── 20240716120001_update_ocr_text_table.sql │ │ ├── 20240716120002_snake_case.sql │ │ ├── 20240716120003_add_timestampt_to_audio_chunks.sql │ │ ├── 20240716120004_app_name.sql │ │ ├── 20240805120005_V2_create_inverted_index_table.sql │ │ ├── 20240808120006_V2_add_transcription_engine.sql │ │ ├── 20240808120007_V2_add_friends_request_table.sql │ │ ├── 20240808120008_V2_remove_fields.sql │ │ ├── 20240808120009_remove_columns_from_ocr_text.sql │ │ ├── 20240808120010_create_unique_index_on_chunked_text_index.sql │ │ ├── 20240811010614_add_fields_to_friend_wearable_requests.sql │ │ ├── 20240812202755_add_is_successful_to_friend_wearable_requests.sql │ │ ├── 20240812205501_add_fts_index.sql │ │ ├── 20240815201445_add_window_name_to_ocr_text.sql │ │ ├── 20240815214646_remove_app_name_from_frames.sql │ │ ├── 20240815215557_add_focused_to_ocr_text.sql │ │ ├── 20240821074222_create_tags.sql │ │ ├── 20240917213422_add_device_info_to_audio_transcriptions.sql │ │ ├── 20241024181218_add_device_name_to_chunks.sql │ │ ├── 20241103222151_timeline_indexes.sql │ │ ├── 20241106031800_create_ui_monitoring.sql │ │ ├── 20241108202826_create_speaker_table.sql │ │ ├── 20241127172038_create_speaker_id_col_final.sql │ │ ├── 20241127220428_add_hallucination_column.sql │ │ ├── 20241204191424_fts.sql │ │ ├── 20241207202831_add_speaker_id_to_fts.sql │ │ ├── 20241210111055_add_fts_update_delete_triggers.sql │ │ ├── 20241210205142_fix_audio_transcriptions.sql │ │ ├── 20241213220649_create_segment_start_time_and_end_time_columns.sql │ │ ├── 20250117134500_create_ocr_text_embeddings.sql │ │ ├── 20250117180530_add_frame_names.sql │ │ ├── 20250130101751_add_text_length_columns.sql │ │ ├── 20250131232938_add_device_name_to_frame.sql │ │ ├── 20250219212616_add-browser_url-column.sql │ │ └── 20250223204844_browser_url_fts_and_move_window_app_to_frames.sql │ ├── types.rs │ └── video_db.rs └── tests │ └── db.rs ├── screenpipe-events ├── .gitignore ├── Cargo.toml ├── benches │ └── events.rs ├── src │ ├── custom_events │ │ ├── meetings.rs │ │ └── mod.rs │ ├── events_manager.rs │ └── lib.rs └── tests │ ├── cross_crate_events_test.rs │ └── events_manager_test.rs ├── screenpipe-integrations ├── Cargo.toml ├── screenpipe-mcp │ ├── .gitignore │ ├── .python-version │ ├── README.md │ ├── pyproject.toml │ ├── src │ │ └── screenpipe_mcp │ │ │ ├── __init__.py │ │ │ └── server.py │ └── uv.lock └── src │ ├── lib.rs │ ├── mod.rs │ └── unstructured_ocr.rs ├── screenpipe-js ├── .gitignore ├── ai-proxy │ ├── .editorconfig │ ├── .gitignore │ ├── .prettierrc │ ├── package-lock.json │ ├── package.json │ ├── src │ │ ├── handlers │ │ │ ├── chat.ts │ │ │ ├── models.ts │ │ │ ├── transcription.ts │ │ │ ├── voice-ws.ts │ │ │ └── voice.ts │ │ ├── index.ts │ │ ├── providers │ │ │ ├── anthropic.ts │ │ │ ├── base.ts │ │ │ ├── gemini.ts │ │ │ ├── index.ts │ │ │ └── openai.ts │ │ ├── services │ │ │ ├── analytics.ts │ │ │ └── deepgram.ts │ │ ├── types.ts │ │ └── utils │ │ │ ├── auth.ts │ │ │ ├── cors.ts │ │ │ ├── rate-limiter.ts │ │ │ ├── subscription.ts │ │ │ └── voice-utils.ts │ ├── tsconfig.json │ ├── worker-configuration.d.ts │ └── wrangler.toml ├── browser-sdk │ ├── .gitignore │ ├── README.md │ ├── bun.lockb │ ├── package-lock.json │ ├── package.json │ ├── src │ │ └── index.ts │ ├── tests │ │ ├── deduplicateText.test.ts │ │ ├── list-arc-elements.ts │ │ ├── operator.test.ts │ │ ├── streamTranscriptions.test.ts │ │ └── streamVision.test.ts │ ├── tsconfig.json │ └── tsup.config.ts ├── cli │ ├── bun.lockb │ ├── dist │ │ └── index.js │ ├── package-lock.json │ ├── package.json │ ├── src │ │ ├── commands │ │ │ ├── app │ │ │ │ ├── create.ts │ │ │ │ └── index.ts │ │ │ ├── components │ │ │ │ ├── README.md │ │ │ │ ├── commands │ │ │ │ │ ├── add │ │ │ │ │ │ ├── add.ts │ │ │ │ │ │ ├── preflights │ │ │ │ │ │ │ └── preflight-add.ts │ │ │ │ │ │ ├── registry │ │ │ │ │ │ │ ├── api.ts │ │ │ │ │ │ │ ├── registry.json │ │ │ │ │ │ │ └── schema.ts │ │ │ │ │ │ └── utils │ │ │ │ │ │ │ ├── add-components.ts │ │ │ │ │ │ │ ├── download-file-from-github.ts │ │ │ │ │ │ │ ├── handle-error.ts │ │ │ │ │ │ │ ├── logger.ts │ │ │ │ │ │ │ ├── package-manager.ts │ │ │ │ │ │ │ ├── prompt-for-component.ts │ │ │ │ │ │ │ ├── shadcn.ts │ │ │ │ │ │ │ └── updaters │ │ │ │ │ │ │ ├── update-dependencies.ts │ │ │ │ │ │ │ └── update-files.ts │ │ │ │ │ └── register.ts │ │ │ │ └── index.ts │ │ │ ├── index.ts │ │ │ ├── login │ │ │ │ ├── index.ts │ │ │ │ └── utils │ │ │ │ │ ├── api-key-login.ts │ │ │ │ │ └── cli-login.ts │ │ │ ├── logout.ts │ │ │ └── pipe │ │ │ │ ├── create.ts │ │ │ │ ├── index.ts │ │ │ │ ├── list-versions.ts │ │ │ │ ├── publish.ts │ │ │ │ └── register.ts │ │ ├── constants.ts │ │ ├── hooks │ │ │ ├── use-ai-provider.tsx │ │ │ └── use-health.tsx │ │ ├── index.ts │ │ ├── types.ts │ │ └── utils │ │ │ ├── colors.ts │ │ │ └── credentials.ts │ ├── tests │ │ ├── .gitignore │ │ ├── README.md │ │ ├── bun.lockb │ │ ├── index.ts │ │ ├── package.json │ │ └── tsconfig.json │ └── tsconfig.json ├── common │ ├── Operator.ts │ ├── PipesManager.ts │ ├── analytics.ts │ ├── types.ts │ └── utils.ts ├── examples │ ├── basic-transcription │ │ ├── .gitignore │ │ ├── README.md │ │ ├── bun.lockb │ │ ├── index.ts │ │ ├── package.json │ │ └── tsconfig.json │ ├── capture-main-feature │ │ ├── .gitignore │ │ ├── README.md │ │ ├── bun.lockb │ │ ├── index.ts │ │ ├── package.json │ │ └── tsconfig.json │ ├── deduplicate │ │ ├── .gitignore │ │ ├── README.md │ │ ├── app │ │ │ ├── favicon.ico │ │ │ ├── globals.css │ │ │ ├── layout.tsx │ │ │ └── page.tsx │ │ ├── bun.lock │ │ ├── eslint.config.mjs │ │ ├── next.config.ts │ │ ├── package.json │ │ ├── postcss.config.mjs │ │ ├── public │ │ │ ├── file.svg │ │ │ ├── globe.svg │ │ │ ├── next.svg │ │ │ ├── vercel.svg │ │ │ └── window.svg │ │ ├── tailwind.config.ts │ │ └── tsconfig.json │ ├── query-screenpipe │ │ ├── .gitignore │ │ ├── README.md │ │ ├── bun.lockb │ │ ├── index.ts │ │ ├── package.json │ │ └── tsconfig.json │ └── stream-screenshots │ │ ├── .gitignore │ │ ├── README.md │ │ ├── app │ │ ├── favicon.ico │ │ ├── globals.css │ │ ├── layout.tsx │ │ └── page.tsx │ │ ├── bun.lock │ │ ├── eslint.config.mjs │ │ ├── next.config.ts │ │ ├── package.json │ │ ├── postcss.config.mjs │ │ ├── public │ │ ├── file.svg │ │ ├── globe.svg │ │ ├── next.svg │ │ ├── vercel.svg │ │ └── window.svg │ │ ├── tailwind.config.ts │ │ └── tsconfig.json └── node-sdk │ ├── .gitignore │ ├── README.md │ ├── bun.lockb │ ├── package.json │ ├── src │ ├── InboxManager.ts │ ├── SettingsManager.ts │ ├── Task.ts │ ├── inbox-server.ts │ └── index.ts │ ├── tsconfig.json │ └── tsup.config.ts ├── screenpipe-server ├── Cargo.toml ├── README.md ├── build.rs ├── examples │ ├── iphone_recording │ │ └── capture.sh │ └── timeline_ui_simple │ │ └── index.html ├── src │ ├── add.rs │ ├── auto_destruct.rs │ ├── bin │ │ └── screenpipe-server.rs │ ├── chunking.rs │ ├── cli.rs │ ├── core.rs │ ├── embedding │ │ ├── embedding_endpoint.rs │ │ └── mod.rs │ ├── filtering.rs │ ├── lib.rs │ ├── pipe_manager.rs │ ├── resource_monitor.rs │ ├── server.rs │ ├── text_embeds.rs │ ├── video.rs │ ├── video_cache.rs │ └── video_utils.rs └── tests │ ├── audio_vision_integration_test.rs │ ├── chunking_test.rs │ ├── endpoint_test.rs │ ├── index_test.rs │ ├── tags_test.rs │ ├── video_cache_test.rs │ ├── video_utils_test.rs │ └── websockets_test.rs └── screenpipe-vision ├── Cargo.toml ├── benches ├── apple_leak_bench.rs ├── ocr_benchmark.rs └── vision_benchmark.rs ├── bin ├── ui_monitor └── ui_monitor-aarch64-apple-darwin ├── build.rs ├── examples ├── screenpipe-vision.rs └── websocket.rs ├── src ├── apple.rs ├── browser_utils │ ├── linux.rs │ ├── macos.rs │ ├── mod.rs │ └── windows.rs ├── capture_screenshot_by_window.rs ├── core.rs ├── custom_ocr.rs ├── lib.rs ├── microsoft.rs ├── monitor.rs ├── run_ui_monitoring_macos.rs ├── tesseract.rs ├── ui_monitoring_macos.swift └── utils.rs └── tests ├── Claude_prompt.png ├── apple_vision_test.rs ├── custom_ocr_test.rs ├── testing_OCR.png ├── testing_OCR_chinese.png └── windows_vision_test.rs /.cursorignore: -------------------------------------------------------------------------------- 1 | # Add directories or file patterns to ignore during indexing (e.g. foo/ or *.csv) 2 | data/ 3 | 4 | screenpipe-app-tauri/public 5 | screenpipe-app-tauri/src-tauri/capabilities 6 | screenpipe-app-tauri/src-tauri/gen 7 | models/ 8 | 9 | 10 | package-lock.json 11 | bun.lockb 12 | pnpm-lock.yaml 13 | 14 | 15 | -------------------------------------------------------------------------------- /.devcontainer/scripts/postCreateCommand.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # Define the alias 4 | ALIAS_CMD="alias test-linux=\"/workspaces/screenpipe/.devcontainer/scripts/linux_integration.sh\"" 5 | 6 | # Add alias to .bashrc if it exists 7 | grep -qxF "$ALIAS_CMD" ~/.bashrc || echo "$ALIAS_CMD" >> ~/.bashrc 8 | 9 | # Add alias to .zshrc if it exists 10 | grep -qxF "$ALIAS_CMD" ~/.zshrc || echo "$ALIAS_CMD" >> ~/.zshrc 11 | -------------------------------------------------------------------------------- /.devcontainer/scripts/welcome-message.txt: -------------------------------------------------------------------------------- 1 | 👋 Welcome to Screenpipe! 2 | 3 | 🛠️ Your environment is fully setup with all the required dependencies. 4 | 5 | 📝 We have set up an alias 'test-linux' for 'linux_integration.sh' in your shell configurations. 6 | 7 | 💻 You can run 'test-linux' in the terminal to check if the Linux build of the app is working. 8 | 9 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/documentation.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: documentation 3 | about: report issues with or suggest improvements to documentation 4 | title: "[docs] " 5 | labels: documentation 6 | assignees: '' 7 | 8 | --- 9 | 10 | **describe the issue or improvement** 11 | explain what's missing, unclear, or needs improvement in the docs. 12 | 13 | **suggested changes** 14 | if you have specific suggestions, please outline them here. 15 | 16 | **additional context** 17 | add any other context about the documentation issue here. -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/question.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: question 3 | about: ask a question about screenpipe 4 | title: "[question] " 5 | labels: question 6 | assignees: '' 7 | 8 | --- 9 | 10 | **your question** 11 | ask your question here. be as specific as possible. 12 | 13 | **context** 14 | add any relevant context that might help us answer your question. -------------------------------------------------------------------------------- /.github/scripts/audio_test.wav: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:ad6f44381db73e54a390ac25139a7023cc25a97115ac1458ee28a15f9078a072 3 | size 42276 4 | -------------------------------------------------------------------------------- /.github/scripts/install_dependencies.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | sudo apt-get update 3 | sudo apt-get install -y xvfb x11-xserver-utils ffmpeg libasound2-dev libgtk-3-dev libavformat-dev libavfilter-dev libavdevice-dev x11-utils x11-apps xdotool sqlite3 openbox xterm fonts-liberation tesseract-ocr libtesseract-dev imagemagick fonts-dejavu alsa-utils pulseaudio pulseaudio-utils libxdo-dev 4 | -------------------------------------------------------------------------------- /.github/scripts/run_screenpipe.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | export XDG_RUNTIME_DIR=/run/user/$(id -u) 3 | export PULSE_SERVER=unix:${XDG_RUNTIME_DIR}/pulse/native 4 | ./target/release/screenpipe --disable-telemetry --debug > screenpipe_output.log 2>&1 & 5 | SCREENPIPE_PID=$! 6 | echo $SCREENPIPE_PID > screenpipe.pid 7 | # Check resource usage every 10 seconds, for 1 minute 8 | for i in {1..6} 9 | do 10 | sleep 10 11 | ps -p $SCREENPIPE_PID -o %cpu,%mem,cmd 12 | done 13 | -------------------------------------------------------------------------------- /.github/scripts/stop_screenpipe.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | kill $(cat screenpipe.pid) 3 | sleep 5 4 | -------------------------------------------------------------------------------- /.github/scripts/verify_tesseract.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | tesseract --version 3 | ldconfig -p | grep tesseract 4 | ls -l /usr/lib/x86_64-linux-gnu/libtesseract* 5 | -------------------------------------------------------------------------------- /content/Claude_prompt.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mediar-ai/screenpipe/cb8bbfe9fb6ace78de84ed3a732761f039e9cd2d/content/Claude_prompt.png -------------------------------------------------------------------------------- /content/Elon_Musk_prompt.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mediar-ai/screenpipe/cb8bbfe9fb6ace78de84ed3a732761f039e9cd2d/content/Elon_Musk_prompt.png -------------------------------------------------------------------------------- /content/Vercel_app.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mediar-ai/screenpipe/cb8bbfe9fb6ace78de84ed3a732761f039e9cd2d/content/Vercel_app.png -------------------------------------------------------------------------------- /content/audio_transcriptions.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mediar-ai/screenpipe/cb8bbfe9fb6ace78de84ed3a732761f039e9cd2d/content/audio_transcriptions.png -------------------------------------------------------------------------------- /content/changelogs/0.10.0.md: -------------------------------------------------------------------------------- 1 | Great! Please go ahead and provide me with the list of commits so that I can assist you in generating the changelog for the new screenpipe update based on these commits. 2 | 3 | #### **Full Changelog:** [..e2157](https://github.com/mediar-ai/screenpipe/compare/..e2157) 4 | 5 | -------------------------------------------------------------------------------- /content/changelogs/0.10.1.md: -------------------------------------------------------------------------------- 1 | Great! Please go ahead and provide me with the list of commits so that I can assist you in generating the changelog for the new screenpipe update based on these commits. 2 | 3 | #### **Full Changelog:** [..b2721](https://github.com/mediar-ai/screenpipe/compare/..b2721) 4 | 5 | -------------------------------------------------------------------------------- /content/changelogs/0.10.2.md: -------------------------------------------------------------------------------- 1 | Great! Please go ahead and provide me with the list of commits so that I can assist you in generating the changelog for the new screenpipe update based on these commits. 2 | 3 | #### **Full Changelog:** [..f5bd0](https://github.com/mediar-ai/screenpipe/compare/..f5bd0) 4 | 5 | -------------------------------------------------------------------------------- /content/changelogs/0.11.0.md: -------------------------------------------------------------------------------- 1 | ### **Fixes:**\n- **Fixed focus issue:** Resolved focus problem with combobox items, improving user interaction.\n- **Fixed release usage:** Ensure the correct usage of published releases for stability. 2 | 3 | #### **Full Changelog:** [f80f9..e8b71](https://github.com/mediar-ai/screenpipe/compare/f80f9..e8b71) 4 | 5 | -------------------------------------------------------------------------------- /content/changelogs/0.11.9.md: -------------------------------------------------------------------------------- 1 | ### **Fixes:** 2 | - **Attempted fix for UI monitoring:** Attempted to resolve UI monitoring issues for better user experience. 3 | 4 | #### **Full Changelog:** [2ff0a..f6f2a](https://github.com/mediar-ai/screenpipe/compare/2ff0a..f6f2a) 5 | 6 | -------------------------------------------------------------------------------- /content/changelogs/0.14.13.md: -------------------------------------------------------------------------------- 1 | ### **Improvements:** 2 | - **Added package.json on all pipes:** Ensured consistent package.json presence across all pipes for better dependency management and clarity. 3 | 4 | #### **Full Changelog:** [4ebd3..9c90a](https://github.com/mediar-ai/screenpipe/compare/4ebd3..9c90a) 5 | 6 | -------------------------------------------------------------------------------- /content/changelogs/0.14.17.md: -------------------------------------------------------------------------------- 1 | Great! Please go ahead and provide me with the list of commits so that I can generate a changelog based on them. 2 | 3 | #### **Full Changelog:** [3a776..9c90a](https://github.com/mediar-ai/screenpipe/compare/3a776..9c90a) 4 | 5 | -------------------------------------------------------------------------------- /content/changelogs/0.14.18.md: -------------------------------------------------------------------------------- 1 | ### **Fixes:** 2 | - **Fixed release-app issue:** Resolved the release-app problem for smoother application functionality. 3 | 4 | #### **Full Changelog:** [360f9..c1114](https://github.com/mediar-ai/screenpipe/compare/360f9..c1114) 5 | 6 | -------------------------------------------------------------------------------- /content/changelogs/0.14.2.md: -------------------------------------------------------------------------------- 1 | ### **Improvements:** 2 | - **Refactored build process for better dependency handling:** Installed bun in build.rs instead of pre_build for improved build process (#772, #779). 3 | - **Improved dylib management:** Implemented build.rs for dylibs for better management (#784). 4 | 5 | #### **Full Changelog:** [fe18f..8a8cd](https://github.com/mediar-ai/screenpipe/compare/fe18f..8a8cd) 6 | 7 | -------------------------------------------------------------------------------- /content/changelogs/0.14.20.md: -------------------------------------------------------------------------------- 1 | Great! Please go ahead and provide me with the list of commits so we can create the changelog for the new screenpipe update. 2 | 3 | #### **Full Changelog:** [14af8..e6677](https://github.com/mediar-ai/screenpipe/compare/14af8..e6677) 4 | 5 | -------------------------------------------------------------------------------- /content/changelogs/0.14.22.md: -------------------------------------------------------------------------------- 1 | Thank you for providing the commit details. Based on the commit message ix settings update\, I will add the following entry to the changelog: 2 | 3 | ### **Fixes:** 4 | - **Fixed settings update issue:** Resolved issue with settings update to ensure proper functionality. 5 | 6 | #### **Full Changelog:** [7d776..69bfd](https://github.com/mediar-ai/screenpipe/compare/7d776..69bfd) 7 | 8 | -------------------------------------------------------------------------------- /content/changelogs/0.14.24.md: -------------------------------------------------------------------------------- 1 | ### **New Features:** 2 | - **Speed up queries with FTS:** Improved query performance by implementing full-text search functionality. 3 | - **Add reset settings button:** Provided users with the ability to reset settings conveniently. 4 | 5 | ### **Improvements:** 6 | - N/A 7 | 8 | ### **Fixes:** 9 | - N/A 10 | 11 | #### **Full Changelog:** [28e75..eb5dd](https://github.com/mediar-ai/screenpipe/compare/28e75..eb5dd) 12 | 13 | -------------------------------------------------------------------------------- /content/changelogs/0.14.33.md: -------------------------------------------------------------------------------- 1 | ### **Fixes:** 2 | - **Fixed ffmpeg issue on macOS Tauri app:** Resolved a bug causing issues with ffmpeg on macOS Tauri app for smoother functionality. 3 | 4 | #### **Full Changelog:** [19498..fb8e2](https://github.com/mediar-ai/screenpipe/compare/19498..fb8e2) 5 | 6 | -------------------------------------------------------------------------------- /content/changelogs/0.15.3.md: -------------------------------------------------------------------------------- 1 | ### **Improvements:** 2 | - **Made log button more visible:** Improved visibility of the log button for easier access and usage. 3 | 4 | #### **Full Changelog:** [4e532..1bd7f](https://github.com/mediar-ai/screenpipe/compare/4e532..1bd7f) 5 | 6 | -------------------------------------------------------------------------------- /content/changelogs/0.15.5.md: -------------------------------------------------------------------------------- 1 | ### **Fixes:** 2 | - **Fixed UI monitoring accessibility setting:** Resolved issue with UI monitoring accessibility setting for improved user experience. 3 | 4 | #### **Full Changelog:** [648c8..589c8](https://github.com/mediar-ai/screenpipe/compare/648c8..589c8) 5 | 6 | -------------------------------------------------------------------------------- /content/changelogs/0.16.1.md: -------------------------------------------------------------------------------- 1 | ### **Fixes:** 2 | - **Fixed clickable issue with status button on Windows:** Resolved the issue where the status button on Windows could not be clicked. 3 | 4 | #### **Full Changelog:** [c47b5..6817d](https://github.com/mediar-ai/screenpipe/compare/c47b5..6817d) 5 | 6 | -------------------------------------------------------------------------------- /content/changelogs/0.17.0.md: -------------------------------------------------------------------------------- 1 | ### **Improvements:** 2 | - **Enhanced focus control:** Ignoring unfocused windows by default for improved user experience. 3 | - **Improved audio selection:** Automatically switching to audio when a speaker is selected in search for faster access. 4 | 5 | #### **Full Changelog:** [6ff4c..f492a](https://github.com/mediar-ai/screenpipe/compare/6ff4c..f492a) 6 | 7 | -------------------------------------------------------------------------------- /content/changelogs/0.17.8.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | #### **Full Changelog:** [adcb9..19f4c](https://github.com/mediar-ai/screenpipe/compare/adcb9..19f4c) 4 | 5 | -------------------------------------------------------------------------------- /content/changelogs/0.18.0.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | #### **Full Changelog:** [61218..c7053](https://github.com/mediar-ai/screenpipe/compare/61218..c7053) 4 | 5 | -------------------------------------------------------------------------------- /content/changelogs/0.18.1.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | #### **Full Changelog:** [1104c..8f9a7](https://github.com/mediar-ai/screenpipe/compare/1104c..8f9a7) 4 | 5 | -------------------------------------------------------------------------------- /content/changelogs/0.18.3.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | #### **Full Changelog:** [6f903..8861b](https://github.com/mediar-ai/screenpipe/compare/6f903..8861b) 4 | 5 | -------------------------------------------------------------------------------- /content/changelogs/0.18.4.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | #### **Full Changelog:** [22632..647c9](https://github.com/mediar-ai/screenpipe/compare/22632..647c9) 4 | 5 | -------------------------------------------------------------------------------- /content/changelogs/0.18.9.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | #### **Full Changelog:** [9a5ac..e457c](https://github.com/mediar-ai/screenpipe/compare/9a5ac..e457c) 4 | 5 | -------------------------------------------------------------------------------- /content/changelogs/0.19.0.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | #### **Full Changelog:** [02b62..b0dcd](https://github.com/mediar-ai/screenpipe/compare/02b62..b0dcd) 4 | 5 | -------------------------------------------------------------------------------- /content/changelogs/0.19.3.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | #### **Full Changelog:** [1249d..cf1f2](https://github.com/mediar-ai/screenpipe/compare/1249d..cf1f2) 4 | 5 | -------------------------------------------------------------------------------- /content/changelogs/0.19.5.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | #### **Full Changelog:** [8dacd..48ab3](https://github.com/mediar-ai/screenpipe/compare/8dacd..48ab3) 4 | 5 | -------------------------------------------------------------------------------- /content/changelogs/0.20.2.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | #### **Full Changelog:** [e06e6..e68f6](https://github.com/mediar-ai/screenpipe/compare/e06e6..e68f6) 4 | 5 | -------------------------------------------------------------------------------- /content/changelogs/0.20.6.md: -------------------------------------------------------------------------------- 1 | ### **New Features:** 2 | - **Released app on store:** Published the Screenpipe application on the store, making it accessible for users. 3 | 4 | ### **Improvements:** 5 | - **Moved Obsidian V2 in store:** Streamlined access to Obsidian V2 as part of the application in the store. 6 | 7 | ### **Fixes:** 8 | - No fixes documented in the provided commit. 9 | 10 | #### **Full Changelog:** [a9e4b..509f1](https://github.com/mediar-ai/screenpipe/compare/a9e4b..509f1) 11 | 12 | -------------------------------------------------------------------------------- /content/changelogs/0.21.2.md: -------------------------------------------------------------------------------- 1 | ### **Improvements:** 2 | - **Increased default FPS on macOS:** Enhanced screen recording performance by increasing the default frames per second setting on macOS. 3 | 4 | ### **Fixes:** 5 | - **Fixed build and create-pipe issues:** Resolved problems related to the application build process and the create-pipe functionality. 6 | 7 | #### **Full Changelog:** [5cf86..69940](https://github.com/mediar-ai/screenpipe/compare/5cf86..69940) 8 | 9 | -------------------------------------------------------------------------------- /content/changelogs/0.22.2.md: -------------------------------------------------------------------------------- 1 | ### **Improvements:** 2 | - **Removed noise from store:** Enhanced the quality of recorded content by reducing background noise in the storage. 3 | 4 | ### **Fixes:** 5 | - **Fixed memory issues:** Resolved various memory-related problems to improve application stability and performance. 6 | 7 | #### **Full Changelog:** [964f3..1105a](https://github.com/mediar-ai/screenpipe/compare/964f3..1105a) 8 | 9 | -------------------------------------------------------------------------------- /content/changelogs/0.22.4.md: -------------------------------------------------------------------------------- 1 | ### **Fixes:** 2 | - **Fixed modal for instructions:** Corrected the modal display issue to improve user guidance. 3 | - **Fixed memories build:** Resolved issues related to building memories to enhance functionality. 4 | - **Fixed imports:** Addressed import issues to ensure proper application functionality. 5 | 6 | #### **Full Changelog:** [65c4e..66831](https://github.com/mediar-ai/screenpipe/compare/65c4e..66831) 7 | 8 | -------------------------------------------------------------------------------- /content/changelogs/0.22.6.md: -------------------------------------------------------------------------------- 1 | ### **New Features:** 2 | - **Added Pipe shortcuts:** Introduced new keyboard shortcuts for enhanced user efficiency when using the Screenpipe application. 3 | 4 | ### **Fixes:** 5 | - **Fixed casing issue:** Resolved a casing issue that could affect app performance. 6 | - **Fixed tiny log issue:** Addressed a minor logging problem to ensure accurate logging functionality. 7 | 8 | #### **Full Changelog:** [6b9c4..f22b7](https://github.com/mediar-ai/screenpipe/compare/6b9c4..f22b7) 9 | 10 | -------------------------------------------------------------------------------- /content/changelogs/0.23.4.md: -------------------------------------------------------------------------------- 1 | ### **Improvements:** 2 | - **Enhanced app launch conditions:** Ensured the user cannot open the app unless the build process is complete and functioning correctly. 3 | 4 | #### **Full Changelog:** [c4d4e..011a3](https://github.com/mediar-ai/screenpipe/compare/c4d4e..011a3) 5 | 6 | -------------------------------------------------------------------------------- /content/changelogs/0.24.4.md: -------------------------------------------------------------------------------- 1 | Based on the provided commits, here is the changelog: 2 | 3 | ### **Improvements:** 4 | - **Release of new application version:** Deployed the latest version of the application to enhance user experience. 5 | 6 | ### **Fixes:** 7 | - **Fixed commented out line:** Resolved an issue with a commented-out line in the code to improve functionality. 8 | 9 | #### **Full Changelog:** [57bde..bcf37](https://github.com/mediar-ai/screenpipe/compare/57bde..bcf37) 10 | 11 | -------------------------------------------------------------------------------- /content/changelogs/0.25.0.md: -------------------------------------------------------------------------------- 1 | ### **Fixes:** 2 | - **Fixed npm registry issue:** Resolved a case where users with a different npm registry setup could not install pipes, ensuring smoother installation for all users. 3 | 4 | #### **Full Changelog:** [991dc..eddc2](https://github.com/mediar-ai/screenpipe/compare/991dc..eddc2) 5 | 6 | -------------------------------------------------------------------------------- /content/changelogs/0.27.9.md: -------------------------------------------------------------------------------- 1 | ### **New Features:** 2 | - **Enabled publishing without Stripe integration:** Users can now publish pipes without needing to set up Stripe integration immediately, allowing for reduced friction in the publishing process. 3 | 4 | ### **Improvements:** 5 | - No relevant improvements reported. 6 | 7 | ### **Fixes:** 8 | - No relevant fixes reported. 9 | 10 | #### **Full Changelog:** [11b95..5def9](https://github.com/mediar-ai/screenpipe/compare/11b95..5def9) 11 | 12 | -------------------------------------------------------------------------------- /content/changelogs/0.30.5.md: -------------------------------------------------------------------------------- 1 | ### **New Features:** 2 | - **Added sub-command for path persistence:** Introduced a new sub-command `screenpipe add-to-path` for managing path persistence efficiently. 3 | 4 | ### **Improvements:** 5 | - **Enhanced auto destruct behavior:** Ensured that all pipes stop correctly when auto destruct is initiated. 6 | 7 | ### **Fixes:** 8 | - No specific fixes were noted in the provided commits. 9 | 10 | #### **Full Changelog:** [7031c..c5e17](https://github.com/mediar-ai/screenpipe/compare/7031c..c5e17) 11 | 12 | -------------------------------------------------------------------------------- /content/changelogs/0.30.8.md: -------------------------------------------------------------------------------- 1 | ### **New Features:** 2 | - **Added full screen support:** Users can now utilize full screen mode for their screen pipe recordings, enhancing focus and visibility. 3 | 4 | ### **Improvements:** 5 | - **Memory improvements:** Ongoing improvements to memory management to optimize performance. 6 | 7 | ### **Fixes:** 8 | - No specific fixes were mentioned in the commits provided. 9 | 10 | #### **Full Changelog:** [6257f..33f24](https://github.com/mediar-ai/screenpipe/compare/6257f..33f24) 11 | 12 | -------------------------------------------------------------------------------- /content/changelogs/0.31.0.md: -------------------------------------------------------------------------------- 1 | Based on the provided commit, it does not include any clear customer value or features that improve the user experience. Therefore, I cannot add anything to the changelog from this commit. Please provide more commits that demonstrate new features, improvements, or fixes for inclusion in the changelog. 2 | 3 | #### **Full Changelog:** [b3ef6..0a177](https://github.com/mediar-ai/screenpipe/compare/b3ef6..0a177) 4 | 5 | -------------------------------------------------------------------------------- /content/changelogs/0.31.8.md: -------------------------------------------------------------------------------- 1 | Based on the provided commits, here is the changelog for the new Screenpipe update: 2 | 3 | ### **Improvements:** 4 | - **Removed streaming from node-sdk:** Streamlined the node-sdk by removing the streaming functionality, which is now fully supported in the browser version. 5 | 6 | No new features or fixes were identified in the commits provided. 7 | 8 | #### **Full Changelog:** [d2232..9558d](https://github.com/mediar-ai/screenpipe/compare/d2232..9558d) 9 | 10 | -------------------------------------------------------------------------------- /content/changelogs/0.32.0.md: -------------------------------------------------------------------------------- 1 | Based on the provided commits, here is the changelog for the new Screenpipe update: 2 | 3 | ### **New Features:** 4 | - **Added endpoint to start and stop sidecar for pipes:** Introduced a new endpoint to enhance control over pipe management. 5 | 6 | ### **Improvements:** 7 | - **Updated storage functions:** Improved storage functions for better performance and reliability. 8 | 9 | #### **Full Changelog:** [754fa..6e9ef](https://github.com/mediar-ai/screenpipe/compare/754fa..6e9ef) 10 | 11 | -------------------------------------------------------------------------------- /content/changelogs/0.32.4.md: -------------------------------------------------------------------------------- 1 | Based on the provided commits, here is the updated changelog: 2 | 3 | ### **New Features:** 4 | - **Background Pipe Updates:** Implemented functionality for pipes to update in the background, enhancing user experience by minimizing disruptions during updates. 5 | 6 | ### **Improvements:** 7 | - None 8 | 9 | ### **Fixes:** 10 | - None 11 | 12 | #### **Full Changelog:** [d45a2..7830e](https://github.com/mediar-ai/screenpipe/compare/d45a2..7830e) 13 | 14 | -------------------------------------------------------------------------------- /content/changelogs/0.33.1.md: -------------------------------------------------------------------------------- 1 | ### **New Features:** 2 | - **Added memory profiling:** Introduced memory profiling capabilities to enhance performance monitoring and optimization. 3 | 4 | #### **Full Changelog:** [7928c..cac58](https://github.com/mediar-ai/screenpipe/compare/7928c..cac58) 5 | 6 | -------------------------------------------------------------------------------- /content/changelogs/0.35.14.md: -------------------------------------------------------------------------------- 1 | Based on your provided commits, here is the changelog for the new Screenpipe update: 2 | 3 | ### **Fixes:** 4 | - **Fixed Salty Posthog integration:** Resolved issues with the Salty Posthog integration for improved performance. 5 | - **Updated README:** Corrected and improved the documentation in the README file for better clarity. 6 | 7 | Please let me know if you have any other questions! 8 | 9 | #### **Full Changelog:** [d3d65..99697](https://github.com/mediar-ai/screenpipe/compare/d3d65..99697) 10 | 11 | -------------------------------------------------------------------------------- /content/changelogs/0.37.1.md: -------------------------------------------------------------------------------- 1 | Based on the provided commit, here is the updated changelog: 2 | 3 | ### **Fixes:** 4 | - **Fixed embedding endpoint:** Resolved issues with the embedding endpoint to ensure reliable functionality. 5 | 6 | #### **Full Changelog:** [3ab70..88aa5](https://github.com/mediar-ai/screenpipe/compare/3ab70..88aa5) 7 | 8 | -------------------------------------------------------------------------------- /content/changelogs/0.38.1.md: -------------------------------------------------------------------------------- 1 | ### **Improvements:** 2 | - **Fixed icon bouncing issue on macOS:** Resolved an issue causing icons to bounce unnecessarily. 3 | 4 | ### **Fixes:** 5 | - **Fixed dead link in documentation:** Corrected a broken link in the documentation for better user guidance. 6 | 7 | #### **Full Changelog:** [6acb5..bf445](https://github.com/mediar-ai/screenpipe/compare/6acb5..bf445) 8 | 9 | -------------------------------------------------------------------------------- /content/changelogs/0.38.5.md: -------------------------------------------------------------------------------- 1 | Based on the provided commits, it seems that there are no contributions that bring clear customer value. The updates related to the release application and documentation do not directly enhance features, improve performance, or fix issues that users would experience. 2 | 3 | Therefore, there are no relevant changes to include in the changelog at this time. 4 | 5 | #### **Full Changelog:** [89f83..87cef](https://github.com/mediar-ai/screenpipe/compare/89f83..87cef) 6 | 7 | -------------------------------------------------------------------------------- /content/changelogs/0.41.5.md: -------------------------------------------------------------------------------- 1 | ### **New Features:** 2 | - **Make Screenpipe run on Windows 10:** Added support for running Screenpipe on Windows 10, expanding compatibility for users on this operating system. 3 | 4 | ### **Improvements:** 5 | (No improvements were noted in the commits provided.) 6 | 7 | ### **Fixes:** 8 | (No fixes were noted in the commits provided.) 9 | 10 | #### **Full Changelog:** [be8c9..34d3c](https://github.com/mediar-ai/screenpipe/compare/be8c9..34d3c) 11 | 12 | -------------------------------------------------------------------------------- /content/changelogs/0.41.9.md: -------------------------------------------------------------------------------- 1 | ### **Improvements:** 2 | - **Enhanced download model toast:** Improved the user experience of the download model notification. 3 | 4 | #### **Full Changelog:** [c814d..2be1b](https://github.com/mediar-ai/screenpipe/compare/c814d..2be1b) 5 | 6 | -------------------------------------------------------------------------------- /content/changelogs/0.42.1.md: -------------------------------------------------------------------------------- 1 | ### **New Features:** 2 | - **Improved pipe update functionality:** Enhanced the update process for better user experience and efficiency. 3 | 4 | ### **Improvements:** 5 | - **Updated user experience:** Made UX improvements to streamline interactions with the application. 6 | 7 | ### **Fixes:** 8 | (No relevant fixes were noted in the commits provided.) 9 | 10 | #### **Full Changelog:** [7a52e..d8350](https://github.com/mediar-ai/screenpipe/compare/7a52e..d8350) 11 | 12 | -------------------------------------------------------------------------------- /content/changelogs/0.43.5.md: -------------------------------------------------------------------------------- 1 | ### **Fixes:** 2 | - **Fixed operator find by ID:** Resolved an issue with finding operators by their ID for improved reliability. 3 | - **Fixed syntax error in install.ps1:** Corrected a syntax error in the PowerShell installation script to ensure successful installations. 4 | 5 | #### **Full Changelog:** [659b5..e63be](https://github.com/mediar-ai/screenpipe/compare/659b5..e63be) 6 | 7 | -------------------------------------------------------------------------------- /content/developer-account.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mediar-ai/screenpipe/cb8bbfe9fb6ace78de84ed3a732761f039e9cd2d/content/developer-account.png -------------------------------------------------------------------------------- /content/diagram2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mediar-ai/screenpipe/cb8bbfe9fb6ace78de84ed3a732761f039e9cd2d/content/diagram2.png -------------------------------------------------------------------------------- /content/docs-mintlify-mig-tmp/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mediar-ai/screenpipe/cb8bbfe9fb6ace78de84ed3a732761f039e9cd2d/content/docs-mintlify-mig-tmp/favicon.ico -------------------------------------------------------------------------------- /content/docs-mintlify-mig-tmp/public/5ire-setup.gif: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:dfd865a1acd5026b53c12011b4f3df18578223602ac0d06e8f52f257654cdc7e 3 | size 417759 4 | -------------------------------------------------------------------------------- /content/docs-mintlify-mig-tmp/public/claude-setup.gif: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:52d63fd8635663f413861cb85359245beaaf5ad6dbb5d40f6bacafd9eb9498c6 3 | size 422366 4 | -------------------------------------------------------------------------------- /content/docs-mintlify-mig-tmp/public/cursor-mcp-result.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mediar-ai/screenpipe/cb8bbfe9fb6ace78de84ed3a732761f039e9cd2d/content/docs-mintlify-mig-tmp/public/cursor-mcp-result.png -------------------------------------------------------------------------------- /content/docs-mintlify-mig-tmp/public/cursor-setup.gif: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:4525fb0664336f72034666c04207bb2548d649f233352b3806aec0e27a2f185a 3 | size 598444 4 | -------------------------------------------------------------------------------- /content/docs-mintlify-mig-tmp/public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mediar-ai/screenpipe/cb8bbfe9fb6ace78de84ed3a732761f039e9cd2d/content/docs-mintlify-mig-tmp/public/favicon.ico -------------------------------------------------------------------------------- /content/docs-mintlify-mig-tmp/public/lmstudio1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mediar-ai/screenpipe/cb8bbfe9fb6ace78de84ed3a732761f039e9cd2d/content/docs-mintlify-mig-tmp/public/lmstudio1.png -------------------------------------------------------------------------------- /content/docs-mintlify-mig-tmp/public/lmstudio2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mediar-ai/screenpipe/cb8bbfe9fb6ace78de84ed3a732761f039e9cd2d/content/docs-mintlify-mig-tmp/public/lmstudio2.png -------------------------------------------------------------------------------- /content/docs-mintlify-mig-tmp/public/lmstudio3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mediar-ai/screenpipe/cb8bbfe9fb6ace78de84ed3a732761f039e9cd2d/content/docs-mintlify-mig-tmp/public/lmstudio3.png -------------------------------------------------------------------------------- /content/frame_text.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mediar-ai/screenpipe/cb8bbfe9fb6ace78de84ed3a732761f039e9cd2d/content/frame_text.png -------------------------------------------------------------------------------- /pipes/README.md: -------------------------------------------------------------------------------- 1 | 2 | to run a pipe locally, run `bun i` and `bun dev` in the pipe's folder. (or npm/pnpm/yarn) 3 | 4 | crons won't work unless you are installing the pipe to screenpipe: 5 | 6 | ```bash 7 | screenpipe pipe install 8 | ``` 9 | 10 | check [docs](https://docs.screenpi.pe/plugins). 11 | -------------------------------------------------------------------------------- /pipes/assistant-ui-ollama-openai-screenpipe/.eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": ["next/core-web-vitals"] 3 | } 4 | -------------------------------------------------------------------------------- /pipes/assistant-ui-ollama-openai-screenpipe/README.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | very raw v0 of screenpipe operator usage example (which is experimental itself) 4 | 5 | allow you to click, type, scrap, control your computer using a playwright API like, using accessibility API instead of pixels like everyone is doing (eg openai, anthropic, all trash, dinosaur people :D) 6 | 7 | 8 | https://cap.so/s/4kpvfe76hw4jd6q 9 | 10 | 11 | backend code: 12 | 13 | https://github.com/mediar-ai/screenpipe/tree/main/screenpipe-core/src/operator 14 | -------------------------------------------------------------------------------- /pipes/assistant-ui-ollama-openai-screenpipe/app/api/get-apps/route.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mediar-ai/screenpipe/cb8bbfe9fb6ace78de84ed3a732761f039e9cd2d/pipes/assistant-ui-ollama-openai-screenpipe/app/api/get-apps/route.ts -------------------------------------------------------------------------------- /pipes/assistant-ui-ollama-openai-screenpipe/app/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mediar-ai/screenpipe/cb8bbfe9fb6ace78de84ed3a732761f039e9cd2d/pipes/assistant-ui-ollama-openai-screenpipe/app/favicon.ico -------------------------------------------------------------------------------- /pipes/assistant-ui-ollama-openai-screenpipe/app/hello-world-mcp-client/WIP-interface.ts: -------------------------------------------------------------------------------- 1 | async startChatLoop(): Promise { 2 | console.log("desktop control client started"); 3 | console.log("type your queries or 'quit' to exit"); 4 | 5 | // interactive prompt handling logic 6 | // ... 7 | } 8 | -------------------------------------------------------------------------------- /pipes/assistant-ui-ollama-openai-screenpipe/app/hello-world-mcp-client/WIP-tool-execution-logic.ts: -------------------------------------------------------------------------------- 1 | async executeTool(toolName: string, args: any): Promise { 2 | console.log(`executing tool ${toolName} with args: ${JSON.stringify(args)}`); 3 | 4 | const result = await this.session!.callTool(toolName, args); 5 | 6 | console.log(`tool result: ${result.substring(0, 100)}${result.length > 100 ? '...' : ''}`); 7 | return result; 8 | } 9 | -------------------------------------------------------------------------------- /pipes/assistant-ui-ollama-openai-screenpipe/app/hello-world-mcp-client/build-workflows.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mediar-ai/screenpipe/cb8bbfe9fb6ace78de84ed3a732761f039e9cd2d/pipes/assistant-ui-ollama-openai-screenpipe/app/hello-world-mcp-client/build-workflows.ts -------------------------------------------------------------------------------- /pipes/assistant-ui-ollama-openai-screenpipe/app/page.tsx: -------------------------------------------------------------------------------- 1 | import { Assistant } from "./assistant"; 2 | 3 | export default function HelloWorldComputerUse() { 4 | return ; 5 | } 6 | -------------------------------------------------------------------------------- /pipes/assistant-ui-ollama-openai-screenpipe/bun.lockb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mediar-ai/screenpipe/cb8bbfe9fb6ace78de84ed3a732761f039e9cd2d/pipes/assistant-ui-ollama-openai-screenpipe/bun.lockb -------------------------------------------------------------------------------- /pipes/assistant-ui-ollama-openai-screenpipe/components/ui/skeleton.tsx: -------------------------------------------------------------------------------- 1 | import { cn } from "@/lib/utils" 2 | 3 | function Skeleton({ 4 | className, 5 | ...props 6 | }: React.HTMLAttributes) { 7 | return ( 8 |
12 | ) 13 | } 14 | 15 | export { Skeleton } 16 | -------------------------------------------------------------------------------- /pipes/assistant-ui-ollama-openai-screenpipe/lib/actions/get-screenpipe-app-settings.ts: -------------------------------------------------------------------------------- 1 | "use server"; 2 | 3 | import { pipe } from "@screenpipe/js"; 4 | import type { Settings as ScreenpipeAppSettings } from "@screenpipe/js"; 5 | 6 | export async function getScreenpipeAppSettings() { 7 | return await pipe.settings.getAll(); 8 | } 9 | 10 | export async function updateScreenpipeAppSettings( 11 | newSettings: Partial 12 | ) { 13 | return await pipe.settings.update(newSettings); 14 | } 15 | -------------------------------------------------------------------------------- /pipes/assistant-ui-ollama-openai-screenpipe/lib/client-only.tsx: -------------------------------------------------------------------------------- 1 | "use client"; 2 | 3 | import { useEffect, useState } from "react"; 4 | 5 | export function ClientOnly({ children }: { children: React.ReactNode }) { 6 | const [isClient, setIsClient] = useState(false); 7 | 8 | useEffect(() => { 9 | setIsClient(true); 10 | }, []); 11 | 12 | if (!isClient) { 13 | return null; 14 | } 15 | 16 | return <>{children}; 17 | } -------------------------------------------------------------------------------- /pipes/assistant-ui-ollama-openai-screenpipe/lib/hooks/use-debounce.tsx: -------------------------------------------------------------------------------- 1 | import { useState, useEffect } from "react"; 2 | 3 | export function useDebounce(value: T, delay: number): T { 4 | const [debouncedValue, setDebouncedValue] = useState(value); 5 | 6 | useEffect(() => { 7 | const handler = setTimeout(() => { 8 | setDebouncedValue(value); 9 | }, delay); 10 | 11 | return () => { 12 | clearTimeout(handler); 13 | }; 14 | }, [value, delay]); 15 | 16 | return debouncedValue; 17 | } 18 | -------------------------------------------------------------------------------- /pipes/assistant-ui-ollama-openai-screenpipe/next.config.mjs: -------------------------------------------------------------------------------- 1 | /** @type {import('next').NextConfig} */ 2 | const nextConfig = { 3 | webpack: (config) => { 4 | // Add support for raw-loader to import file content as strings 5 | config.module.rules.push({ 6 | test: /\.(tsx|ts|js|jsx)$/, 7 | resourceQuery: /raw/, 8 | type: 'asset/source', 9 | }); 10 | 11 | return config; 12 | }, 13 | }; 14 | 15 | export default nextConfig; 16 | -------------------------------------------------------------------------------- /pipes/assistant-ui-ollama-openai-screenpipe/pipe.json: -------------------------------------------------------------------------------- 1 | { 2 | "crons": [ 3 | { 4 | "path": "/api/pipeline", 5 | "schedule": "0 0 11 * * *" 6 | } 7 | ] 8 | } 9 | -------------------------------------------------------------------------------- /pipes/assistant-ui-ollama-openai-screenpipe/postcss.config.mjs: -------------------------------------------------------------------------------- 1 | /** @type {import('postcss-load-config').Config} */ 2 | const config = { 3 | plugins: { 4 | tailwindcss: {}, 5 | }, 6 | }; 7 | 8 | export default config; 9 | -------------------------------------------------------------------------------- /pipes/assistant-ui-ollama-openai-screenpipe/public/128x128.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mediar-ai/screenpipe/cb8bbfe9fb6ace78de84ed3a732761f039e9cd2d/pipes/assistant-ui-ollama-openai-screenpipe/public/128x128.png -------------------------------------------------------------------------------- /pipes/data-table/README.md: -------------------------------------------------------------------------------- 1 | visualize your data in a table, use AI to turn your 24/7 recordings into tables 2 | 3 | Screenshot 2025-02-07 at 9 46 39 AM 4 | 5 | Screenshot 2024-12-16 at 2 16 28 PM 6 | -------------------------------------------------------------------------------- /pipes/data-table/bun.lockb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mediar-ai/screenpipe/cb8bbfe9fb6ace78de84ed3a732761f039e9cd2d/pipes/data-table/bun.lockb -------------------------------------------------------------------------------- /pipes/data-table/eslint.config.mjs: -------------------------------------------------------------------------------- 1 | import { dirname } from "path"; 2 | import { fileURLToPath } from "url"; 3 | import { FlatCompat } from "@eslint/eslintrc"; 4 | 5 | const __filename = fileURLToPath(import.meta.url); 6 | const __dirname = dirname(__filename); 7 | 8 | const compat = new FlatCompat({ 9 | baseDirectory: __dirname, 10 | }); 11 | 12 | const eslintConfig = [ 13 | ...compat.extends("next/core-web-vitals", "next/typescript"), 14 | ]; 15 | 16 | export default eslintConfig; 17 | -------------------------------------------------------------------------------- /pipes/data-table/next.config.ts: -------------------------------------------------------------------------------- 1 | import type { NextConfig } from "next"; 2 | 3 | const nextConfig: NextConfig = { 4 | transpilePackages: ["@screenpipe/js"], 5 | webpack: (config, { }) => { 6 | return config; 7 | }, 8 | devIndicators: { 9 | buildActivity: false, 10 | appIsrStatus: false, 11 | }, 12 | }; 13 | 14 | export default nextConfig; 15 | -------------------------------------------------------------------------------- /pipes/data-table/postcss.config.mjs: -------------------------------------------------------------------------------- 1 | /** @type {import('postcss-load-config').Config} */ 2 | const config = { 3 | plugins: { 4 | tailwindcss: {}, 5 | }, 6 | }; 7 | 8 | export default config; 9 | -------------------------------------------------------------------------------- /pipes/data-table/public/file.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /pipes/data-table/public/vercel.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /pipes/data-table/public/window.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /pipes/data-table/src/app/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mediar-ai/screenpipe/cb8bbfe9fb6ace78de84ed3a732761f039e9cd2d/pipes/data-table/src/app/favicon.ico -------------------------------------------------------------------------------- /pipes/data-table/src/app/page.tsx: -------------------------------------------------------------------------------- 1 | // "use client"; 2 | 3 | import DataPage from "@/components/page"; 4 | 5 | export default function SearchPage() { 6 | 7 | return ( 8 |
9 |

where pixels become magic

10 | 11 |
12 | ); 13 | } 14 | -------------------------------------------------------------------------------- /pipes/data-table/src/components/markdown.tsx: -------------------------------------------------------------------------------- 1 | import { FC, memo } from 'react' 2 | import ReactMarkdown, { Options } from 'react-markdown' 3 | 4 | export const MemoizedReactMarkdown: FC = memo( 5 | ReactMarkdown, 6 | (prevProps, nextProps) => 7 | prevProps.children === nextProps.children && 8 | prevProps.className === nextProps.className 9 | ) 10 | -------------------------------------------------------------------------------- /pipes/data-table/src/components/ui/skeleton.tsx: -------------------------------------------------------------------------------- 1 | import { cn } from "@/lib/utils" 2 | 3 | function Skeleton({ 4 | className, 5 | ...props 6 | }: React.HTMLAttributes) { 7 | return ( 8 |
12 | ) 13 | } 14 | 15 | export { Skeleton } 16 | -------------------------------------------------------------------------------- /pipes/data-table/src/lib/actions/get-screenpipe-app-settings.ts: -------------------------------------------------------------------------------- 1 | "use server"; 2 | 3 | import { pipe } from "@screenpipe/js"; 4 | import type { Settings as ScreenpipeAppSettings } from "@screenpipe/js"; 5 | 6 | export async function getScreenpipeAppSettings() { 7 | return await pipe.settings.getAll(); 8 | } 9 | 10 | export async function updateScreenpipeAppSettings( 11 | newSettings: Partial 12 | ) { 13 | return await pipe.settings.update(newSettings); 14 | } 15 | -------------------------------------------------------------------------------- /pipes/data-table/src/lib/hooks/use-debounce.tsx: -------------------------------------------------------------------------------- 1 | import { useState, useEffect } from "react"; 2 | 3 | export function useDebounce(value: T, delay: number): T { 4 | const [debouncedValue, setDebouncedValue] = useState(value); 5 | 6 | useEffect(() => { 7 | const handler = setTimeout(() => { 8 | setDebouncedValue(value); 9 | }, delay); 10 | 11 | return () => { 12 | clearTimeout(handler); 13 | }; 14 | }, [value, delay]); 15 | 16 | return debouncedValue; 17 | } 18 | -------------------------------------------------------------------------------- /pipes/desktop-to-table/.eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": ["next/core-web-vitals"] 3 | } 4 | -------------------------------------------------------------------------------- /pipes/desktop-to-table/README.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | very raw v0 of screenpipe operator usage example (which is experimental itself) 4 | 5 | allow you to click, type, scrap, control your computer using a playwright API like, using accessibility API instead of pixels like everyone is doing (eg openai, anthropic, all trash, dinosaur people :D) 6 | 7 | 8 | https://cap.so/s/4kpvfe76hw4jd6q 9 | 10 | 11 | backend code: 12 | 13 | https://github.com/mediar-ai/screenpipe/tree/main/screenpipe-core/src/operator 14 | -------------------------------------------------------------------------------- /pipes/desktop-to-table/app/api/get-apps/route.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mediar-ai/screenpipe/cb8bbfe9fb6ace78de84ed3a732761f039e9cd2d/pipes/desktop-to-table/app/api/get-apps/route.ts -------------------------------------------------------------------------------- /pipes/desktop-to-table/app/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mediar-ai/screenpipe/cb8bbfe9fb6ace78de84ed3a732761f039e9cd2d/pipes/desktop-to-table/app/favicon.ico -------------------------------------------------------------------------------- /pipes/desktop-to-table/bun.lockb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mediar-ai/screenpipe/cb8bbfe9fb6ace78de84ed3a732761f039e9cd2d/pipes/desktop-to-table/bun.lockb -------------------------------------------------------------------------------- /pipes/desktop-to-table/components/ui/skeleton.tsx: -------------------------------------------------------------------------------- 1 | import { cn } from "@/lib/utils" 2 | 3 | function Skeleton({ 4 | className, 5 | ...props 6 | }: React.HTMLAttributes) { 7 | return ( 8 |
12 | ) 13 | } 14 | 15 | export { Skeleton } 16 | -------------------------------------------------------------------------------- /pipes/desktop-to-table/lib/actions/get-screenpipe-app-settings.ts: -------------------------------------------------------------------------------- 1 | "use server"; 2 | 3 | import { pipe } from "@screenpipe/js"; 4 | import type { Settings as ScreenpipeAppSettings } from "@screenpipe/js"; 5 | 6 | export async function getScreenpipeAppSettings() { 7 | return await pipe.settings.getAll(); 8 | } 9 | 10 | export async function updateScreenpipeAppSettings( 11 | newSettings: Partial 12 | ) { 13 | return await pipe.settings.update(newSettings); 14 | } 15 | -------------------------------------------------------------------------------- /pipes/desktop-to-table/lib/client-only.tsx: -------------------------------------------------------------------------------- 1 | "use client"; 2 | 3 | import { useEffect, useState } from "react"; 4 | 5 | export function ClientOnly({ children }: { children: React.ReactNode }) { 6 | const [isClient, setIsClient] = useState(false); 7 | 8 | useEffect(() => { 9 | setIsClient(true); 10 | }, []); 11 | 12 | if (!isClient) { 13 | return null; 14 | } 15 | 16 | return <>{children}; 17 | } -------------------------------------------------------------------------------- /pipes/desktop-to-table/lib/hooks/use-debounce.tsx: -------------------------------------------------------------------------------- 1 | import { useState, useEffect } from "react"; 2 | 3 | export function useDebounce(value: T, delay: number): T { 4 | const [debouncedValue, setDebouncedValue] = useState(value); 5 | 6 | useEffect(() => { 7 | const handler = setTimeout(() => { 8 | setDebouncedValue(value); 9 | }, delay); 10 | 11 | return () => { 12 | clearTimeout(handler); 13 | }; 14 | }, [value, delay]); 15 | 16 | return debouncedValue; 17 | } 18 | -------------------------------------------------------------------------------- /pipes/desktop-to-table/next.config.mjs: -------------------------------------------------------------------------------- 1 | /** @type {import('next').NextConfig} */ 2 | const nextConfig = { 3 | webpack: (config) => { 4 | // Add support for raw-loader to import file content as strings 5 | config.module.rules.push({ 6 | test: /\.(tsx|ts|js|jsx)$/, 7 | resourceQuery: /raw/, 8 | type: 'asset/source', 9 | }); 10 | 11 | return config; 12 | }, 13 | }; 14 | 15 | export default nextConfig; 16 | -------------------------------------------------------------------------------- /pipes/desktop-to-table/pipe.json: -------------------------------------------------------------------------------- 1 | { 2 | "crons": [ 3 | { 4 | "path": "/api/pipeline", 5 | "schedule": "0 0 11 * * *" 6 | } 7 | ] 8 | } 9 | -------------------------------------------------------------------------------- /pipes/desktop-to-table/postcss.config.mjs: -------------------------------------------------------------------------------- 1 | /** @type {import('postcss-load-config').Config} */ 2 | const config = { 3 | plugins: { 4 | tailwindcss: {}, 5 | }, 6 | }; 7 | 8 | export default config; 9 | -------------------------------------------------------------------------------- /pipes/desktop-to-table/public/128x128.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mediar-ai/screenpipe/cb8bbfe9fb6ace78de84ed3a732761f039e9cd2d/pipes/desktop-to-table/public/128x128.png -------------------------------------------------------------------------------- /pipes/discord-to-spreadsheet/.eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": ["next/core-web-vitals"] 3 | } 4 | -------------------------------------------------------------------------------- /pipes/discord-to-spreadsheet/README.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | very raw v0 of screenpipe operator usage example (which is experimental itself) 4 | 5 | allow you to click, type, scrap, control your computer using a playwright API like, using accessibility API instead of pixels like everyone is doing (eg openai, anthropic, all trash, dinosaur people :D) 6 | 7 | 8 | https://cap.so/s/4kpvfe76hw4jd6q 9 | 10 | 11 | backend code: 12 | 13 | https://github.com/mediar-ai/screenpipe/tree/main/screenpipe-core/src/operator 14 | -------------------------------------------------------------------------------- /pipes/discord-to-spreadsheet/app/api/get-apps/route.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mediar-ai/screenpipe/cb8bbfe9fb6ace78de84ed3a732761f039e9cd2d/pipes/discord-to-spreadsheet/app/api/get-apps/route.ts -------------------------------------------------------------------------------- /pipes/discord-to-spreadsheet/app/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mediar-ai/screenpipe/cb8bbfe9fb6ace78de84ed3a732761f039e9cd2d/pipes/discord-to-spreadsheet/app/favicon.ico -------------------------------------------------------------------------------- /pipes/discord-to-spreadsheet/bun.lockb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mediar-ai/screenpipe/cb8bbfe9fb6ace78de84ed3a732761f039e9cd2d/pipes/discord-to-spreadsheet/bun.lockb -------------------------------------------------------------------------------- /pipes/discord-to-spreadsheet/components/ui/skeleton.tsx: -------------------------------------------------------------------------------- 1 | import { cn } from "@/lib/utils" 2 | 3 | function Skeleton({ 4 | className, 5 | ...props 6 | }: React.HTMLAttributes) { 7 | return ( 8 |
12 | ) 13 | } 14 | 15 | export { Skeleton } 16 | -------------------------------------------------------------------------------- /pipes/discord-to-spreadsheet/lib/actions/get-screenpipe-app-settings.ts: -------------------------------------------------------------------------------- 1 | "use server"; 2 | 3 | import { pipe } from "@screenpipe/js"; 4 | import type { Settings as ScreenpipeAppSettings } from "@screenpipe/js"; 5 | 6 | export async function getScreenpipeAppSettings() { 7 | return await pipe.settings.getAll(); 8 | } 9 | 10 | export async function updateScreenpipeAppSettings( 11 | newSettings: Partial 12 | ) { 13 | return await pipe.settings.update(newSettings); 14 | } 15 | -------------------------------------------------------------------------------- /pipes/discord-to-spreadsheet/lib/client-only.tsx: -------------------------------------------------------------------------------- 1 | "use client"; 2 | 3 | import { useEffect, useState } from "react"; 4 | 5 | export function ClientOnly({ children }: { children: React.ReactNode }) { 6 | const [isClient, setIsClient] = useState(false); 7 | 8 | useEffect(() => { 9 | setIsClient(true); 10 | }, []); 11 | 12 | if (!isClient) { 13 | return null; 14 | } 15 | 16 | return <>{children}; 17 | } -------------------------------------------------------------------------------- /pipes/discord-to-spreadsheet/lib/hooks/use-debounce.tsx: -------------------------------------------------------------------------------- 1 | import { useState, useEffect } from "react"; 2 | 3 | export function useDebounce(value: T, delay: number): T { 4 | const [debouncedValue, setDebouncedValue] = useState(value); 5 | 6 | useEffect(() => { 7 | const handler = setTimeout(() => { 8 | setDebouncedValue(value); 9 | }, delay); 10 | 11 | return () => { 12 | clearTimeout(handler); 13 | }; 14 | }, [value, delay]); 15 | 16 | return debouncedValue; 17 | } 18 | -------------------------------------------------------------------------------- /pipes/discord-to-spreadsheet/next.config.mjs: -------------------------------------------------------------------------------- 1 | /** @type {import('next').NextConfig} */ 2 | const nextConfig = { 3 | webpack: (config) => { 4 | // Add support for raw-loader to import file content as strings 5 | config.module.rules.push({ 6 | test: /\.(tsx|ts|js|jsx)$/, 7 | resourceQuery: /raw/, 8 | type: 'asset/source', 9 | }); 10 | 11 | return config; 12 | }, 13 | }; 14 | 15 | export default nextConfig; 16 | -------------------------------------------------------------------------------- /pipes/discord-to-spreadsheet/pipe.json: -------------------------------------------------------------------------------- 1 | { 2 | "crons": [ 3 | { 4 | "path": "/api/pipeline", 5 | "schedule": "0 0 11 * * *" 6 | } 7 | ] 8 | } 9 | -------------------------------------------------------------------------------- /pipes/discord-to-spreadsheet/postcss.config.mjs: -------------------------------------------------------------------------------- 1 | /** @type {import('postcss-load-config').Config} */ 2 | const config = { 3 | plugins: { 4 | tailwindcss: {}, 5 | }, 6 | }; 7 | 8 | export default config; 9 | -------------------------------------------------------------------------------- /pipes/discord-to-spreadsheet/public/128x128.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mediar-ai/screenpipe/cb8bbfe9fb6ace78de84ed3a732761f039e9cd2d/pipes/discord-to-spreadsheet/public/128x128.png -------------------------------------------------------------------------------- /pipes/example-pipe/.eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": ["next/core-web-vitals"] 3 | } 4 | -------------------------------------------------------------------------------- /pipes/example-pipe/app/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mediar-ai/screenpipe/cb8bbfe9fb6ace78de84ed3a732761f039e9cd2d/pipes/example-pipe/app/favicon.ico -------------------------------------------------------------------------------- /pipes/example-pipe/bun.lockb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mediar-ai/screenpipe/cb8bbfe9fb6ace78de84ed3a732761f039e9cd2d/pipes/example-pipe/bun.lockb -------------------------------------------------------------------------------- /pipes/example-pipe/components/ui/skeleton.tsx: -------------------------------------------------------------------------------- 1 | import { cn } from "@/lib/utils" 2 | 3 | function Skeleton({ 4 | className, 5 | ...props 6 | }: React.HTMLAttributes) { 7 | return ( 8 |
12 | ) 13 | } 14 | 15 | export { Skeleton } 16 | -------------------------------------------------------------------------------- /pipes/example-pipe/lib/actions/get-screenpipe-app-settings.ts: -------------------------------------------------------------------------------- 1 | "use server"; 2 | 3 | import { pipe } from "@screenpipe/js"; 4 | import type { Settings as ScreenpipeAppSettings } from "@screenpipe/js"; 5 | 6 | export async function getScreenpipeAppSettings() { 7 | return await pipe.settings.getAll(); 8 | } 9 | 10 | export async function updateScreenpipeAppSettings( 11 | newSettings: Partial 12 | ) { 13 | return await pipe.settings.update(newSettings); 14 | } 15 | -------------------------------------------------------------------------------- /pipes/example-pipe/lib/client-only.tsx: -------------------------------------------------------------------------------- 1 | "use client"; 2 | 3 | import { useEffect, useState } from "react"; 4 | 5 | export function ClientOnly({ children }: { children: React.ReactNode }) { 6 | const [isClient, setIsClient] = useState(false); 7 | 8 | useEffect(() => { 9 | setIsClient(true); 10 | }, []); 11 | 12 | if (!isClient) { 13 | return null; 14 | } 15 | 16 | return <>{children}; 17 | } -------------------------------------------------------------------------------- /pipes/example-pipe/lib/hooks/use-debounce.tsx: -------------------------------------------------------------------------------- 1 | import { useState, useEffect } from "react"; 2 | 3 | export function useDebounce(value: T, delay: number): T { 4 | const [debouncedValue, setDebouncedValue] = useState(value); 5 | 6 | useEffect(() => { 7 | const handler = setTimeout(() => { 8 | setDebouncedValue(value); 9 | }, delay); 10 | 11 | return () => { 12 | clearTimeout(handler); 13 | }; 14 | }, [value, delay]); 15 | 16 | return debouncedValue; 17 | } 18 | -------------------------------------------------------------------------------- /pipes/example-pipe/next.config.mjs: -------------------------------------------------------------------------------- 1 | /** @type {import('next').NextConfig} */ 2 | const nextConfig = { 3 | webpack: (config) => { 4 | // Add support for raw-loader to import file content as strings 5 | config.module.rules.push({ 6 | test: /\.(tsx|ts|js|jsx)$/, 7 | resourceQuery: /raw/, 8 | type: 'asset/source', 9 | }); 10 | 11 | return config; 12 | }, 13 | }; 14 | 15 | export default nextConfig; 16 | -------------------------------------------------------------------------------- /pipes/example-pipe/pipe.json: -------------------------------------------------------------------------------- 1 | { 2 | "crons": [ 3 | { 4 | "path": "/api/pipeline", 5 | "schedule": "0 0 11 * * *" 6 | } 7 | ] 8 | } 9 | -------------------------------------------------------------------------------- /pipes/example-pipe/postcss.config.mjs: -------------------------------------------------------------------------------- 1 | /** @type {import('postcss-load-config').Config} */ 2 | const config = { 3 | plugins: { 4 | tailwindcss: {}, 5 | }, 6 | }; 7 | 8 | export default config; 9 | -------------------------------------------------------------------------------- /pipes/example-pipe/public/128x128.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mediar-ai/screenpipe/cb8bbfe9fb6ace78de84ed3a732761f039e9cd2d/pipes/example-pipe/public/128x128.png -------------------------------------------------------------------------------- /pipes/hello-world-computer-use/.eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": ["next/core-web-vitals"] 3 | } 4 | -------------------------------------------------------------------------------- /pipes/hello-world-computer-use/README.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | very raw v0 of screenpipe operator usage example (which is experimental itself) 4 | 5 | allow you to click, type, scrap, control your computer using a playwright API like, using accessibility API instead of pixels like everyone is doing (eg openai, anthropic, all trash, dinosaur people :D) 6 | 7 | 8 | https://cap.so/s/4kpvfe76hw4jd6q 9 | 10 | 11 | backend code: 12 | 13 | https://github.com/mediar-ai/screenpipe/tree/main/screenpipe-core/src/operator 14 | -------------------------------------------------------------------------------- /pipes/hello-world-computer-use/app/api/get-apps/route.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mediar-ai/screenpipe/cb8bbfe9fb6ace78de84ed3a732761f039e9cd2d/pipes/hello-world-computer-use/app/api/get-apps/route.ts -------------------------------------------------------------------------------- /pipes/hello-world-computer-use/app/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mediar-ai/screenpipe/cb8bbfe9fb6ace78de84ed3a732761f039e9cd2d/pipes/hello-world-computer-use/app/favicon.ico -------------------------------------------------------------------------------- /pipes/hello-world-computer-use/app/page.tsx: -------------------------------------------------------------------------------- 1 | import { Chat } from "@/components/chat"; 2 | 3 | export default function HelloWorldComputerUse() { 4 | return ; 5 | } 6 | -------------------------------------------------------------------------------- /pipes/hello-world-computer-use/bun.lockb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mediar-ai/screenpipe/cb8bbfe9fb6ace78de84ed3a732761f039e9cd2d/pipes/hello-world-computer-use/bun.lockb -------------------------------------------------------------------------------- /pipes/hello-world-computer-use/components/ui/skeleton.tsx: -------------------------------------------------------------------------------- 1 | import { cn } from "@/lib/utils" 2 | 3 | function Skeleton({ 4 | className, 5 | ...props 6 | }: React.HTMLAttributes) { 7 | return ( 8 |
12 | ) 13 | } 14 | 15 | export { Skeleton } 16 | -------------------------------------------------------------------------------- /pipes/hello-world-computer-use/lib/actions/get-screenpipe-app-settings.ts: -------------------------------------------------------------------------------- 1 | "use server"; 2 | 3 | import { pipe } from "@screenpipe/js"; 4 | import type { Settings as ScreenpipeAppSettings } from "@screenpipe/js"; 5 | 6 | export async function getScreenpipeAppSettings() { 7 | return await pipe.settings.getAll(); 8 | } 9 | 10 | export async function updateScreenpipeAppSettings( 11 | newSettings: Partial 12 | ) { 13 | return await pipe.settings.update(newSettings); 14 | } 15 | -------------------------------------------------------------------------------- /pipes/hello-world-computer-use/lib/client-only.tsx: -------------------------------------------------------------------------------- 1 | "use client"; 2 | 3 | import { useEffect, useState } from "react"; 4 | 5 | export function ClientOnly({ children }: { children: React.ReactNode }) { 6 | const [isClient, setIsClient] = useState(false); 7 | 8 | useEffect(() => { 9 | setIsClient(true); 10 | }, []); 11 | 12 | if (!isClient) { 13 | return null; 14 | } 15 | 16 | return <>{children}; 17 | } -------------------------------------------------------------------------------- /pipes/hello-world-computer-use/lib/hooks/use-debounce.tsx: -------------------------------------------------------------------------------- 1 | import { useState, useEffect } from "react"; 2 | 3 | export function useDebounce(value: T, delay: number): T { 4 | const [debouncedValue, setDebouncedValue] = useState(value); 5 | 6 | useEffect(() => { 7 | const handler = setTimeout(() => { 8 | setDebouncedValue(value); 9 | }, delay); 10 | 11 | return () => { 12 | clearTimeout(handler); 13 | }; 14 | }, [value, delay]); 15 | 16 | return debouncedValue; 17 | } 18 | -------------------------------------------------------------------------------- /pipes/hello-world-computer-use/next.config.mjs: -------------------------------------------------------------------------------- 1 | /** @type {import('next').NextConfig} */ 2 | const nextConfig = { 3 | webpack: (config) => { 4 | // Add support for raw-loader to import file content as strings 5 | config.module.rules.push({ 6 | test: /\.(tsx|ts|js|jsx)$/, 7 | resourceQuery: /raw/, 8 | type: 'asset/source', 9 | }); 10 | 11 | return config; 12 | }, 13 | }; 14 | 15 | export default nextConfig; 16 | -------------------------------------------------------------------------------- /pipes/hello-world-computer-use/pipe.json: -------------------------------------------------------------------------------- 1 | { 2 | "crons": [ 3 | { 4 | "path": "/api/pipeline", 5 | "schedule": "0 0 11 * * *" 6 | } 7 | ] 8 | } 9 | -------------------------------------------------------------------------------- /pipes/hello-world-computer-use/postcss.config.mjs: -------------------------------------------------------------------------------- 1 | /** @type {import('postcss-load-config').Config} */ 2 | const config = { 3 | plugins: { 4 | tailwindcss: {}, 5 | }, 6 | }; 7 | 8 | export default config; 9 | -------------------------------------------------------------------------------- /pipes/hello-world-computer-use/public/128x128.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mediar-ai/screenpipe/cb8bbfe9fb6ace78de84ed3a732761f039e9cd2d/pipes/hello-world-computer-use/public/128x128.png -------------------------------------------------------------------------------- /pipes/identify-speakers/README.md: -------------------------------------------------------------------------------- 1 | allows you to teach AI to assign names to voices that are then used everywhere else in screenpipe (data, apps, interfaces ...) 2 | 3 | 4 | Screenshot 2024-12-18 at 9 28 51 AM 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /pipes/identify-speakers/bun.lockb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mediar-ai/screenpipe/cb8bbfe9fb6ace78de84ed3a732761f039e9cd2d/pipes/identify-speakers/bun.lockb -------------------------------------------------------------------------------- /pipes/identify-speakers/eslint.config.mjs: -------------------------------------------------------------------------------- 1 | import { dirname } from "path"; 2 | import { fileURLToPath } from "url"; 3 | import { FlatCompat } from "@eslint/eslintrc"; 4 | 5 | const __filename = fileURLToPath(import.meta.url); 6 | const __dirname = dirname(__filename); 7 | 8 | const compat = new FlatCompat({ 9 | baseDirectory: __dirname, 10 | }); 11 | 12 | const eslintConfig = [ 13 | ...compat.extends("next/core-web-vitals", "next/typescript"), 14 | ]; 15 | 16 | export default eslintConfig; 17 | -------------------------------------------------------------------------------- /pipes/identify-speakers/next.config.ts: -------------------------------------------------------------------------------- 1 | import type { NextConfig } from "next"; 2 | 3 | const nextConfig: NextConfig = { 4 | transpilePackages: ["@screenpipe/js"], 5 | webpack: (config, { }) => { 6 | return config; 7 | }, 8 | devIndicators: { 9 | buildActivity: false, 10 | appIsrStatus: false 11 | } 12 | }; 13 | 14 | export default nextConfig; 15 | -------------------------------------------------------------------------------- /pipes/identify-speakers/postcss.config.mjs: -------------------------------------------------------------------------------- 1 | /** @type {import('postcss-load-config').Config} */ 2 | const config = { 3 | plugins: { 4 | tailwindcss: {}, 5 | }, 6 | }; 7 | 8 | export default config; 9 | -------------------------------------------------------------------------------- /pipes/identify-speakers/public/file.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /pipes/identify-speakers/public/vercel.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /pipes/identify-speakers/public/window.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /pipes/identify-speakers/src/app/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mediar-ai/screenpipe/cb8bbfe9fb6ace78de84ed3a732761f039e9cd2d/pipes/identify-speakers/src/app/favicon.ico -------------------------------------------------------------------------------- /pipes/identify-speakers/src/app/page.tsx: -------------------------------------------------------------------------------- 1 | "use client"; 2 | 3 | import IdentifySpeakers from "@/components/identify-speakers"; 4 | import { useState } from "react"; 5 | 6 | export default function IdentifySpeakersPage() { 7 | // @ts-ignore 8 | const [_, setShowIdentifySpeakers] = useState(true); 9 | return ( 10 | 14 | ); 15 | } 16 | -------------------------------------------------------------------------------- /pipes/identify-speakers/src/components/ui/skeleton.tsx: -------------------------------------------------------------------------------- 1 | import { cn } from "@/lib/utils" 2 | 3 | function Skeleton({ 4 | className, 5 | ...props 6 | }: React.HTMLAttributes) { 7 | return ( 8 |
12 | ) 13 | } 14 | 15 | export { Skeleton } 16 | -------------------------------------------------------------------------------- /pipes/identify-speakers/src/lib/hooks/use-debounce.tsx: -------------------------------------------------------------------------------- 1 | import { useState, useEffect } from "react"; 2 | 3 | export function useDebounce(value: T, delay: number): T { 4 | const [debouncedValue, setDebouncedValue] = useState(value); 5 | 6 | useEffect(() => { 7 | const handler = setTimeout(() => { 8 | setDebouncedValue(value); 9 | }, delay); 10 | 11 | return () => { 12 | clearTimeout(handler); 13 | }; 14 | }, [value, delay]); 15 | 16 | return debouncedValue; 17 | } 18 | -------------------------------------------------------------------------------- /pipes/linkedin-ai-assistant/.eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": ["next/core-web-vitals", "next/typescript"] 3 | } 4 | -------------------------------------------------------------------------------- /pipes/linkedin-ai-assistant/app/api/harvest/connection-status-update/stop/route.ts: -------------------------------------------------------------------------------- 1 | import { NextResponse } from 'next/server'; 2 | import { setShouldStopRefresh } from '@/lib/storage/storage'; 3 | 4 | export async function POST() { 5 | console.log('stop requested'); 6 | await setShouldStopRefresh(true); 7 | return NextResponse.json({ message: 'refresh stop requested' }); 8 | } -------------------------------------------------------------------------------- /pipes/linkedin-ai-assistant/app/api/messages/check/route.ts: -------------------------------------------------------------------------------- 1 | import { startMessageCheck } from '@/lib/logic-sequence/check-messages'; 2 | import { NextResponse } from 'next/server'; 3 | 4 | export async function POST() { 5 | try { 6 | const result = await startMessageCheck(); 7 | return NextResponse.json(result); 8 | } catch (error) { 9 | return NextResponse.json( 10 | { success: false, error: (error as Error).message }, 11 | { status: 500 } 12 | ); 13 | } 14 | } -------------------------------------------------------------------------------- /pipes/linkedin-ai-assistant/app/api/messages/route.ts: -------------------------------------------------------------------------------- 1 | import { loadMessages } from '@/lib/storage/storage'; 2 | import { NextResponse } from 'next/server'; 3 | 4 | export async function GET() { 5 | const messages = await loadMessages(); 6 | return NextResponse.json(messages); 7 | } -------------------------------------------------------------------------------- /pipes/linkedin-ai-assistant/app/api/profiles/route.ts: -------------------------------------------------------------------------------- 1 | import { loadProfiles } from '@/lib/storage/storage'; 2 | import { NextResponse } from 'next/server'; 3 | 4 | export async function GET() { 5 | const profiles = await loadProfiles(); 6 | return NextResponse.json(profiles); 7 | } -------------------------------------------------------------------------------- /pipes/linkedin-ai-assistant/app/api/sentry-example-api/route.ts: -------------------------------------------------------------------------------- 1 | import { NextResponse } from "next/server"; 2 | 3 | export const dynamic = "force-dynamic"; 4 | 5 | // A faulty API route to test Sentry's error monitoring 6 | export function GET() { 7 | throw new Error("Sentry Example API Route Error"); 8 | return NextResponse.json({ data: "Testing Sentry Error..." }); 9 | } 10 | -------------------------------------------------------------------------------- /pipes/linkedin-ai-assistant/app/api/state/route.ts: -------------------------------------------------------------------------------- 1 | import { loadState } from '@/lib/storage/storage'; 2 | import { NextResponse } from 'next/server'; 3 | 4 | export async function GET() { 5 | const state = await loadState(); 6 | return NextResponse.json(state); 7 | } -------------------------------------------------------------------------------- /pipes/linkedin-ai-assistant/app/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mediar-ai/screenpipe/cb8bbfe9fb6ace78de84ed3a732761f039e9cd2d/pipes/linkedin-ai-assistant/app/favicon.ico -------------------------------------------------------------------------------- /pipes/linkedin-ai-assistant/app/fonts/GeistMonoVF.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mediar-ai/screenpipe/cb8bbfe9fb6ace78de84ed3a732761f039e9cd2d/pipes/linkedin-ai-assistant/app/fonts/GeistMonoVF.woff -------------------------------------------------------------------------------- /pipes/linkedin-ai-assistant/app/fonts/GeistVF.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mediar-ai/screenpipe/cb8bbfe9fb6ace78de84ed3a732761f039e9cd2d/pipes/linkedin-ai-assistant/app/fonts/GeistVF.woff -------------------------------------------------------------------------------- /pipes/linkedin-ai-assistant/bun.lockb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mediar-ai/screenpipe/cb8bbfe9fb6ace78de84ed3a732761f039e9cd2d/pipes/linkedin-ai-assistant/bun.lockb -------------------------------------------------------------------------------- /pipes/linkedin-ai-assistant/components/header.tsx: -------------------------------------------------------------------------------- 1 | "use client" 2 | 3 | import Image from 'next/image'; 4 | 5 | export default function Header() { 6 | return ( 7 |
8 | screenpipe-logo 16 |

screenpipe

17 |
18 | ); 19 | } -------------------------------------------------------------------------------- /pipes/linkedin-ai-assistant/components/ui/collapsible.tsx: -------------------------------------------------------------------------------- 1 | "use client" 2 | 3 | import * as CollapsiblePrimitive from "@radix-ui/react-collapsible" 4 | 5 | const Collapsible = CollapsiblePrimitive.Root 6 | 7 | const CollapsibleTrigger = CollapsiblePrimitive.CollapsibleTrigger 8 | 9 | const CollapsibleContent = CollapsiblePrimitive.CollapsibleContent 10 | 11 | export { Collapsible, CollapsibleTrigger, CollapsibleContent } 12 | -------------------------------------------------------------------------------- /pipes/linkedin-ai-assistant/instrumentation.ts: -------------------------------------------------------------------------------- 1 | import * as Sentry from '@sentry/nextjs'; 2 | 3 | export async function register() { 4 | if (process.env.NEXT_RUNTIME === 'nodejs') { 5 | await import('./sentry.server.config'); 6 | } 7 | 8 | if (process.env.NEXT_RUNTIME === 'edge') { 9 | await import('./sentry.edge.config'); 10 | } 11 | } 12 | 13 | export const onRequestError = Sentry.captureRequestError; 14 | -------------------------------------------------------------------------------- /pipes/linkedin-ai-assistant/lib/config.ts: -------------------------------------------------------------------------------- 1 | export const REFRESH_INTERVAL = 1 * 60 * 1000; // 5 minutes in milliseconds -------------------------------------------------------------------------------- /pipes/linkedin-ai-assistant/lib/simple-actions/check-recent-messages.ts: -------------------------------------------------------------------------------- 1 | import { Message } from '../storage/types'; 2 | 3 | export function hasRecentMessages(messages: Message[], daysThreshold = 7): boolean { 4 | const now = new Date(); 5 | return messages.some(msg => { 6 | if (!msg.timestamp) return false; 7 | const msgDate = new Date(msg.timestamp); 8 | const daysDiff = (now.getTime() - msgDate.getTime()) / (1000 * 60 * 60 * 24); 9 | return daysDiff <= daysThreshold; 10 | }); 11 | } -------------------------------------------------------------------------------- /pipes/linkedin-ai-assistant/lib/storage/templates.d.ts: -------------------------------------------------------------------------------- 1 | export interface Templates { 2 | 'paste-here-url-from-linkedin-with-2nd-grade-connections': string; 3 | 'request-for-intro-prompt-to-ai': string; 4 | 'llm-appraisal-prompt': string; 5 | 'llm-user-reply-needs-response-prompt': string; 6 | } 7 | 8 | declare module '*.json' { 9 | const value: Templates; 10 | export default value; 11 | } -------------------------------------------------------------------------------- /pipes/linkedin-ai-assistant/lib/utils.ts: -------------------------------------------------------------------------------- 1 | import { clsx, type ClassValue } from "clsx" 2 | import { twMerge } from "tailwind-merge" 3 | 4 | export function cn(...inputs: ClassValue[]) { 5 | return twMerge(clsx(inputs)) 6 | } 7 | -------------------------------------------------------------------------------- /pipes/linkedin-ai-assistant/pipe.json: -------------------------------------------------------------------------------- 1 | { 2 | "crons": [ 3 | { 4 | "path": "/api/harvest/check", 5 | "schedule": "0 */5 * * * *" 6 | } 7 | ] 8 | } 9 | -------------------------------------------------------------------------------- /pipes/linkedin-ai-assistant/postcss.config.mjs: -------------------------------------------------------------------------------- 1 | /** @type {import('postcss-load-config').Config} */ 2 | const config = { 3 | plugins: { 4 | tailwindcss: {}, 5 | }, 6 | }; 7 | 8 | export default config; 9 | -------------------------------------------------------------------------------- /pipes/linkedin-ai-assistant/public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mediar-ai/screenpipe/cb8bbfe9fb6ace78de84ed3a732761f039e9cd2d/pipes/linkedin-ai-assistant/public/favicon.ico -------------------------------------------------------------------------------- /pipes/linkedin-ai-assistant/public/guide_bigger.gif: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:a1e60dcf292258e43bc89a3232f9c4f96a021ec968276f4a0c8d765c91242570 3 | size 12508664 4 | -------------------------------------------------------------------------------- /pipes/linkedin-ai-assistant/public/icon-128.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mediar-ai/screenpipe/cb8bbfe9fb6ace78de84ed3a732761f039e9cd2d/pipes/linkedin-ai-assistant/public/icon-128.png -------------------------------------------------------------------------------- /pipes/linkedin-ai-assistant/public/icon-32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mediar-ai/screenpipe/cb8bbfe9fb6ace78de84ed3a732761f039e9cd2d/pipes/linkedin-ai-assistant/public/icon-32.png -------------------------------------------------------------------------------- /pipes/linkedin-ai-assistant/public/li_harvester.gif: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:42eae141ae3f13fa21ba7f34a8ed8d600dae8989e351db7de085dbdb02f04e12 3 | size 3799681 4 | -------------------------------------------------------------------------------- /pipes/meeting/README.md: -------------------------------------------------------------------------------- 1 | 2 | The AI notepad for people in back-to-back meetings 3 | 4 | the meeting pipe takes your raw meeting recordings and makes them awesome 5 | 6 | 7 | 8 | https://github.com/user-attachments/assets/8838c562-5bae-41cd-bc56-3c1785b21fc1 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /pipes/meeting/bun.lockb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mediar-ai/screenpipe/cb8bbfe9fb6ace78de84ed3a732761f039e9cd2d/pipes/meeting/bun.lockb -------------------------------------------------------------------------------- /pipes/meeting/eslint.config.mjs: -------------------------------------------------------------------------------- 1 | import { dirname } from "path"; 2 | import { fileURLToPath } from "url"; 3 | import { FlatCompat } from "@eslint/eslintrc"; 4 | 5 | const __filename = fileURLToPath(import.meta.url); 6 | const __dirname = dirname(__filename); 7 | 8 | const compat = new FlatCompat({ 9 | baseDirectory: __dirname, 10 | }); 11 | 12 | const eslintConfig = [ 13 | ...compat.extends("next/core-web-vitals", "next/typescript"), 14 | ]; 15 | 16 | export default eslintConfig; 17 | -------------------------------------------------------------------------------- /pipes/meeting/postcss.config.mjs: -------------------------------------------------------------------------------- 1 | /** @type {import('postcss-load-config').Config} */ 2 | const config = { 3 | plugins: { 4 | tailwindcss: {}, 5 | }, 6 | }; 7 | 8 | export default config; 9 | -------------------------------------------------------------------------------- /pipes/meeting/public/file.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /pipes/meeting/public/vercel.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /pipes/meeting/public/window.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /pipes/meeting/src/app/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mediar-ai/screenpipe/cb8bbfe9fb6ace78de84ed3a732761f039e9cd2d/pipes/meeting/src/app/favicon.ico -------------------------------------------------------------------------------- /pipes/meeting/src/app/meetings/live/loading.tsx: -------------------------------------------------------------------------------- 1 | import { Loader2 } from "lucide-react" 2 | 3 | export default function Loading() { 4 | return ( 5 |
6 | 7 | loading meeting... 8 |
9 | ) 10 | } -------------------------------------------------------------------------------- /pipes/meeting/src/app/meetings/page.tsx: -------------------------------------------------------------------------------- 1 | 'use client' 2 | 3 | import { MeetingHistory } from "@/components/meeting-history/meeting-history" 4 | 5 | export default function MeetingsPage() { 6 | return 7 | } -------------------------------------------------------------------------------- /pipes/meeting/src/app/page.tsx: -------------------------------------------------------------------------------- 1 | 'use client' 2 | 3 | import { useEffect } from "react" 4 | import { MeetingHistory } from "@/components/meeting-history/meeting-history" 5 | 6 | // Instead of redirecting, show meetings directly at root 7 | export default function HomePage() { 8 | useEffect(() => { 9 | console.log('homepage mounted') 10 | }, []) 11 | 12 | return 13 | } 14 | -------------------------------------------------------------------------------- /pipes/meeting/src/components/ui/collapsible.tsx: -------------------------------------------------------------------------------- 1 | "use client" 2 | 3 | import * as CollapsiblePrimitive from "@radix-ui/react-collapsible" 4 | 5 | const Collapsible = CollapsiblePrimitive.Root 6 | 7 | const CollapsibleTrigger = CollapsiblePrimitive.CollapsibleTrigger 8 | 9 | const CollapsibleContent = CollapsiblePrimitive.CollapsibleContent 10 | 11 | export { Collapsible, CollapsibleTrigger, CollapsibleContent } 12 | -------------------------------------------------------------------------------- /pipes/meeting/src/components/ui/skeleton.tsx: -------------------------------------------------------------------------------- 1 | import { cn } from "@/lib/utils" 2 | 3 | function Skeleton({ 4 | className, 5 | ...props 6 | }: React.HTMLAttributes) { 7 | return ( 8 |
12 | ) 13 | } 14 | 15 | export { Skeleton } 16 | -------------------------------------------------------------------------------- /pipes/meeting/src/lib/hooks/use-debounce.tsx: -------------------------------------------------------------------------------- 1 | import { useState, useEffect } from "react"; 2 | 3 | export function useDebounce(value: T, delay: number): T { 4 | const [debouncedValue, setDebouncedValue] = useState(value); 5 | 6 | useEffect(() => { 7 | const handler = setTimeout(() => { 8 | setDebouncedValue(value); 9 | }, delay); 10 | 11 | return () => { 12 | clearTimeout(handler); 13 | }; 14 | }, [value, delay]); 15 | 16 | return debouncedValue; 17 | } 18 | -------------------------------------------------------------------------------- /pipes/memories/README.md: -------------------------------------------------------------------------------- 1 | 2 | google photo like memories of your days, resurfacing and reminder of important information, etc. 3 | 4 | 5 | Screenshot 2024-12-30 at 1 08 14 PM 6 | -------------------------------------------------------------------------------- /pipes/memories/bun.lockb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mediar-ai/screenpipe/cb8bbfe9fb6ace78de84ed3a732761f039e9cd2d/pipes/memories/bun.lockb -------------------------------------------------------------------------------- /pipes/memories/eslint.config.mjs: -------------------------------------------------------------------------------- 1 | import { dirname } from "path"; 2 | import { fileURLToPath } from "url"; 3 | import { FlatCompat } from "@eslint/eslintrc"; 4 | 5 | const __filename = fileURLToPath(import.meta.url); 6 | const __dirname = dirname(__filename); 7 | 8 | const compat = new FlatCompat({ 9 | baseDirectory: __dirname, 10 | }); 11 | 12 | const eslintConfig = [ 13 | ...compat.extends("next/core-web-vitals", "next/typescript"), 14 | ]; 15 | 16 | export default eslintConfig; 17 | -------------------------------------------------------------------------------- /pipes/memories/next.config.ts: -------------------------------------------------------------------------------- 1 | import type { NextConfig } from "next"; 2 | 3 | const nextConfig: NextConfig = { 4 | transpilePackages: ["@screenpipe/js"], 5 | webpack: (config, { }) => { 6 | return config; 7 | }, 8 | devIndicators: { 9 | buildActivity: false, 10 | appIsrStatus: false 11 | } 12 | }; 13 | 14 | export default nextConfig; 15 | -------------------------------------------------------------------------------- /pipes/memories/postcss.config.mjs: -------------------------------------------------------------------------------- 1 | /** @type {import('postcss-load-config').Config} */ 2 | const config = { 3 | plugins: { 4 | tailwindcss: {}, 5 | }, 6 | }; 7 | 8 | export default config; 9 | -------------------------------------------------------------------------------- /pipes/memories/public/file.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /pipes/memories/public/vercel.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /pipes/memories/public/window.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /pipes/memories/src/app/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mediar-ai/screenpipe/cb8bbfe9fb6ace78de84ed3a732761f039e9cd2d/pipes/memories/src/app/favicon.ico -------------------------------------------------------------------------------- /pipes/memories/src/app/page.tsx: -------------------------------------------------------------------------------- 1 | import { MemoriesGallery } from "@/components/memories-gallery"; 2 | 3 | export default function MemoriesPage() { 4 | return ( 5 |
6 |
7 |

memories

8 |

relive your digital moments

9 |
10 | 11 |
12 | ); 13 | } 14 | -------------------------------------------------------------------------------- /pipes/memories/src/components/ui/skeleton.tsx: -------------------------------------------------------------------------------- 1 | import { cn } from "@/lib/utils" 2 | 3 | function Skeleton({ 4 | className, 5 | ...props 6 | }: React.HTMLAttributes) { 7 | return ( 8 |
12 | ) 13 | } 14 | 15 | export { Skeleton } 16 | -------------------------------------------------------------------------------- /pipes/memories/src/lib/hooks/use-debounce.tsx: -------------------------------------------------------------------------------- 1 | import { useState, useEffect } from "react"; 2 | 3 | export function useDebounce(value: T, delay: number): T { 4 | const [debouncedValue, setDebouncedValue] = useState(value); 5 | 6 | useEffect(() => { 7 | const handler = setTimeout(() => { 8 | setDebouncedValue(value); 9 | }, delay); 10 | 11 | return () => { 12 | clearTimeout(handler); 13 | }; 14 | }, [value, delay]); 15 | 16 | return debouncedValue; 17 | } 18 | -------------------------------------------------------------------------------- /pipes/notion/bun.lockb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mediar-ai/screenpipe/cb8bbfe9fb6ace78de84ed3a732761f039e9cd2d/pipes/notion/bun.lockb -------------------------------------------------------------------------------- /pipes/notion/eslint.config.mjs: -------------------------------------------------------------------------------- 1 | import { dirname } from "path"; 2 | import { fileURLToPath } from "url"; 3 | import { FlatCompat } from "@eslint/eslintrc"; 4 | 5 | const __filename = fileURLToPath(import.meta.url); 6 | const __dirname = dirname(__filename); 7 | 8 | const compat = new FlatCompat({ 9 | baseDirectory: __dirname, 10 | }); 11 | 12 | const eslintConfig = [ 13 | ...compat.extends("next/core-web-vitals", "next/typescript"), 14 | ]; 15 | 16 | export default eslintConfig; 17 | -------------------------------------------------------------------------------- /pipes/notion/next.config.ts: -------------------------------------------------------------------------------- 1 | import type { NextConfig } from "next"; 2 | 3 | const nextConfig: NextConfig = { 4 | transpilePackages: ["@screenpipe/js"], 5 | webpack: (config, { }) => { 6 | return config; 7 | }, 8 | devIndicators: { 9 | buildActivity: false, 10 | appIsrStatus: false 11 | } 12 | }; 13 | 14 | export default nextConfig; 15 | -------------------------------------------------------------------------------- /pipes/notion/pipe.json: -------------------------------------------------------------------------------- 1 | { 2 | "crons": [ 3 | { 4 | "path": "/api/log", 5 | "schedule": "0 */5 * * * *" 6 | }, 7 | { 8 | "path": "/api/intelligence", 9 | "schedule": "0 0 */1 * * *" 10 | } 11 | ] 12 | } 13 | -------------------------------------------------------------------------------- /pipes/notion/postcss.config.mjs: -------------------------------------------------------------------------------- 1 | /** @type {import('postcss-load-config').Config} */ 2 | const config = { 3 | plugins: { 4 | tailwindcss: {}, 5 | }, 6 | }; 7 | 8 | export default config; 9 | -------------------------------------------------------------------------------- /pipes/notion/public/file.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /pipes/notion/public/vercel.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /pipes/notion/public/window.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /pipes/notion/src/app/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mediar-ai/screenpipe/cb8bbfe9fb6ace78de84ed3a732761f039e9cd2d/pipes/notion/src/app/favicon.ico -------------------------------------------------------------------------------- /pipes/notion/src/app/page.tsx: -------------------------------------------------------------------------------- 1 | import { NotionSettings } from "@/components/notion-settings"; 2 | 3 | export default function Page() { 4 | return ( 5 |
6 |

Your knowledge base on autopilot

7 | 8 |
9 | ); 10 | } 11 | -------------------------------------------------------------------------------- /pipes/notion/src/components/ui/skeleton.tsx: -------------------------------------------------------------------------------- 1 | import { cn } from "@/lib/utils" 2 | 3 | function Skeleton({ 4 | className, 5 | ...props 6 | }: React.HTMLAttributes) { 7 | return ( 8 |
12 | ) 13 | } 14 | 15 | export { Skeleton } 16 | -------------------------------------------------------------------------------- /pipes/notion/src/lib/actions/get-screenpipe-app-settings.ts: -------------------------------------------------------------------------------- 1 | "use server"; 2 | 3 | import { pipe } from "@screenpipe/js"; 4 | import type { Settings as ScreenpipeAppSettings } from "@screenpipe/js"; 5 | 6 | export async function getScreenpipeAppSettings() { 7 | return await pipe.settings.getAll(); 8 | } 9 | 10 | export async function updateScreenpipeAppSettings( 11 | newSettings: Partial 12 | ) { 13 | return await pipe.settings.update(newSettings); 14 | } 15 | -------------------------------------------------------------------------------- /pipes/notion/src/lib/hooks/use-debounce.tsx: -------------------------------------------------------------------------------- 1 | import { useState, useEffect } from "react"; 2 | 3 | export function useDebounce(value: T, delay: number): T { 4 | const [debouncedValue, setDebouncedValue] = useState(value); 5 | 6 | useEffect(() => { 7 | const handler = setTimeout(() => { 8 | setDebouncedValue(value); 9 | }, delay); 10 | 11 | return () => { 12 | clearTimeout(handler); 13 | }; 14 | }, [value, delay]); 15 | 16 | return debouncedValue; 17 | } 18 | -------------------------------------------------------------------------------- /pipes/obsidian/bun.lockb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mediar-ai/screenpipe/cb8bbfe9fb6ace78de84ed3a732761f039e9cd2d/pipes/obsidian/bun.lockb -------------------------------------------------------------------------------- /pipes/obsidian/eslint.config.mjs: -------------------------------------------------------------------------------- 1 | import { dirname } from "path"; 2 | import { fileURLToPath } from "url"; 3 | import { FlatCompat } from "@eslint/eslintrc"; 4 | 5 | const __filename = fileURLToPath(import.meta.url); 6 | const __dirname = dirname(__filename); 7 | 8 | const compat = new FlatCompat({ 9 | baseDirectory: __dirname, 10 | }); 11 | 12 | const eslintConfig = [ 13 | ...compat.extends("next/core-web-vitals", "next/typescript"), 14 | ]; 15 | 16 | export default eslintConfig; 17 | -------------------------------------------------------------------------------- /pipes/obsidian/next.config.ts: -------------------------------------------------------------------------------- 1 | import type { NextConfig } from "next"; 2 | 3 | const nextConfig: NextConfig = { 4 | transpilePackages: ["@screenpipe/js"], 5 | webpack: (config, { }) => { 6 | return config; 7 | }, 8 | devIndicators: { 9 | buildActivity: false, 10 | appIsrStatus: false 11 | } 12 | }; 13 | 14 | export default nextConfig; 15 | -------------------------------------------------------------------------------- /pipes/obsidian/pipe.json: -------------------------------------------------------------------------------- 1 | { 2 | "crons": [ 3 | { 4 | "path": "/api/log", 5 | "schedule": "0 */5 * * * *" 6 | }, 7 | { 8 | "path": "/api/intelligence", 9 | "schedule": "0 0 */1 * * *" 10 | } 11 | ] 12 | } 13 | -------------------------------------------------------------------------------- /pipes/obsidian/postcss.config.mjs: -------------------------------------------------------------------------------- 1 | /** @type {import('postcss-load-config').Config} */ 2 | const config = { 3 | plugins: { 4 | tailwindcss: {}, 5 | }, 6 | }; 7 | 8 | export default config; 9 | -------------------------------------------------------------------------------- /pipes/obsidian/public/file.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /pipes/obsidian/public/vercel.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /pipes/obsidian/public/window.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /pipes/obsidian/src/app/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mediar-ai/screenpipe/cb8bbfe9fb6ace78de84ed3a732761f039e9cd2d/pipes/obsidian/src/app/favicon.ico -------------------------------------------------------------------------------- /pipes/obsidian/src/app/page.tsx: -------------------------------------------------------------------------------- 1 | // "use client"; 2 | 3 | import { ObsidianSettings } from "@/components/obsidian-settings"; 4 | 5 | export default function Page() { 6 | return ( 7 |
8 |

Your knowledge base on autopilot

9 | 10 |
11 | ); 12 | } 13 | -------------------------------------------------------------------------------- /pipes/obsidian/src/components/markdown.tsx: -------------------------------------------------------------------------------- 1 | import { FC, memo } from 'react' 2 | import ReactMarkdown, { Options } from 'react-markdown' 3 | 4 | export const MemoizedReactMarkdown: FC = memo( 5 | ReactMarkdown, 6 | (prevProps, nextProps) => 7 | prevProps.children === nextProps.children && 8 | prevProps.className === nextProps.className 9 | ) 10 | -------------------------------------------------------------------------------- /pipes/obsidian/src/components/ui/skeleton.tsx: -------------------------------------------------------------------------------- 1 | import { cn } from "@/lib/utils" 2 | 3 | function Skeleton({ 4 | className, 5 | ...props 6 | }: React.HTMLAttributes) { 7 | return ( 8 |
12 | ) 13 | } 14 | 15 | export { Skeleton } 16 | -------------------------------------------------------------------------------- /pipes/obsidian/src/lib/actions/get-screenpipe-app-settings.ts: -------------------------------------------------------------------------------- 1 | "use server"; 2 | 3 | import { pipe } from "@screenpipe/js"; 4 | import type { Settings as ScreenpipeAppSettings } from "@screenpipe/js"; 5 | 6 | export async function getScreenpipeAppSettings() { 7 | return await pipe.settings.getAll(); 8 | } 9 | 10 | export async function updateScreenpipeAppSettings( 11 | newSettings: Partial 12 | ) { 13 | return await pipe.settings.update(newSettings); 14 | } 15 | -------------------------------------------------------------------------------- /pipes/obsidian/src/lib/hooks/use-debounce.tsx: -------------------------------------------------------------------------------- 1 | import { useState, useEffect } from "react"; 2 | 3 | export function useDebounce(value: T, delay: number): T { 4 | const [debouncedValue, setDebouncedValue] = useState(value); 5 | 6 | useEffect(() => { 7 | const handler = setTimeout(() => { 8 | setDebouncedValue(value); 9 | }, delay); 10 | 11 | return () => { 12 | clearTimeout(handler); 13 | }; 14 | }, [value, delay]); 15 | 16 | return debouncedValue; 17 | } 18 | -------------------------------------------------------------------------------- /pipes/pipe-for-loom/.eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": ["next/core-web-vitals", "next/typescript"] 3 | } 4 | -------------------------------------------------------------------------------- /pipes/pipe-for-loom/README.md: -------------------------------------------------------------------------------- 1 | replace loom by this pipe 2 | 3 | Screenshot 2024-11-29 at 12 23 59 PM 4 | -------------------------------------------------------------------------------- /pipes/pipe-for-loom/app/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mediar-ai/screenpipe/cb8bbfe9fb6ace78de84ed3a732761f039e9cd2d/pipes/pipe-for-loom/app/favicon.ico -------------------------------------------------------------------------------- /pipes/pipe-for-loom/app/page.tsx: -------------------------------------------------------------------------------- 1 | "use client" 2 | import Header from "@/components/header"; 3 | import Pipe from "@/components/pipe" 4 | 5 | export default function Home() { 6 | return ( 7 |
8 |
9 | 10 |
11 | ); 12 | } 13 | -------------------------------------------------------------------------------- /pipes/pipe-for-loom/bun.lockb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mediar-ai/screenpipe/cb8bbfe9fb6ace78de84ed3a732761f039e9cd2d/pipes/pipe-for-loom/bun.lockb -------------------------------------------------------------------------------- /pipes/pipe-for-loom/components/header.tsx: -------------------------------------------------------------------------------- 1 | "use client" 2 | 3 | export default function Header() { 4 | return ( 5 |
6 | screenpipe-logo 11 |

screenpipe

12 |
13 | ); 14 | } 15 | -------------------------------------------------------------------------------- /pipes/pipe-for-loom/components/share-on-socials.tsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mediar-ai/screenpipe/cb8bbfe9fb6ace78de84ed3a732761f039e9cd2d/pipes/pipe-for-loom/components/share-on-socials.tsx -------------------------------------------------------------------------------- /pipes/pipe-for-loom/lib/utils.ts: -------------------------------------------------------------------------------- 1 | import { type ClassValue, clsx } from "clsx"; 2 | import { twMerge } from "tailwind-merge"; 3 | 4 | export function cn(...inputs: ClassValue[]) { 5 | return twMerge(clsx(inputs)); 6 | } 7 | -------------------------------------------------------------------------------- /pipes/pipe-for-loom/next.config.mjs: -------------------------------------------------------------------------------- 1 | /** @type {import('next').NextConfig} */ 2 | const nextConfig = {}; 3 | 4 | export default nextConfig; 5 | -------------------------------------------------------------------------------- /pipes/pipe-for-loom/postcss.config.mjs: -------------------------------------------------------------------------------- 1 | /** @type {import('postcss-load-config').Config} */ 2 | const config = { 3 | plugins: { 4 | tailwindcss: {}, 5 | }, 6 | }; 7 | 8 | export default config; 9 | -------------------------------------------------------------------------------- /pipes/pipe-for-loom/public/128x128.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mediar-ai/screenpipe/cb8bbfe9fb6ace78de84ed3a732761f039e9cd2d/pipes/pipe-for-loom/public/128x128.png -------------------------------------------------------------------------------- /pipes/pipe-simple-nextjs/.eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": ["next/core-web-vitals", "next/typescript"] 3 | } 4 | -------------------------------------------------------------------------------- /pipes/pipe-simple-nextjs/app/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mediar-ai/screenpipe/cb8bbfe9fb6ace78de84ed3a732761f039e9cd2d/pipes/pipe-simple-nextjs/app/favicon.ico -------------------------------------------------------------------------------- /pipes/pipe-simple-nextjs/app/fonts/GeistMonoVF.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mediar-ai/screenpipe/cb8bbfe9fb6ace78de84ed3a732761f039e9cd2d/pipes/pipe-simple-nextjs/app/fonts/GeistMonoVF.woff -------------------------------------------------------------------------------- /pipes/pipe-simple-nextjs/app/fonts/GeistVF.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mediar-ai/screenpipe/cb8bbfe9fb6ace78de84ed3a732761f039e9cd2d/pipes/pipe-simple-nextjs/app/fonts/GeistVF.woff -------------------------------------------------------------------------------- /pipes/pipe-simple-nextjs/bun.lockb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mediar-ai/screenpipe/cb8bbfe9fb6ace78de84ed3a732761f039e9cd2d/pipes/pipe-simple-nextjs/bun.lockb -------------------------------------------------------------------------------- /pipes/pipe-simple-nextjs/next.config.mjs: -------------------------------------------------------------------------------- 1 | /** @type {import('next').NextConfig} */ 2 | const nextConfig = { 3 | images: { 4 | domains: ['screenpi.pe'], 5 | }, 6 | }; 7 | 8 | export default nextConfig; 9 | -------------------------------------------------------------------------------- /pipes/pipe-simple-nextjs/postcss.config.mjs: -------------------------------------------------------------------------------- 1 | /** @type {import('postcss-load-config').Config} */ 2 | const config = { 3 | plugins: { 4 | tailwindcss: {}, 5 | }, 6 | }; 7 | 8 | export default config; 9 | -------------------------------------------------------------------------------- /pipes/pipe-simple-nextjs/tailwind.config.ts: -------------------------------------------------------------------------------- 1 | import type { Config } from "tailwindcss"; 2 | 3 | const config: Config = { 4 | content: [ 5 | "./pages/**/*.{js,ts,jsx,tsx,mdx}", 6 | "./components/**/*.{js,ts,jsx,tsx,mdx}", 7 | "./app/**/*.{js,ts,jsx,tsx,mdx}", 8 | ], 9 | theme: { 10 | extend: { 11 | colors: { 12 | background: "var(--background)", 13 | foreground: "var(--foreground)", 14 | }, 15 | }, 16 | }, 17 | plugins: [], 18 | }; 19 | export default config; 20 | -------------------------------------------------------------------------------- /pipes/reddit-auto-posts/.eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": ["next/core-web-vitals"] 3 | } 4 | -------------------------------------------------------------------------------- /pipes/reddit-auto-posts/app/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mediar-ai/screenpipe/cb8bbfe9fb6ace78de84ed3a732761f039e9cd2d/pipes/reddit-auto-posts/app/favicon.ico -------------------------------------------------------------------------------- /pipes/reddit-auto-posts/app/page.tsx: -------------------------------------------------------------------------------- 1 | "use client" 2 | import Header from "@/components/header"; 3 | import Pipe from "@/components/pipe" 4 | 5 | export default function Home() { 6 | return ( 7 |
8 |
9 | 10 |
11 | ); 12 | } 13 | -------------------------------------------------------------------------------- /pipes/reddit-auto-posts/bun.lockb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mediar-ai/screenpipe/cb8bbfe9fb6ace78de84ed3a732761f039e9cd2d/pipes/reddit-auto-posts/bun.lockb -------------------------------------------------------------------------------- /pipes/reddit-auto-posts/components/markdown.tsx: -------------------------------------------------------------------------------- 1 | import { FC, memo } from 'react' 2 | import ReactMarkdown, { Options } from 'react-markdown' 3 | 4 | export const MemoizedReactMarkdown: FC = memo( 5 | ReactMarkdown, 6 | (prevProps, nextProps) => 7 | prevProps.children === nextProps.children && 8 | prevProps.className === nextProps.className 9 | ) 10 | -------------------------------------------------------------------------------- /pipes/reddit-auto-posts/lib/types.ts: -------------------------------------------------------------------------------- 1 | export interface DailyLog { 2 | activity: string; 3 | category: string; 4 | tags: string[]; 5 | timestamp: string; 6 | } 7 | -------------------------------------------------------------------------------- /pipes/reddit-auto-posts/lib/utils.ts: -------------------------------------------------------------------------------- 1 | import { clsx, type ClassValue } from "clsx" 2 | import { twMerge } from "tailwind-merge" 3 | 4 | export function cn(...inputs: ClassValue[]) { 5 | return twMerge(clsx(inputs)) 6 | } 7 | -------------------------------------------------------------------------------- /pipes/reddit-auto-posts/next.config.mjs: -------------------------------------------------------------------------------- 1 | /** @type {import('next').NextConfig} */ 2 | const nextConfig = {}; 3 | 4 | export default nextConfig; 5 | -------------------------------------------------------------------------------- /pipes/reddit-auto-posts/pipe.json: -------------------------------------------------------------------------------- 1 | { 2 | "crons": [ 3 | { 4 | "path": "/api/pipeline", 5 | "schedule": "0 0 11 * * *" 6 | } 7 | ] 8 | } 9 | -------------------------------------------------------------------------------- /pipes/reddit-auto-posts/postcss.config.mjs: -------------------------------------------------------------------------------- 1 | /** @type {import('postcss-load-config').Config} */ 2 | const config = { 3 | plugins: { 4 | tailwindcss: {}, 5 | }, 6 | }; 7 | 8 | export default config; 9 | -------------------------------------------------------------------------------- /pipes/reddit-auto-posts/public/128x128.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mediar-ai/screenpipe/cb8bbfe9fb6ace78de84ed3a732761f039e9cd2d/pipes/reddit-auto-posts/public/128x128.png -------------------------------------------------------------------------------- /pipes/rewind/bun.lockb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mediar-ai/screenpipe/cb8bbfe9fb6ace78de84ed3a732761f039e9cd2d/pipes/rewind/bun.lockb -------------------------------------------------------------------------------- /pipes/rewind/eslint.config.mjs: -------------------------------------------------------------------------------- 1 | import { dirname } from "path"; 2 | import { fileURLToPath } from "url"; 3 | import { FlatCompat } from "@eslint/eslintrc"; 4 | 5 | const __filename = fileURLToPath(import.meta.url); 6 | const __dirname = dirname(__filename); 7 | 8 | const compat = new FlatCompat({ 9 | baseDirectory: __dirname, 10 | }); 11 | 12 | const eslintConfig = [ 13 | ...compat.extends("next/core-web-vitals", "next/typescript"), 14 | ]; 15 | 16 | export default eslintConfig; 17 | -------------------------------------------------------------------------------- /pipes/rewind/next.config.ts: -------------------------------------------------------------------------------- 1 | import type { NextConfig } from "next"; 2 | 3 | const nextConfig: NextConfig = { 4 | transpilePackages: ["@screenpipe/js"], 5 | webpack: (config, { }) => { 6 | return config; 7 | }, 8 | devIndicators: { 9 | buildActivity: false, 10 | appIsrStatus: false 11 | } 12 | }; 13 | 14 | export default nextConfig; 15 | -------------------------------------------------------------------------------- /pipes/rewind/postcss.config.mjs: -------------------------------------------------------------------------------- 1 | /** @type {import('postcss-load-config').Config} */ 2 | const config = { 3 | plugins: { 4 | tailwindcss: {}, 5 | }, 6 | }; 7 | 8 | export default config; 9 | -------------------------------------------------------------------------------- /pipes/rewind/public/file.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /pipes/rewind/public/vercel.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /pipes/rewind/public/window.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /pipes/rewind/src/app/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mediar-ai/screenpipe/cb8bbfe9fb6ace78de84ed3a732761f039e9cd2d/pipes/rewind/src/app/favicon.ico -------------------------------------------------------------------------------- /pipes/rewind/src/components/markdown.tsx: -------------------------------------------------------------------------------- 1 | import { FC, memo } from 'react' 2 | import ReactMarkdown, { Options } from 'react-markdown' 3 | 4 | export const MemoizedReactMarkdown: FC = memo( 5 | ReactMarkdown, 6 | (prevProps, nextProps) => 7 | prevProps.children === nextProps.children && 8 | prevProps.className === nextProps.className 9 | ) 10 | -------------------------------------------------------------------------------- /pipes/rewind/src/components/spinner.tsx: -------------------------------------------------------------------------------- 1 | "use client"; 2 | 3 | export const spinner = ( 4 | 14 | 15 | 16 | ); 17 | -------------------------------------------------------------------------------- /pipes/rewind/src/components/ui/skeleton.tsx: -------------------------------------------------------------------------------- 1 | import { cn } from "@/lib/utils" 2 | 3 | function Skeleton({ 4 | className, 5 | ...props 6 | }: React.HTMLAttributes) { 7 | return ( 8 |
12 | ) 13 | } 14 | 15 | export { Skeleton } 16 | -------------------------------------------------------------------------------- /pipes/rewind/src/lib/actions/get-screenpipe-app-settings.ts: -------------------------------------------------------------------------------- 1 | "use server"; 2 | 3 | import { pipe } from "@screenpipe/js"; 4 | import type { Settings as ScreenpipeAppSettings } from "@screenpipe/js"; 5 | 6 | export async function getScreenpipeAppSettings() { 7 | return await pipe.settings.getAll(); 8 | } 9 | 10 | export async function updateScreenpipeAppSettings( 11 | newSettings: Partial 12 | ) { 13 | return await pipe.settings.update(newSettings); 14 | } 15 | -------------------------------------------------------------------------------- /pipes/rewind/src/lib/hooks/use-debounce.tsx: -------------------------------------------------------------------------------- 1 | import { useState, useEffect } from "react"; 2 | 3 | export function useDebounce(value: T, delay: number): T { 4 | const [debouncedValue, setDebouncedValue] = useState(value); 5 | 6 | useEffect(() => { 7 | const handler = setTimeout(() => { 8 | setDebouncedValue(value); 9 | }, delay); 10 | 11 | return () => { 12 | clearTimeout(handler); 13 | }; 14 | }, [value, delay]); 15 | 16 | return debouncedValue; 17 | } 18 | -------------------------------------------------------------------------------- /pipes/rewind/src/lib/hooks/use-keyword-params.tsx: -------------------------------------------------------------------------------- 1 | import { useQueryStates } from "nuqs"; 2 | import { queryParser } from "../utils"; 3 | 4 | export const useKeywordParams = () => { 5 | return useQueryStates(queryParser, { throttleMs: 100 }); 6 | }; 7 | -------------------------------------------------------------------------------- /pipes/screen-avatar/bun.lockb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mediar-ai/screenpipe/cb8bbfe9fb6ace78de84ed3a732761f039e9cd2d/pipes/screen-avatar/bun.lockb -------------------------------------------------------------------------------- /pipes/screen-avatar/eslint.config.mjs: -------------------------------------------------------------------------------- 1 | import { dirname } from "path"; 2 | import { fileURLToPath } from "url"; 3 | import { FlatCompat } from "@eslint/eslintrc"; 4 | 5 | const __filename = fileURLToPath(import.meta.url); 6 | const __dirname = dirname(__filename); 7 | 8 | const compat = new FlatCompat({ 9 | baseDirectory: __dirname, 10 | }); 11 | 12 | const eslintConfig = [ 13 | ...compat.extends("next/core-web-vitals", "next/typescript"), 14 | ]; 15 | 16 | export default eslintConfig; 17 | -------------------------------------------------------------------------------- /pipes/screen-avatar/postcss.config.mjs: -------------------------------------------------------------------------------- 1 | /** @type {import('postcss-load-config').Config} */ 2 | const config = { 3 | plugins: { 4 | tailwindcss: {}, 5 | }, 6 | }; 7 | 8 | export default config; 9 | -------------------------------------------------------------------------------- /pipes/screen-avatar/public/0920242-meeting.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mediar-ai/screenpipe/cb8bbfe9fb6ace78de84ed3a732761f039e9cd2d/pipes/screen-avatar/public/0920242-meeting.png -------------------------------------------------------------------------------- /pipes/screen-avatar/public/file.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /pipes/screen-avatar/public/vercel.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /pipes/screen-avatar/public/window.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /pipes/screen-avatar/src/app/api/test/route.ts: -------------------------------------------------------------------------------- 1 | import { NextResponse } from 'next/server' 2 | 3 | export async function GET() { 4 | console.log('test route called') 5 | return NextResponse.json({ hello: 'world' }) 6 | } -------------------------------------------------------------------------------- /pipes/screen-avatar/src/app/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mediar-ai/screenpipe/cb8bbfe9fb6ace78de84ed3a732761f039e9cd2d/pipes/screen-avatar/src/app/favicon.ico -------------------------------------------------------------------------------- /pipes/screen-avatar/src/app/page.tsx: -------------------------------------------------------------------------------- 1 | "use client"; 2 | 3 | import dynamic from 'next/dynamic'; 4 | 5 | const StreamingAvatarDemo = dynamic( 6 | () => import('@/components/streaming-avatar').then(mod => mod.StreamingAvatarDemo), 7 | { ssr: false } 8 | ); 9 | 10 | export default function Page() { 11 | return ( 12 |
13 | 15 |
16 | ); 17 | } 18 | -------------------------------------------------------------------------------- /pipes/screen-avatar/src/app/providers/providers.tsx: -------------------------------------------------------------------------------- 1 | "use client"; 2 | 3 | import { NextUIProvider } from "@nextui-org/react"; 4 | 5 | export function Providers({ children }: { children: React.ReactNode }) { 6 | return {children}; 7 | } -------------------------------------------------------------------------------- /pipes/screen-avatar/src/components/ui/skeleton.tsx: -------------------------------------------------------------------------------- 1 | import { cn } from "@/lib/utils" 2 | 3 | function Skeleton({ 4 | className, 5 | ...props 6 | }: React.HTMLAttributes) { 7 | return ( 8 |
12 | ) 13 | } 14 | 15 | export { Skeleton } 16 | -------------------------------------------------------------------------------- /pipes/screen-avatar/src/env.mjs: -------------------------------------------------------------------------------- 1 | import { createEnv } from "@t3-oss/env-nextjs" 2 | import { z } from "zod" 3 | 4 | export const env = createEnv({ 5 | client: { 6 | NEXT_PUBLIC_ELEVENLABS_API_KEY: z.string().min(1), 7 | }, 8 | runtimeEnv: { 9 | NEXT_PUBLIC_ELEVENLABS_API_KEY: process.env.NEXT_PUBLIC_ELEVENLABS_API_KEY, 10 | }, 11 | }) -------------------------------------------------------------------------------- /pipes/screen-avatar/src/lib/actions/get-screenpipe-app-settings.ts: -------------------------------------------------------------------------------- 1 | "use server"; 2 | 3 | import { pipe } from "@screenpipe/js"; 4 | import type { Settings as ScreenpipeAppSettings } from "@screenpipe/js"; 5 | 6 | export async function getScreenpipeAppSettings() { 7 | return await pipe.settings.getAll(); 8 | } 9 | 10 | export async function updateScreenpipeAppSettings( 11 | newSettings: Partial 12 | ) { 13 | return await pipe.settings.update(newSettings); 14 | } 15 | -------------------------------------------------------------------------------- /pipes/screen-avatar/src/lib/constants.ts: -------------------------------------------------------------------------------- 1 | export const AVATARS = [ 2 | { 3 | avatar_id: "Anna_public_3_20240108", 4 | name: "Anna in Brown T-shirt", 5 | }, 6 | { 7 | avatar_id: "josh_lite3_20230714", 8 | name: "Joshua Heygen CEO", 9 | }, 10 | ] -------------------------------------------------------------------------------- /pipes/screen-avatar/src/lib/hooks/use-debounce.tsx: -------------------------------------------------------------------------------- 1 | import { useState, useEffect } from "react"; 2 | 3 | export function useDebounce(value: T, delay: number): T { 4 | const [debouncedValue, setDebouncedValue] = useState(value); 5 | 6 | useEffect(() => { 7 | const handler = setTimeout(() => { 8 | setDebouncedValue(value); 9 | }, delay); 10 | 11 | return () => { 12 | clearTimeout(handler); 13 | }; 14 | }, [value, delay]); 15 | 16 | return debouncedValue; 17 | } 18 | -------------------------------------------------------------------------------- /pipes/search/bun.lockb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mediar-ai/screenpipe/cb8bbfe9fb6ace78de84ed3a732761f039e9cd2d/pipes/search/bun.lockb -------------------------------------------------------------------------------- /pipes/search/eslint.config.mjs: -------------------------------------------------------------------------------- 1 | import { dirname } from "path"; 2 | import { fileURLToPath } from "url"; 3 | import { FlatCompat } from "@eslint/eslintrc"; 4 | 5 | const __filename = fileURLToPath(import.meta.url); 6 | const __dirname = dirname(__filename); 7 | 8 | const compat = new FlatCompat({ 9 | baseDirectory: __dirname, 10 | }); 11 | 12 | const eslintConfig = [ 13 | ...compat.extends("next/core-web-vitals", "next/typescript"), 14 | ]; 15 | 16 | export default eslintConfig; 17 | -------------------------------------------------------------------------------- /pipes/search/next.config.ts: -------------------------------------------------------------------------------- 1 | import type { NextConfig } from "next"; 2 | 3 | const nextConfig: NextConfig = { 4 | transpilePackages: ["@screenpipe/js"], 5 | webpack: (config, {}) => { 6 | // TODO: remove this in when merging 7 | config.resolve.symlinks = true; 8 | return config; 9 | }, 10 | devIndicators: { 11 | buildActivity: false, 12 | appIsrStatus: false, 13 | }, 14 | }; 15 | 16 | export default nextConfig; 17 | -------------------------------------------------------------------------------- /pipes/search/postcss.config.mjs: -------------------------------------------------------------------------------- 1 | /** @type {import('postcss-load-config').Config} */ 2 | const config = { 3 | plugins: { 4 | tailwindcss: {}, 5 | }, 6 | }; 7 | 8 | export default config; 9 | -------------------------------------------------------------------------------- /pipes/search/public/file.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /pipes/search/public/vercel.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /pipes/search/public/window.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /pipes/search/src/app/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mediar-ai/screenpipe/cb8bbfe9fb6ace78de84ed3a732761f039e9cd2d/pipes/search/src/app/favicon.ico -------------------------------------------------------------------------------- /pipes/search/src/components/markdown.tsx: -------------------------------------------------------------------------------- 1 | import { FC, memo } from 'react' 2 | import ReactMarkdown, { Options } from 'react-markdown' 3 | 4 | export const MemoizedReactMarkdown: FC = memo( 5 | ReactMarkdown, 6 | (prevProps, nextProps) => 7 | prevProps.children === nextProps.children && 8 | prevProps.className === nextProps.className 9 | ) 10 | -------------------------------------------------------------------------------- /pipes/search/src/components/ui/skeleton.tsx: -------------------------------------------------------------------------------- 1 | import { cn } from "@/lib/utils" 2 | 3 | function Skeleton({ 4 | className, 5 | ...props 6 | }: React.HTMLAttributes) { 7 | return ( 8 |
12 | ) 13 | } 14 | 15 | export { Skeleton } 16 | -------------------------------------------------------------------------------- /pipes/search/src/lib/hooks/use-debounce.tsx: -------------------------------------------------------------------------------- 1 | import { useState, useEffect } from "react"; 2 | 3 | export function useDebounce(value: T, delay: number): T { 4 | const [debouncedValue, setDebouncedValue] = useState(value); 5 | 6 | useEffect(() => { 7 | const handler = setTimeout(() => { 8 | setDebouncedValue(value); 9 | }, delay); 10 | 11 | return () => { 12 | clearTimeout(handler); 13 | }; 14 | }, [value, delay]); 15 | 16 | return debouncedValue; 17 | } 18 | -------------------------------------------------------------------------------- /rust-toolchain.toml: -------------------------------------------------------------------------------- 1 | [toolchain] 2 | channel = "stable" 3 | versioned = "1.84.0" 4 | -------------------------------------------------------------------------------- /screenpipe-app-tauri/.eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "next/core-web-vitals" 3 | } 4 | -------------------------------------------------------------------------------- /screenpipe-app-tauri/.mocharc.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | spec: [ 3 | "./e2e/terminator-e2e/**/*.spec.js" 4 | ], 5 | timeout: 150000, 6 | require: [ 7 | "./e2e/terminator-e2e/mocha.global.js" 8 | ], 9 | reporter: "spec", 10 | }; 11 | -------------------------------------------------------------------------------- /screenpipe-app-tauri/README.md: -------------------------------------------------------------------------------- 1 | 2 | refer to the [official documentation](https://docs.screenpi.pe/getting-started) for more information. 3 | 4 | -------------------------------------------------------------------------------- /screenpipe-app-tauri/app/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mediar-ai/screenpipe/cb8bbfe9fb6ace78de84ed3a732761f039e9cd2d/screenpipe-app-tauri/app/favicon.ico -------------------------------------------------------------------------------- /screenpipe-app-tauri/app/global-error.jsx: -------------------------------------------------------------------------------- 1 | "use client"; 2 | 3 | import Error from "next/error"; 4 | import { useEffect } from "react"; 5 | 6 | export default function GlobalError({ error }) { 7 | return ( 8 | 9 | 10 | 11 | 12 | 13 | ); 14 | } 15 | -------------------------------------------------------------------------------- /screenpipe-app-tauri/app/not-found.tsx: -------------------------------------------------------------------------------- 1 | export default function NotFound() { 2 | return ( 3 | <> 4 |

Not Found

5 |

Could not find requested resource

6 | 7 | ); 8 | } 9 | -------------------------------------------------------------------------------- /screenpipe-app-tauri/bun.lockb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mediar-ai/screenpipe/cb8bbfe9fb6ace78de84ed3a732761f039e9cd2d/screenpipe-app-tauri/bun.lockb -------------------------------------------------------------------------------- /screenpipe-app-tauri/components.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://ui.shadcn.com/schema.json", 3 | "style": "default", 4 | "rsc": true, 5 | "tsx": true, 6 | "tailwind": { 7 | "config": "tailwind.config.ts", 8 | "css": "app/globals.css", 9 | "baseColor": "gray", 10 | "cssVariables": true 11 | }, 12 | "aliases": { 13 | "utils": "@/lib/utils", 14 | "components": "@/components" 15 | } 16 | } -------------------------------------------------------------------------------- /screenpipe-app-tauri/components/markdown.tsx: -------------------------------------------------------------------------------- 1 | import { FC, memo } from 'react' 2 | import ReactMarkdown, { Options } from 'react-markdown' 3 | 4 | export const MemoizedReactMarkdown: FC = memo( 5 | ReactMarkdown, 6 | (prevProps, nextProps) => 7 | prevProps.children === nextProps.children && 8 | prevProps.className === nextProps.className 9 | ) 10 | -------------------------------------------------------------------------------- /screenpipe-app-tauri/components/ui/collapsible.tsx: -------------------------------------------------------------------------------- 1 | "use client" 2 | 3 | import * as CollapsiblePrimitive from "@radix-ui/react-collapsible" 4 | 5 | const Collapsible = CollapsiblePrimitive.Root 6 | 7 | const CollapsibleTrigger = CollapsiblePrimitive.CollapsibleTrigger 8 | 9 | const CollapsibleContent = CollapsiblePrimitive.CollapsibleContent 10 | 11 | export { Collapsible, CollapsibleTrigger, CollapsibleContent } 12 | -------------------------------------------------------------------------------- /screenpipe-app-tauri/components/ui/skeleton.tsx: -------------------------------------------------------------------------------- 1 | import { cn } from "@/lib/utils" 2 | 3 | function Skeleton({ 4 | className, 5 | ...props 6 | }: React.HTMLAttributes) { 7 | return ( 8 |
12 | ) 13 | } 14 | 15 | export { Skeleton } 16 | -------------------------------------------------------------------------------- /screenpipe-app-tauri/e2e/utils.js: -------------------------------------------------------------------------------- 1 | async function findAndClick(selector) { 2 | const button = await $(selector); 3 | await button.isClickable(); 4 | await button.click(); 5 | } 6 | 7 | module.exports = { findAndClick }; -------------------------------------------------------------------------------- /screenpipe-app-tauri/e2e/videos/.keep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mediar-ai/screenpipe/cb8bbfe9fb6ace78de84ed3a732761f039e9cd2d/screenpipe-app-tauri/e2e/videos/.keep -------------------------------------------------------------------------------- /screenpipe-app-tauri/lib/hooks/use-app-version.tsx: -------------------------------------------------------------------------------- 1 | import { getVersion } from "@tauri-apps/api/app"; 2 | import { useEffect, useState } from "react"; 3 | 4 | export function useAppVersion() { 5 | const [version, setVersion] = useState(null); 6 | 7 | useEffect(() => { 8 | getVersion().then(setVersion); 9 | }, []); 10 | 11 | return version; 12 | } 13 | -------------------------------------------------------------------------------- /screenpipe-app-tauri/lib/hooks/use-debounce.tsx: -------------------------------------------------------------------------------- 1 | import { useState, useEffect } from "react"; 2 | 3 | export function useDebounce(value: T, delay: number): T { 4 | const [debouncedValue, setDebouncedValue] = useState(value); 5 | 6 | useEffect(() => { 7 | const handler = setTimeout(() => { 8 | setDebouncedValue(value); 9 | }, delay); 10 | 11 | return () => { 12 | clearTimeout(handler); 13 | }; 14 | }, [value, delay]); 15 | 16 | return debouncedValue; 17 | } 18 | -------------------------------------------------------------------------------- /screenpipe-app-tauri/lib/hooks/use-interval.tsx: -------------------------------------------------------------------------------- 1 | import { useEffect, useRef } from 'react'; 2 | 3 | export function useInterval(callback: () => void, delay: number | null) { 4 | const savedCallback = useRef(callback); 5 | 6 | useEffect(() => { 7 | savedCallback.current = callback; 8 | }, [callback]); 9 | 10 | useEffect(() => { 11 | if (delay !== null) { 12 | const id = setInterval(() => savedCallback.current(), delay); 13 | return () => clearInterval(id); 14 | } 15 | }, [delay]); 16 | } -------------------------------------------------------------------------------- /screenpipe-app-tauri/lib/hooks/use-settings-dialog.ts: -------------------------------------------------------------------------------- 1 | import { create } from "zustand"; 2 | 3 | interface SettingsDialogStore { 4 | isOpen: boolean; 5 | setIsOpen: (open: boolean) => void; 6 | } 7 | 8 | export const useSettingsDialog = create((set) => ({ 9 | isOpen: false, 10 | setIsOpen: (open) => set({ isOpen: open }), 11 | })); 12 | -------------------------------------------------------------------------------- /screenpipe-app-tauri/lib/hooks/use-status-dialog.tsx: -------------------------------------------------------------------------------- 1 | import { create } from "zustand"; 2 | 3 | type StatusDialogStore = { 4 | isOpen: boolean; 5 | open: () => void; 6 | close: () => void; 7 | toggle: () => void; 8 | }; 9 | 10 | export const useStatusDialog = create((set) => ({ 11 | isOpen: false, 12 | open: () => set({ isOpen: true }), 13 | close: () => set({ isOpen: false }), 14 | toggle: () => set((state) => ({ isOpen: !state.isOpen })), 15 | })); 16 | -------------------------------------------------------------------------------- /screenpipe-app-tauri/lib/shortcuts.ts: -------------------------------------------------------------------------------- 1 | import { invoke } from "@tauri-apps/api/core"; 2 | import { Shortcut } from "./hooks/use-settings"; 3 | 4 | export async function registerShortcuts({ 5 | showScreenpipeShortcut, 6 | disabledShortcuts, 7 | }: { 8 | showScreenpipeShortcut: string; 9 | disabledShortcuts: Shortcut[]; 10 | }) { 11 | invoke("update_show_screenpipe_shortcut", { 12 | new_shortcut: showScreenpipeShortcut, 13 | enabled: !disabledShortcuts.includes(Shortcut.SHOW_SCREENPIPE), 14 | }); 15 | } 16 | -------------------------------------------------------------------------------- /screenpipe-app-tauri/lib/supabase/client.ts: -------------------------------------------------------------------------------- 1 | // create supabase client 2 | 3 | import { createClient } from "@supabase/supabase-js"; 4 | 5 | const supabase = createClient( 6 | "https://eshwntsgsputksqamckh.supabase.co", 7 | "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6ImVzaHdudHNnc3B1dGtzcWFtY2toIiwicm9sZSI6ImFub24iLCJpYXQiOjE3MzMwMDg5ODQsImV4cCI6MjA0ODU4NDk4NH0.t91Xc-BK_7hYpTxVIGNQRAolBVAZBs4POdcQXH8rLS4" 8 | ); 9 | 10 | export default supabase; 11 | -------------------------------------------------------------------------------- /screenpipe-app-tauri/next.config.mjs: -------------------------------------------------------------------------------- 1 | /** @type {import('next').NextConfig} */ 2 | const nextConfig = { 3 | output: 'export', 4 | images: { 5 | unoptimized: true, 6 | }, 7 | } 8 | export default nextConfig; 9 | 10 | -------------------------------------------------------------------------------- /screenpipe-app-tauri/postcss.config.mjs: -------------------------------------------------------------------------------- 1 | /** @type {import('postcss-load-config').Config} */ 2 | const config = { 3 | plugins: { 4 | tailwindcss: {}, 5 | }, 6 | }; 7 | 8 | export default config; 9 | -------------------------------------------------------------------------------- /screenpipe-app-tauri/public/128x128.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mediar-ai/screenpipe/cb8bbfe9fb6ace78de84ed3a732761f039e9cd2d/screenpipe-app-tauri/public/128x128.png -------------------------------------------------------------------------------- /screenpipe-app-tauri/public/images/custom.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mediar-ai/screenpipe/cb8bbfe9fb6ace78de84ed3a732761f039e9cd2d/screenpipe-app-tauri/public/images/custom.png -------------------------------------------------------------------------------- /screenpipe-app-tauri/public/images/ollama.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mediar-ai/screenpipe/cb8bbfe9fb6ace78de84ed3a732761f039e9cd2d/screenpipe-app-tauri/public/images/ollama.png -------------------------------------------------------------------------------- /screenpipe-app-tauri/public/images/openai.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mediar-ai/screenpipe/cb8bbfe9fb6ace78de84ed3a732761f039e9cd2d/screenpipe-app-tauri/public/images/openai.png -------------------------------------------------------------------------------- /screenpipe-app-tauri/public/images/screenpipe.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mediar-ai/screenpipe/cb8bbfe9fb6ace78de84ed3a732761f039e9cd2d/screenpipe-app-tauri/public/images/screenpipe.png -------------------------------------------------------------------------------- /screenpipe-app-tauri/public/pipe-store-preview.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mediar-ai/screenpipe/cb8bbfe9fb6ace78de84ed3a732761f039e9cd2d/screenpipe-app-tauri/public/pipe-store-preview.png -------------------------------------------------------------------------------- /screenpipe-app-tauri/public/placeholder-user.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mediar-ai/screenpipe/cb8bbfe9fb6ace78de84ed3a732761f039e9cd2d/screenpipe-app-tauri/public/placeholder-user.jpg -------------------------------------------------------------------------------- /screenpipe-app-tauri/src-tauri/.gitignore: -------------------------------------------------------------------------------- 1 | # Generated by Cargo 2 | # will have compiled files and executables 3 | /target/ 4 | 5 | # Commit the Cargo.lock file 6 | !Cargo.lock 7 | -------------------------------------------------------------------------------- /screenpipe-app-tauri/src-tauri/assets/dmg-background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mediar-ai/screenpipe/cb8bbfe9fb6ace78de84ed3a732761f039e9cd2d/screenpipe-app-tauri/src-tauri/assets/dmg-background.png -------------------------------------------------------------------------------- /screenpipe-app-tauri/src-tauri/assets/nsis-header.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mediar-ai/screenpipe/cb8bbfe9fb6ace78de84ed3a732761f039e9cd2d/screenpipe-app-tauri/src-tauri/assets/nsis-header.bmp -------------------------------------------------------------------------------- /screenpipe-app-tauri/src-tauri/assets/nsis-sidebar.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mediar-ai/screenpipe/cb8bbfe9fb6ace78de84ed3a732761f039e9cd2d/screenpipe-app-tauri/src-tauri/assets/nsis-sidebar.bmp -------------------------------------------------------------------------------- /screenpipe-app-tauri/src-tauri/assets/screenpipe-logo-tray-black-failed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mediar-ai/screenpipe/cb8bbfe9fb6ace78de84ed3a732761f039e9cd2d/screenpipe-app-tauri/src-tauri/assets/screenpipe-logo-tray-black-failed.png -------------------------------------------------------------------------------- /screenpipe-app-tauri/src-tauri/assets/screenpipe-logo-tray-black.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mediar-ai/screenpipe/cb8bbfe9fb6ace78de84ed3a732761f039e9cd2d/screenpipe-app-tauri/src-tauri/assets/screenpipe-logo-tray-black.png -------------------------------------------------------------------------------- /screenpipe-app-tauri/src-tauri/assets/screenpipe-logo-tray-updates-black.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mediar-ai/screenpipe/cb8bbfe9fb6ace78de84ed3a732761f039e9cd2d/screenpipe-app-tauri/src-tauri/assets/screenpipe-logo-tray-updates-black.png -------------------------------------------------------------------------------- /screenpipe-app-tauri/src-tauri/assets/screenpipe-logo-tray-updates-white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mediar-ai/screenpipe/cb8bbfe9fb6ace78de84ed3a732761f039e9cd2d/screenpipe-app-tauri/src-tauri/assets/screenpipe-logo-tray-updates-white.png -------------------------------------------------------------------------------- /screenpipe-app-tauri/src-tauri/assets/screenpipe-logo-tray-white-failed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mediar-ai/screenpipe/cb8bbfe9fb6ace78de84ed3a732761f039e9cd2d/screenpipe-app-tauri/src-tauri/assets/screenpipe-logo-tray-white-failed.png -------------------------------------------------------------------------------- /screenpipe-app-tauri/src-tauri/assets/screenpipe-logo-tray-white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mediar-ai/screenpipe/cb8bbfe9fb6ace78de84ed3a732761f039e9cd2d/screenpipe-app-tauri/src-tauri/assets/screenpipe-logo-tray-white.png -------------------------------------------------------------------------------- /screenpipe-app-tauri/src-tauri/build.rs: -------------------------------------------------------------------------------- 1 | fn main() { 2 | #[cfg(target_os = "macos")] 3 | println!("cargo:rustc-link-lib=framework=AVFoundation"); 4 | tauri_build::build() 5 | } 6 | -------------------------------------------------------------------------------- /screenpipe-app-tauri/src-tauri/icons/1024x1024.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mediar-ai/screenpipe/cb8bbfe9fb6ace78de84ed3a732761f039e9cd2d/screenpipe-app-tauri/src-tauri/icons/1024x1024.png -------------------------------------------------------------------------------- /screenpipe-app-tauri/src-tauri/icons/128x128.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mediar-ai/screenpipe/cb8bbfe9fb6ace78de84ed3a732761f039e9cd2d/screenpipe-app-tauri/src-tauri/icons/128x128.png -------------------------------------------------------------------------------- /screenpipe-app-tauri/src-tauri/icons/128x128@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mediar-ai/screenpipe/cb8bbfe9fb6ace78de84ed3a732761f039e9cd2d/screenpipe-app-tauri/src-tauri/icons/128x128@2x.png -------------------------------------------------------------------------------- /screenpipe-app-tauri/src-tauri/icons/256x256.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mediar-ai/screenpipe/cb8bbfe9fb6ace78de84ed3a732761f039e9cd2d/screenpipe-app-tauri/src-tauri/icons/256x256.png -------------------------------------------------------------------------------- /screenpipe-app-tauri/src-tauri/icons/32x32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mediar-ai/screenpipe/cb8bbfe9fb6ace78de84ed3a732761f039e9cd2d/screenpipe-app-tauri/src-tauri/icons/32x32.png -------------------------------------------------------------------------------- /screenpipe-app-tauri/src-tauri/icons/512x512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mediar-ai/screenpipe/cb8bbfe9fb6ace78de84ed3a732761f039e9cd2d/screenpipe-app-tauri/src-tauri/icons/512x512.png -------------------------------------------------------------------------------- /screenpipe-app-tauri/src-tauri/icons/Square107x107Logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mediar-ai/screenpipe/cb8bbfe9fb6ace78de84ed3a732761f039e9cd2d/screenpipe-app-tauri/src-tauri/icons/Square107x107Logo.png -------------------------------------------------------------------------------- /screenpipe-app-tauri/src-tauri/icons/Square142x142Logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mediar-ai/screenpipe/cb8bbfe9fb6ace78de84ed3a732761f039e9cd2d/screenpipe-app-tauri/src-tauri/icons/Square142x142Logo.png -------------------------------------------------------------------------------- /screenpipe-app-tauri/src-tauri/icons/Square150x150Logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mediar-ai/screenpipe/cb8bbfe9fb6ace78de84ed3a732761f039e9cd2d/screenpipe-app-tauri/src-tauri/icons/Square150x150Logo.png -------------------------------------------------------------------------------- /screenpipe-app-tauri/src-tauri/icons/Square284x284Logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mediar-ai/screenpipe/cb8bbfe9fb6ace78de84ed3a732761f039e9cd2d/screenpipe-app-tauri/src-tauri/icons/Square284x284Logo.png -------------------------------------------------------------------------------- /screenpipe-app-tauri/src-tauri/icons/Square30x30Logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mediar-ai/screenpipe/cb8bbfe9fb6ace78de84ed3a732761f039e9cd2d/screenpipe-app-tauri/src-tauri/icons/Square30x30Logo.png -------------------------------------------------------------------------------- /screenpipe-app-tauri/src-tauri/icons/Square310x310Logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mediar-ai/screenpipe/cb8bbfe9fb6ace78de84ed3a732761f039e9cd2d/screenpipe-app-tauri/src-tauri/icons/Square310x310Logo.png -------------------------------------------------------------------------------- /screenpipe-app-tauri/src-tauri/icons/Square44x44Logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mediar-ai/screenpipe/cb8bbfe9fb6ace78de84ed3a732761f039e9cd2d/screenpipe-app-tauri/src-tauri/icons/Square44x44Logo.png -------------------------------------------------------------------------------- /screenpipe-app-tauri/src-tauri/icons/Square71x71Logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mediar-ai/screenpipe/cb8bbfe9fb6ace78de84ed3a732761f039e9cd2d/screenpipe-app-tauri/src-tauri/icons/Square71x71Logo.png -------------------------------------------------------------------------------- /screenpipe-app-tauri/src-tauri/icons/Square89x89Logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mediar-ai/screenpipe/cb8bbfe9fb6ace78de84ed3a732761f039e9cd2d/screenpipe-app-tauri/src-tauri/icons/Square89x89Logo.png -------------------------------------------------------------------------------- /screenpipe-app-tauri/src-tauri/icons/StoreLogo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mediar-ai/screenpipe/cb8bbfe9fb6ace78de84ed3a732761f039e9cd2d/screenpipe-app-tauri/src-tauri/icons/StoreLogo.png -------------------------------------------------------------------------------- /screenpipe-app-tauri/src-tauri/icons/android/mipmap-hdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mediar-ai/screenpipe/cb8bbfe9fb6ace78de84ed3a732761f039e9cd2d/screenpipe-app-tauri/src-tauri/icons/android/mipmap-hdpi/ic_launcher.png -------------------------------------------------------------------------------- /screenpipe-app-tauri/src-tauri/icons/android/mipmap-hdpi/ic_launcher_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mediar-ai/screenpipe/cb8bbfe9fb6ace78de84ed3a732761f039e9cd2d/screenpipe-app-tauri/src-tauri/icons/android/mipmap-hdpi/ic_launcher_foreground.png -------------------------------------------------------------------------------- /screenpipe-app-tauri/src-tauri/icons/android/mipmap-hdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mediar-ai/screenpipe/cb8bbfe9fb6ace78de84ed3a732761f039e9cd2d/screenpipe-app-tauri/src-tauri/icons/android/mipmap-hdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /screenpipe-app-tauri/src-tauri/icons/android/mipmap-mdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mediar-ai/screenpipe/cb8bbfe9fb6ace78de84ed3a732761f039e9cd2d/screenpipe-app-tauri/src-tauri/icons/android/mipmap-mdpi/ic_launcher.png -------------------------------------------------------------------------------- /screenpipe-app-tauri/src-tauri/icons/android/mipmap-mdpi/ic_launcher_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mediar-ai/screenpipe/cb8bbfe9fb6ace78de84ed3a732761f039e9cd2d/screenpipe-app-tauri/src-tauri/icons/android/mipmap-mdpi/ic_launcher_foreground.png -------------------------------------------------------------------------------- /screenpipe-app-tauri/src-tauri/icons/android/mipmap-mdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mediar-ai/screenpipe/cb8bbfe9fb6ace78de84ed3a732761f039e9cd2d/screenpipe-app-tauri/src-tauri/icons/android/mipmap-mdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /screenpipe-app-tauri/src-tauri/icons/android/mipmap-xhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mediar-ai/screenpipe/cb8bbfe9fb6ace78de84ed3a732761f039e9cd2d/screenpipe-app-tauri/src-tauri/icons/android/mipmap-xhdpi/ic_launcher.png -------------------------------------------------------------------------------- /screenpipe-app-tauri/src-tauri/icons/android/mipmap-xhdpi/ic_launcher_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mediar-ai/screenpipe/cb8bbfe9fb6ace78de84ed3a732761f039e9cd2d/screenpipe-app-tauri/src-tauri/icons/android/mipmap-xhdpi/ic_launcher_foreground.png -------------------------------------------------------------------------------- /screenpipe-app-tauri/src-tauri/icons/android/mipmap-xhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mediar-ai/screenpipe/cb8bbfe9fb6ace78de84ed3a732761f039e9cd2d/screenpipe-app-tauri/src-tauri/icons/android/mipmap-xhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /screenpipe-app-tauri/src-tauri/icons/android/mipmap-xxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mediar-ai/screenpipe/cb8bbfe9fb6ace78de84ed3a732761f039e9cd2d/screenpipe-app-tauri/src-tauri/icons/android/mipmap-xxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /screenpipe-app-tauri/src-tauri/icons/android/mipmap-xxhdpi/ic_launcher_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mediar-ai/screenpipe/cb8bbfe9fb6ace78de84ed3a732761f039e9cd2d/screenpipe-app-tauri/src-tauri/icons/android/mipmap-xxhdpi/ic_launcher_foreground.png -------------------------------------------------------------------------------- /screenpipe-app-tauri/src-tauri/icons/android/mipmap-xxhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mediar-ai/screenpipe/cb8bbfe9fb6ace78de84ed3a732761f039e9cd2d/screenpipe-app-tauri/src-tauri/icons/android/mipmap-xxhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /screenpipe-app-tauri/src-tauri/icons/android/mipmap-xxxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mediar-ai/screenpipe/cb8bbfe9fb6ace78de84ed3a732761f039e9cd2d/screenpipe-app-tauri/src-tauri/icons/android/mipmap-xxxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /screenpipe-app-tauri/src-tauri/icons/android/mipmap-xxxhdpi/ic_launcher_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mediar-ai/screenpipe/cb8bbfe9fb6ace78de84ed3a732761f039e9cd2d/screenpipe-app-tauri/src-tauri/icons/android/mipmap-xxxhdpi/ic_launcher_foreground.png -------------------------------------------------------------------------------- /screenpipe-app-tauri/src-tauri/icons/android/mipmap-xxxhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mediar-ai/screenpipe/cb8bbfe9fb6ace78de84ed3a732761f039e9cd2d/screenpipe-app-tauri/src-tauri/icons/android/mipmap-xxxhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /screenpipe-app-tauri/src-tauri/icons/icon.icns: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mediar-ai/screenpipe/cb8bbfe9fb6ace78de84ed3a732761f039e9cd2d/screenpipe-app-tauri/src-tauri/icons/icon.icns -------------------------------------------------------------------------------- /screenpipe-app-tauri/src-tauri/icons/icon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mediar-ai/screenpipe/cb8bbfe9fb6ace78de84ed3a732761f039e9cd2d/screenpipe-app-tauri/src-tauri/icons/icon.ico -------------------------------------------------------------------------------- /screenpipe-app-tauri/src-tauri/icons/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mediar-ai/screenpipe/cb8bbfe9fb6ace78de84ed3a732761f039e9cd2d/screenpipe-app-tauri/src-tauri/icons/icon.png -------------------------------------------------------------------------------- /screenpipe-app-tauri/src-tauri/icons/ios/AppIcon-20x20@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mediar-ai/screenpipe/cb8bbfe9fb6ace78de84ed3a732761f039e9cd2d/screenpipe-app-tauri/src-tauri/icons/ios/AppIcon-20x20@1x.png -------------------------------------------------------------------------------- /screenpipe-app-tauri/src-tauri/icons/ios/AppIcon-20x20@2x-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mediar-ai/screenpipe/cb8bbfe9fb6ace78de84ed3a732761f039e9cd2d/screenpipe-app-tauri/src-tauri/icons/ios/AppIcon-20x20@2x-1.png -------------------------------------------------------------------------------- /screenpipe-app-tauri/src-tauri/icons/ios/AppIcon-20x20@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mediar-ai/screenpipe/cb8bbfe9fb6ace78de84ed3a732761f039e9cd2d/screenpipe-app-tauri/src-tauri/icons/ios/AppIcon-20x20@2x.png -------------------------------------------------------------------------------- /screenpipe-app-tauri/src-tauri/icons/ios/AppIcon-20x20@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mediar-ai/screenpipe/cb8bbfe9fb6ace78de84ed3a732761f039e9cd2d/screenpipe-app-tauri/src-tauri/icons/ios/AppIcon-20x20@3x.png -------------------------------------------------------------------------------- /screenpipe-app-tauri/src-tauri/icons/ios/AppIcon-29x29@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mediar-ai/screenpipe/cb8bbfe9fb6ace78de84ed3a732761f039e9cd2d/screenpipe-app-tauri/src-tauri/icons/ios/AppIcon-29x29@1x.png -------------------------------------------------------------------------------- /screenpipe-app-tauri/src-tauri/icons/ios/AppIcon-29x29@2x-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mediar-ai/screenpipe/cb8bbfe9fb6ace78de84ed3a732761f039e9cd2d/screenpipe-app-tauri/src-tauri/icons/ios/AppIcon-29x29@2x-1.png -------------------------------------------------------------------------------- /screenpipe-app-tauri/src-tauri/icons/ios/AppIcon-29x29@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mediar-ai/screenpipe/cb8bbfe9fb6ace78de84ed3a732761f039e9cd2d/screenpipe-app-tauri/src-tauri/icons/ios/AppIcon-29x29@2x.png -------------------------------------------------------------------------------- /screenpipe-app-tauri/src-tauri/icons/ios/AppIcon-29x29@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mediar-ai/screenpipe/cb8bbfe9fb6ace78de84ed3a732761f039e9cd2d/screenpipe-app-tauri/src-tauri/icons/ios/AppIcon-29x29@3x.png -------------------------------------------------------------------------------- /screenpipe-app-tauri/src-tauri/icons/ios/AppIcon-40x40@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mediar-ai/screenpipe/cb8bbfe9fb6ace78de84ed3a732761f039e9cd2d/screenpipe-app-tauri/src-tauri/icons/ios/AppIcon-40x40@1x.png -------------------------------------------------------------------------------- /screenpipe-app-tauri/src-tauri/icons/ios/AppIcon-40x40@2x-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mediar-ai/screenpipe/cb8bbfe9fb6ace78de84ed3a732761f039e9cd2d/screenpipe-app-tauri/src-tauri/icons/ios/AppIcon-40x40@2x-1.png -------------------------------------------------------------------------------- /screenpipe-app-tauri/src-tauri/icons/ios/AppIcon-40x40@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mediar-ai/screenpipe/cb8bbfe9fb6ace78de84ed3a732761f039e9cd2d/screenpipe-app-tauri/src-tauri/icons/ios/AppIcon-40x40@2x.png -------------------------------------------------------------------------------- /screenpipe-app-tauri/src-tauri/icons/ios/AppIcon-40x40@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mediar-ai/screenpipe/cb8bbfe9fb6ace78de84ed3a732761f039e9cd2d/screenpipe-app-tauri/src-tauri/icons/ios/AppIcon-40x40@3x.png -------------------------------------------------------------------------------- /screenpipe-app-tauri/src-tauri/icons/ios/AppIcon-512@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mediar-ai/screenpipe/cb8bbfe9fb6ace78de84ed3a732761f039e9cd2d/screenpipe-app-tauri/src-tauri/icons/ios/AppIcon-512@2x.png -------------------------------------------------------------------------------- /screenpipe-app-tauri/src-tauri/icons/ios/AppIcon-60x60@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mediar-ai/screenpipe/cb8bbfe9fb6ace78de84ed3a732761f039e9cd2d/screenpipe-app-tauri/src-tauri/icons/ios/AppIcon-60x60@2x.png -------------------------------------------------------------------------------- /screenpipe-app-tauri/src-tauri/icons/ios/AppIcon-60x60@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mediar-ai/screenpipe/cb8bbfe9fb6ace78de84ed3a732761f039e9cd2d/screenpipe-app-tauri/src-tauri/icons/ios/AppIcon-60x60@3x.png -------------------------------------------------------------------------------- /screenpipe-app-tauri/src-tauri/icons/ios/AppIcon-76x76@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mediar-ai/screenpipe/cb8bbfe9fb6ace78de84ed3a732761f039e9cd2d/screenpipe-app-tauri/src-tauri/icons/ios/AppIcon-76x76@1x.png -------------------------------------------------------------------------------- /screenpipe-app-tauri/src-tauri/icons/ios/AppIcon-76x76@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mediar-ai/screenpipe/cb8bbfe9fb6ace78de84ed3a732761f039e9cd2d/screenpipe-app-tauri/src-tauri/icons/ios/AppIcon-76x76@2x.png -------------------------------------------------------------------------------- /screenpipe-app-tauri/src-tauri/icons/ios/AppIcon-83.5x83.5@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mediar-ai/screenpipe/cb8bbfe9fb6ace78de84ed3a732761f039e9cd2d/screenpipe-app-tauri/src-tauri/icons/ios/AppIcon-83.5x83.5@2x.png -------------------------------------------------------------------------------- /screenpipe-app-tauri/src-tauri/icons/screenpipe-logo-tray-black.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mediar-ai/screenpipe/cb8bbfe9fb6ace78de84ed3a732761f039e9cd2d/screenpipe-app-tauri/src-tauri/icons/screenpipe-logo-tray-black.png -------------------------------------------------------------------------------- /screenpipe-app-tauri/src-tauri/icons/screenpipe-logo-tray-failed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mediar-ai/screenpipe/cb8bbfe9fb6ace78de84ed3a732761f039e9cd2d/screenpipe-app-tauri/src-tauri/icons/screenpipe-logo-tray-failed.png -------------------------------------------------------------------------------- /screenpipe-app-tauri/src-tauri/src/config.rs: -------------------------------------------------------------------------------- 1 | use std::{fs, path::PathBuf}; 2 | use tauri::Manager; 3 | 4 | pub fn get_base_dir( 5 | app: &tauri::AppHandle, 6 | custom_path: Option, 7 | ) -> anyhow::Result { 8 | let default_path = app.path().local_data_dir().unwrap().join("screenpipe"); 9 | 10 | let local_data_dir = custom_path.map(PathBuf::from).unwrap_or(default_path); 11 | 12 | fs::create_dir_all(local_data_dir.join("data"))?; 13 | Ok(local_data_dir) 14 | } 15 | -------------------------------------------------------------------------------- /screenpipe-app-tauri/src-tauri/ui_monitor-aarch64-apple-darwin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mediar-ai/screenpipe/cb8bbfe9fb6ace78de84ed3a732761f039e9cd2d/screenpipe-app-tauri/src-tauri/ui_monitor-aarch64-apple-darwin -------------------------------------------------------------------------------- /screenpipe-app-tauri/src-tauri/ui_monitor-x86_64-apple-darwin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mediar-ai/screenpipe/cb8bbfe9fb6ace78de84ed3a732761f039e9cd2d/screenpipe-app-tauri/src-tauri/ui_monitor-x86_64-apple-darwin -------------------------------------------------------------------------------- /screenpipe-audio/README.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | ![image](https://github.com/user-attachments/assets/d27c6f28-7f68-44ba-9e8c-124019daf83a) 5 | -------------------------------------------------------------------------------- /screenpipe-audio/models/pyannote/segmentation-3.0.onnx: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:b78fc48113bb46fd247ae6a9aea737079550c647638db961df7e0e1e9f4ba62e 3 | size 5983836 4 | -------------------------------------------------------------------------------- /screenpipe-audio/models/pyannote/wespeaker_en_voxceleb_CAM++.onnx: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:c46fad10b5f81e1aa4a60c162714208577093655076c5450f8c469e522ec54ef 3 | size 29292684 4 | -------------------------------------------------------------------------------- /screenpipe-audio/models/whisper/melfilters.bytes: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mediar-ai/screenpipe/cb8bbfe9fb6ace78de84ed3a732761f039e9cd2d/screenpipe-audio/models/whisper/melfilters.bytes -------------------------------------------------------------------------------- /screenpipe-audio/models/whisper/melfilters128.bytes: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mediar-ai/screenpipe/cb8bbfe9fb6ace78de84ed3a732761f039e9cd2d/screenpipe-audio/models/whisper/melfilters128.bytes -------------------------------------------------------------------------------- /screenpipe-audio/src/audio_manager/mod.rs: -------------------------------------------------------------------------------- 1 | mod builder; 2 | mod device_monitor; 3 | mod manager; 4 | pub use builder::*; 5 | pub use device_monitor::*; 6 | pub use manager::*; 7 | -------------------------------------------------------------------------------- /screenpipe-audio/src/device/mod.rs: -------------------------------------------------------------------------------- 1 | pub mod device_manager; 2 | -------------------------------------------------------------------------------- /screenpipe-audio/src/lib.rs: -------------------------------------------------------------------------------- 1 | pub mod core; 2 | mod utils; 3 | pub mod vad; 4 | pub use transcription::stt::stt; 5 | pub use transcription::{AudioInput, TranscriptionResult}; 6 | pub mod speaker; 7 | pub mod transcription; 8 | pub use utils::audio::pcm_decode; 9 | pub use utils::audio::resample; 10 | pub mod audio_manager; 11 | mod device; 12 | mod segmentation; 13 | -------------------------------------------------------------------------------- /screenpipe-audio/src/segmentation/mod.rs: -------------------------------------------------------------------------------- 1 | pub mod segmentation_manager; 2 | -------------------------------------------------------------------------------- /screenpipe-audio/src/transcription/whisper/mod.rs: -------------------------------------------------------------------------------- 1 | pub mod batch; 2 | mod detect_language; 3 | pub use detect_language::detect_language; 4 | pub mod model; 5 | -------------------------------------------------------------------------------- /screenpipe-audio/src/utils/audio/mod.rs: -------------------------------------------------------------------------------- 1 | mod convert; 2 | mod normalization; 3 | mod pcm_decode; 4 | mod resample; 5 | mod spectral_subtraction; 6 | 7 | pub use convert::audio_to_mono; 8 | pub use normalization::normalize_v2; 9 | pub use pcm_decode::pcm_decode; 10 | pub use resample::resample; 11 | pub use spectral_subtraction::{average_noise_spectrum, spectral_subtraction}; 12 | -------------------------------------------------------------------------------- /screenpipe-audio/src/utils/mod.rs: -------------------------------------------------------------------------------- 1 | pub mod audio; 2 | pub mod ffmpeg; 3 | -------------------------------------------------------------------------------- /screenpipe-audio/test_data/Arifi.wav: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:9de278d1ec0043ba2708f9d2acb9e0c6d1d7520dec87409c6dcd9d69af1cfdc4 3 | size 6151248 4 | -------------------------------------------------------------------------------- /screenpipe-audio/test_data/accuracy1.wav: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:816adced6095deed8c7a712ab39d3899c3ccc5a91fddc2498ba87d13dcad1106 3 | size 3113976 4 | -------------------------------------------------------------------------------- /screenpipe-audio/test_data/accuracy2.wav: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:26f326f5489ba706a0bc97c1fee351ba1e25b489f7e627f27329d39f6b3ef7cd 3 | size 5454840 4 | -------------------------------------------------------------------------------- /screenpipe-audio/test_data/accuracy3.wav: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:2a07966971287f90c8488350589603de4e5367007c1244cc422d584773a4f811 3 | size 1227000 4 | -------------------------------------------------------------------------------- /screenpipe-audio/test_data/accuracy4.mp4: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:da046e1db7597f43696fd6f214af9fc27506031aadf1faf26346e911daa7e8d8 3 | size 247640 4 | -------------------------------------------------------------------------------- /screenpipe-audio/test_data/accuracy4.wav: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:1a00745892e895a6cd99f01c9b73ba0caadcb74fff10383eca9e87d2475d27b6 3 | size 5287376 4 | -------------------------------------------------------------------------------- /screenpipe-audio/test_data/accuracy5.mp4: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:edf0a18325fc483ab197e312adb79be418319c12aaa5396519df2e7790296cb0 3 | size 247885 4 | -------------------------------------------------------------------------------- /screenpipe-audio/test_data/accuracy5.wav: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:d3ef87bfc3d21ba467a2618b4dc8f2d1f2339526e226c1a17c422927c617b647 3 | size 5291140 4 | -------------------------------------------------------------------------------- /screenpipe-audio/test_data/poetic_kapil_gupta.wav: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:3c6ffe9c5370e8cb7164a47579be76803ca70bb5f9d23044e80ea1a9c15675e3 3 | size 4635692 4 | -------------------------------------------------------------------------------- /screenpipe-audio/test_data/selah.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mediar-ai/screenpipe/cb8bbfe9fb6ace78de84ed3a732761f039e9cd2d/screenpipe-audio/test_data/selah.mp3 -------------------------------------------------------------------------------- /screenpipe-audio/test_data/selah.mp4: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:dbc44a362c0ffb713cffefc6761b0467d0b758eb128449774831eca74a3e60a2 3 | size 487543 4 | -------------------------------------------------------------------------------- /screenpipe-audio/test_data/speaker_identification/6_speakers.wav: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:51a8b70d0213e25b410aa9494044f8a031177c144ffeca2a72f70aded939f760 3 | size 1303284 4 | -------------------------------------------------------------------------------- /screenpipe-audio/test_data/speaker_identification/obama.wav: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:262e44b6a94737ed1e14fd42d01f22fa06b13b016519a284e514a2355fea467c 3 | size 5123118 4 | -------------------------------------------------------------------------------- /screenpipe-core/examples/cron.rs: -------------------------------------------------------------------------------- 1 | 2 | use cron::Schedule; 3 | use std::str::FromStr; 4 | 5 | fn main() { 6 | let schedule = "* * * * * * *"; 7 | match Schedule::from_str(schedule) { 8 | Ok(_) => println!("Valid cron expression"), 9 | Err(e) => println!("Invalid cron expression: {}", e), 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /screenpipe-core/examples/google.rs: -------------------------------------------------------------------------------- 1 | use anyhow::Result; 2 | #[cfg(feature = "llm")] 3 | use screenpipe_core::google::GoogleConfig; 4 | #[cfg(feature = "llm")] 5 | use screenpipe_core::google_stream_text; 6 | 7 | fn main() -> Result<()> { 8 | #[cfg(feature = "llm")] 9 | google_stream_text(GoogleConfig::default(), |text| { 10 | println!("{}", text); 11 | Ok(()) 12 | })?; 13 | Ok(()) 14 | } 15 | -------------------------------------------------------------------------------- /screenpipe-core/examples/mistral.rs: -------------------------------------------------------------------------------- 1 | use anyhow::Result; 2 | #[cfg(feature = "llm")] 3 | use screenpipe_core::mistral::MistralConfig; 4 | #[cfg(feature = "llm")] 5 | use screenpipe_core::stream_text; 6 | 7 | fn main() -> Result<()> { 8 | #[cfg(feature = "llm")] 9 | stream_text(MistralConfig::default(), |text| { 10 | println!("{}", text); 11 | Ok(()) 12 | })?; 13 | Ok(()) 14 | } 15 | -------------------------------------------------------------------------------- /screenpipe-core/src/actions.rs: -------------------------------------------------------------------------------- 1 | pub use screenpipe_actions::run; 2 | -------------------------------------------------------------------------------- /screenpipe-core/src/embedding/mod.rs: -------------------------------------------------------------------------------- 1 | pub mod model; 2 | 3 | -------------------------------------------------------------------------------- /screenpipe-db/src/lib.rs: -------------------------------------------------------------------------------- 1 | mod db; 2 | mod migration_worker; 3 | mod types; 4 | mod video_db; 5 | 6 | pub use db::DatabaseManager; 7 | pub use migration_worker::{ 8 | create_migration_worker, MigrationCommand, MigrationConfig, MigrationResponse, MigrationStatus, 9 | MigrationWorker, 10 | }; 11 | pub use types::*; 12 | -------------------------------------------------------------------------------- /screenpipe-db/src/migrations/20240716120002_snake_case.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE ocr_text RENAME COLUMN raw_data_output_from_OCR TO raw_data_output_from_ocr; 2 | DROP INDEX IF EXISTS idx_ocr_text_raw_data_output_from_OCR; 3 | CREATE INDEX IF NOT EXISTS idx_ocr_text_raw_data_output_from_ocr ON ocr_text(raw_data_output_from_ocr); 4 | -------------------------------------------------------------------------------- /screenpipe-db/src/migrations/20240716120003_add_timestampt_to_audio_chunks.sql: -------------------------------------------------------------------------------- 1 | -- Add migration script here 2 | -- Add timestamp column to audio_chunks table 3 | ALTER TABLE audio_chunks ADD COLUMN timestamp TIMESTAMP; 4 | 5 | -- Create an index on the new timestamp column 6 | CREATE INDEX idx_audio_chunks_timestamp ON audio_chunks(timestamp); -------------------------------------------------------------------------------- /screenpipe-db/src/migrations/20240716120004_app_name.sql: -------------------------------------------------------------------------------- 1 | -- Add migration script here 2 | -- Add app_name column to frames table 3 | ALTER TABLE frames ADD COLUMN app_name TEXT NOT NULL DEFAULT ''; 4 | ALTER TABLE ocr_text ADD COLUMN app_name TEXT NOT NULL DEFAULT ''; -------------------------------------------------------------------------------- /screenpipe-db/src/migrations/20240808120006_V2_add_transcription_engine.sql: -------------------------------------------------------------------------------- 1 | -- Add transcription_engine column to audio_transcriptions table 2 | ALTER TABLE audio_transcriptions ADD COLUMN transcription_engine TEXT NOT NULL DEFAULT 'Whisper'; 3 | 4 | -- Update existing rows to have 'Whisper' as the default value 5 | UPDATE audio_transcriptions SET transcription_engine = 'Whisper' WHERE transcription_engine IS NULL; -------------------------------------------------------------------------------- /screenpipe-db/src/migrations/20240808120008_V2_remove_fields.sql: -------------------------------------------------------------------------------- 1 | -- Drop all problematic indexes 2 | DROP INDEX IF EXISTS idx_ocr_text_raw_data_output_from_ocr; 3 | DROP INDEX IF EXISTS idx_ocr_text_Tesseract_TSV_object; 4 | DROP INDEX IF EXISTS idx_ocr_text_unique_text_lines_24hr; 5 | DROP INDEX IF EXISTS idx_ocr_text_unique_text_lines_1hr; 6 | DROP INDEX IF EXISTS idx_ocr_text_unique_text_lines_1m; 7 | DROP INDEX IF EXISTS idx_ocr_text_diff_vs_previous_frame_by_line; -------------------------------------------------------------------------------- /screenpipe-db/src/migrations/20240808120010_create_unique_index_on_chunked_text_index.sql: -------------------------------------------------------------------------------- 1 | -- Add migration script here 2 | CREATE UNIQUE INDEX IF NOT EXISTS idx_chunked_text_index_text ON chunked_text_index(text); 3 | -------------------------------------------------------------------------------- /screenpipe-db/src/migrations/20240811010614_add_fields_to_friend_wearable_requests.sql: -------------------------------------------------------------------------------- 1 | -- Add new columns to friend_wearable_requests table 2 | ALTER TABLE friend_wearable_requests ADD COLUMN filtered_text TEXT; 3 | ALTER TABLE friend_wearable_requests ADD COLUMN structured_response TEXT; 4 | ALTER TABLE friend_wearable_requests ADD COLUMN response_id TEXT; 5 | ALTER TABLE friend_wearable_requests ADD COLUMN response_created_at DATETIME; -------------------------------------------------------------------------------- /screenpipe-db/src/migrations/20240812202755_add_is_successful_to_friend_wearable_requests.sql: -------------------------------------------------------------------------------- 1 | -- Add migration script here 2 | -- Add up migration script here 3 | ALTER TABLE friend_wearable_requests ADD COLUMN is_successful BOOLEAN NOT NULL DEFAULT TRUE; -------------------------------------------------------------------------------- /screenpipe-db/src/migrations/20240815201445_add_window_name_to_ocr_text.sql: -------------------------------------------------------------------------------- 1 | -- Add migration script here 2 | -- Add window_name column to ocr_text table 3 | ALTER TABLE ocr_text ADD COLUMN window_name TEXT; -------------------------------------------------------------------------------- /screenpipe-db/src/migrations/20240815214646_remove_app_name_from_frames.sql: -------------------------------------------------------------------------------- 1 | -- Add migration script here 2 | ALTER TABLE frames DROP COLUMN app_name; -------------------------------------------------------------------------------- /screenpipe-db/src/migrations/20240815215557_add_focused_to_ocr_text.sql: -------------------------------------------------------------------------------- 1 | -- Add migration script here 2 | ALTER TABLE ocr_text ADD COLUMN focused BOOLEAN DEFAULT FALSE; -------------------------------------------------------------------------------- /screenpipe-db/src/migrations/20240917213422_add_device_info_to_audio_transcriptions.sql: -------------------------------------------------------------------------------- 1 | -- Add device and is_input_device columns to audio_transcriptions table 2 | ALTER TABLE audio_transcriptions ADD COLUMN device TEXT NOT NULL DEFAULT ''; 3 | ALTER TABLE audio_transcriptions ADD COLUMN is_input_device BOOLEAN NOT NULL DEFAULT TRUE; 4 | 5 | -- Create an index on the new device column 6 | CREATE INDEX idx_audio_transcriptions_device ON audio_transcriptions(device); -------------------------------------------------------------------------------- /screenpipe-db/src/migrations/20241024181218_add_device_name_to_chunks.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE video_chunks ADD COLUMN device_name TEXT NOT NULL DEFAULT ''; -------------------------------------------------------------------------------- /screenpipe-db/src/migrations/20241103222151_timeline_indexes.sql: -------------------------------------------------------------------------------- 1 | -- Add migration script here 2 | 3 | -- For the frames query optimization 4 | CREATE INDEX IF NOT EXISTS idx_frames_timestamp_offset_index ON frames(timestamp, offset_index); 5 | CREATE INDEX IF NOT EXISTS idx_ocr_text_frame_id ON ocr_text(frame_id); 6 | 7 | -- Composite index for ocr_text that might help with the LEFT JOIN 8 | CREATE INDEX IF NOT EXISTS idx_ocr_text_frame_app_window ON ocr_text(frame_id, app_name, window_name); 9 | 10 | -------------------------------------------------------------------------------- /screenpipe-db/src/migrations/20241127172038_create_speaker_id_col_final.sql: -------------------------------------------------------------------------------- 1 | CREATE TABLE IF NOT EXISTS audio_transcriptions_new AS 2 | SELECT *, NULL as speaker_id 3 | FROM audio_transcriptions 4 | WHERE 0; 5 | 6 | INSERT INTO audio_transcriptions_new 7 | SELECT *, NULL as speaker_id 8 | FROM audio_transcriptions; 9 | 10 | DROP TABLE audio_transcriptions; 11 | ALTER TABLE audio_transcriptions_new RENAME TO audio_transcriptions; -------------------------------------------------------------------------------- /screenpipe-db/src/migrations/20241127220428_add_hallucination_column.sql: -------------------------------------------------------------------------------- 1 | ALTER TABLE speakers ADD COLUMN hallucination BOOLEAN DEFAULT FALSE; -------------------------------------------------------------------------------- /screenpipe-db/src/migrations/20250117134500_create_ocr_text_embeddings.sql: -------------------------------------------------------------------------------- 1 | -- Create ocr_text_embeddings table 2 | CREATE TABLE IF NOT EXISTS ocr_text_embeddings ( 3 | id INTEGER PRIMARY KEY AUTOINCREMENT, 4 | frame_id INTEGER NOT NULL, 5 | embedding BLOB NOT NULL, -- Store embeddings as BLOB since they're float arrays 6 | created_at DATETIME DEFAULT CURRENT_TIMESTAMP, 7 | FOREIGN KEY (frame_id) REFERENCES frames(id) ON DELETE CASCADE 8 | ); -------------------------------------------------------------------------------- /screenpipe-db/src/migrations/20250131232938_add_device_name_to_frame.sql: -------------------------------------------------------------------------------- 1 | -- Add migration script here 2 | ALTER TABLE frames ADD COLUMN device_name TEXT NOT NULL DEFAULT ''; -------------------------------------------------------------------------------- /screenpipe-db/src/migrations/20250219212616_add-browser_url-column.sql: -------------------------------------------------------------------------------- 1 | -- Add migration script here 2 | ALTER TABLE frames ADD COLUMN browser_url TEXT DEFAULT NULL; 3 | -------------------------------------------------------------------------------- /screenpipe-events/.gitignore: -------------------------------------------------------------------------------- 1 | .cargo/ -------------------------------------------------------------------------------- /screenpipe-events/src/custom_events/mod.rs: -------------------------------------------------------------------------------- 1 | pub mod meetings; 2 | -------------------------------------------------------------------------------- /screenpipe-events/src/lib.rs: -------------------------------------------------------------------------------- 1 | mod events_manager; 2 | 3 | pub use events_manager::*; 4 | 5 | mod custom_events; 6 | 7 | pub use custom_events::meetings::*; 8 | -------------------------------------------------------------------------------- /screenpipe-integrations/screenpipe-mcp/.gitignore: -------------------------------------------------------------------------------- 1 | # Python cache files 2 | __pycache__/ 3 | *.py[cod] 4 | *$py.class 5 | 6 | # Distribution / packaging 7 | dist/ 8 | build/ 9 | *.egg-info/ 10 | 11 | # Virtual environments 12 | venv/ 13 | env/ 14 | .env/ 15 | .venv/ 16 | 17 | # IDE specific files 18 | .vscode/ 19 | .idea/ 20 | *.swp 21 | .DS_Store 22 | -------------------------------------------------------------------------------- /screenpipe-integrations/screenpipe-mcp/.python-version: -------------------------------------------------------------------------------- 1 | 3.11 2 | -------------------------------------------------------------------------------- /screenpipe-integrations/screenpipe-mcp/src/screenpipe_mcp/__init__.py: -------------------------------------------------------------------------------- 1 | from . import server 2 | import asyncio 3 | 4 | def main(): 5 | """Main entry point for the package.""" 6 | asyncio.run(server.run()) 7 | 8 | __all__ = ['main', 'server'] 9 | -------------------------------------------------------------------------------- /screenpipe-integrations/src/lib.rs: -------------------------------------------------------------------------------- 1 | pub mod unstructured_ocr; -------------------------------------------------------------------------------- /screenpipe-integrations/src/mod.rs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mediar-ai/screenpipe/cb8bbfe9fb6ace78de84ed3a732761f039e9cd2d/screenpipe-integrations/src/mod.rs -------------------------------------------------------------------------------- /screenpipe-js/ai-proxy/.editorconfig: -------------------------------------------------------------------------------- 1 | # http://editorconfig.org 2 | root = true 3 | 4 | [*] 5 | indent_style = tab 6 | end_of_line = lf 7 | charset = utf-8 8 | trim_trailing_whitespace = true 9 | insert_final_newline = true 10 | 11 | [*.yml] 12 | indent_style = space 13 | -------------------------------------------------------------------------------- /screenpipe-js/ai-proxy/.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "printWidth": 140, 3 | "singleQuote": true, 4 | "semi": true, 5 | "useTabs": true 6 | } 7 | -------------------------------------------------------------------------------- /screenpipe-js/ai-proxy/src/handlers/voice-ws.ts: -------------------------------------------------------------------------------- 1 | // TODO: implement -------------------------------------------------------------------------------- /screenpipe-js/ai-proxy/src/providers/base.ts: -------------------------------------------------------------------------------- 1 | import { Message, RequestBody } from '../types'; 2 | 3 | export interface AIProvider { 4 | supportsTools: boolean; 5 | supportsVision: boolean; 6 | supportsJson: boolean; 7 | 8 | createCompletion(body: RequestBody): Promise; 9 | createStreamingCompletion(body: RequestBody): Promise; 10 | formatMessages(messages: Message[]): any; 11 | formatResponse(response: any): any; 12 | listModels(): Promise<{ id: string; name: string; provider: string }[]>; 13 | } 14 | -------------------------------------------------------------------------------- /screenpipe-js/ai-proxy/src/services/deepgram.ts: -------------------------------------------------------------------------------- 1 | import { createClient, DeepgramClient } from '@deepgram/sdk'; 2 | import { Env } from '../types'; 3 | 4 | let deepgramClientInstance: DeepgramClient | null = null; 5 | 6 | export function getDeepgramClient(env: Env): DeepgramClient { 7 | if (!deepgramClientInstance) { 8 | deepgramClientInstance = createClient(env.DEEPGRAM_API_KEY); 9 | } 10 | return deepgramClientInstance; 11 | } -------------------------------------------------------------------------------- /screenpipe-js/ai-proxy/worker-configuration.d.ts: -------------------------------------------------------------------------------- 1 | // Generated by Wrangler by running `wrangler types` 2 | 3 | interface Env { 4 | MY_DURABLE_OBJECT: DurableObjectNamespace; 5 | } 6 | -------------------------------------------------------------------------------- /screenpipe-js/browser-sdk/.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | dist 3 | 4 | -------------------------------------------------------------------------------- /screenpipe-js/browser-sdk/README.md: -------------------------------------------------------------------------------- 1 | # screenpipe-js 2 | 3 | To install dependencies: 4 | 5 | ```bash 6 | bun install 7 | ``` 8 | 9 | To run: 10 | 11 | ```bash 12 | bun run ./dist/main.js 13 | ``` 14 | 15 | This project was created using `bun init` in bun v1.1.42. [Bun](https://bun.sh) is a fast all-in-one JavaScript runtime. 16 | -------------------------------------------------------------------------------- /screenpipe-js/browser-sdk/bun.lockb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mediar-ai/screenpipe/cb8bbfe9fb6ace78de84ed3a732761f039e9cd2d/screenpipe-js/browser-sdk/bun.lockb -------------------------------------------------------------------------------- /screenpipe-js/browser-sdk/tsup.config.ts: -------------------------------------------------------------------------------- 1 | import { defineConfig } from 'tsup'; 2 | 3 | export default defineConfig({ 4 | entry: ['src/main.ts'], 5 | format: ['esm', 'cjs'], 6 | dts: true, 7 | clean: true, 8 | treeshake: true, 9 | splitting: false, 10 | sourcemap: true, 11 | minify: true, 12 | }); 13 | 14 | -------------------------------------------------------------------------------- /screenpipe-js/cli/bun.lockb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mediar-ai/screenpipe/cb8bbfe9fb6ace78de84ed3a732761f039e9cd2d/screenpipe-js/cli/bun.lockb -------------------------------------------------------------------------------- /screenpipe-js/cli/src/commands/app/index.ts: -------------------------------------------------------------------------------- 1 | import { Command } from "commander"; 2 | import { createAppCommand } from "./create"; 3 | 4 | export const appCommands = new Command() 5 | .name("app") 6 | .description("create a new screenpipe application using default templates") 7 | 8 | appCommands.addCommand(createAppCommand) -------------------------------------------------------------------------------- /screenpipe-js/cli/src/commands/components/index.ts: -------------------------------------------------------------------------------- 1 | import { addComponentCommand } from "./commands/add/add"; 2 | import { registerComponentCommand } from "./commands/register"; 3 | import { Command } from "commander"; 4 | 5 | export const componentsCommands = new Command() 6 | .name("components") 7 | .description("easily add screenpipe components to your project") 8 | 9 | componentsCommands.addCommand(addComponentCommand) 10 | 11 | componentsCommands.addCommand(registerComponentCommand) -------------------------------------------------------------------------------- /screenpipe-js/cli/src/commands/index.ts: -------------------------------------------------------------------------------- 1 | export { loginCommand } from './login'; 2 | export { logoutCommand } from './logout'; 3 | export { pipeCommands } from "./pipe" 4 | export { appCommands } from './app'; 5 | export { componentsCommands } from "./components" -------------------------------------------------------------------------------- /screenpipe-js/cli/src/constants.ts: -------------------------------------------------------------------------------- 1 | export const API_BASE_URL = process.env.SC_API_BASE_URL || "https://screenpi.pe"; 2 | -------------------------------------------------------------------------------- /screenpipe-js/cli/src/types.ts: -------------------------------------------------------------------------------- 1 | export interface PipeOptions { 2 | name?: string; 3 | version?: string; 4 | } 5 | 6 | export interface CommandModule { 7 | command: string; 8 | description: string; 9 | action: (...args: any[]) => Promise; 10 | options?: Array<{ 11 | flags: string; 12 | description: string; 13 | required?: boolean; 14 | }>; 15 | } -------------------------------------------------------------------------------- /screenpipe-js/cli/tests/README.md: -------------------------------------------------------------------------------- 1 | # tests 2 | 3 | To install dependencies: 4 | 5 | ```bash 6 | bun install 7 | ``` 8 | 9 | To run: 10 | 11 | ```bash 12 | bun run index.ts 13 | ``` 14 | 15 | This project was created using `bun init` in bun v1.1.43. [Bun](https://bun.sh) is a fast all-in-one JavaScript runtime. 16 | -------------------------------------------------------------------------------- /screenpipe-js/cli/tests/bun.lockb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mediar-ai/screenpipe/cb8bbfe9fb6ace78de84ed3a732761f039e9cd2d/screenpipe-js/cli/tests/bun.lockb -------------------------------------------------------------------------------- /screenpipe-js/cli/tests/index.ts: -------------------------------------------------------------------------------- 1 | console.log("Hello via Bun!"); -------------------------------------------------------------------------------- /screenpipe-js/cli/tests/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "tests", 3 | "description": "Tests for the ScreenPipe CLI", 4 | "repository": { 5 | "type": "git", 6 | "url": "https://github.com/neo773/screenpipe-test.git" 7 | }, 8 | "module": "index.ts", 9 | "type": "module", 10 | "devDependencies": { 11 | "@types/bun": "latest" 12 | }, 13 | "peerDependencies": { 14 | "typescript": "^5.0.0" 15 | } 16 | } -------------------------------------------------------------------------------- /screenpipe-js/cli/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "ESNext", 4 | "module": "ESNext", 5 | "moduleResolution": "node", 6 | "types": ["bun-types"], 7 | "esModuleInterop": true, 8 | "resolveJsonModule": true, 9 | "strict": true, 10 | "skipLibCheck": true, 11 | "forceConsistentCasingInFileNames": true, 12 | "outDir": "cli/dist", 13 | "rootDir": "src" 14 | }, 15 | "include": ["src/**/*"], 16 | "exclude": ["node_modules", "cli/dist"] 17 | } 18 | -------------------------------------------------------------------------------- /screenpipe-js/examples/basic-transcription/README.md: -------------------------------------------------------------------------------- 1 | # basic-transcription 2 | 3 | To install dependencies: 4 | 5 | ```bash 6 | bun install 7 | ``` 8 | 9 | To run: 10 | 11 | ```bash 12 | bun run index.ts 13 | ``` 14 | 15 | This project was created using `bun init` in bun v1.1.38. [Bun](https://bun.sh) is a fast all-in-one JavaScript runtime. 16 | -------------------------------------------------------------------------------- /screenpipe-js/examples/basic-transcription/bun.lockb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mediar-ai/screenpipe/cb8bbfe9fb6ace78de84ed3a732761f039e9cd2d/screenpipe-js/examples/basic-transcription/bun.lockb -------------------------------------------------------------------------------- /screenpipe-js/examples/basic-transcription/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "basic-transcription", 3 | "module": "index.ts", 4 | "type": "module", 5 | "scripts": { 6 | "start": "bun run index.ts" 7 | }, 8 | "dependencies": { 9 | "@screenpipe/js": "workspace:*", 10 | "@screenpipe/browser": "workspace:*" 11 | }, 12 | "devDependencies": { 13 | "@types/bun": "latest" 14 | }, 15 | "peerDependencies": { 16 | "typescript": "^5.0.0" 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /screenpipe-js/examples/capture-main-feature/README.md: -------------------------------------------------------------------------------- 1 | # basic-transcription 2 | 3 | To install dependencies: 4 | 5 | ```bash 6 | bun install 7 | ``` 8 | 9 | To run: 10 | 11 | ```bash 12 | bun run index.ts 13 | ``` 14 | 15 | This project was created using `bun init` in bun v1.1.38. [Bun](https://bun.sh) is a fast all-in-one JavaScript runtime. 16 | -------------------------------------------------------------------------------- /screenpipe-js/examples/capture-main-feature/bun.lockb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mediar-ai/screenpipe/cb8bbfe9fb6ace78de84ed3a732761f039e9cd2d/screenpipe-js/examples/capture-main-feature/bun.lockb -------------------------------------------------------------------------------- /screenpipe-js/examples/capture-main-feature/index.ts: -------------------------------------------------------------------------------- 1 | import { pipe } from "@screenpipe/js"; 2 | 3 | async function startScreenRecorder() { 4 | console.log("let's send events when our main feature is used ..."); 5 | 6 | await pipe.captureEvent("less_useful_feature", { 7 | dog: "woof", 8 | }); 9 | 10 | await pipe.captureMainFeatureEvent("very_useful_feature", { 11 | cat: "meow", 12 | }); 13 | } 14 | 15 | startScreenRecorder().catch(console.error); 16 | -------------------------------------------------------------------------------- /screenpipe-js/examples/capture-main-feature/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "capture-main-feature", 3 | "module": "index.ts", 4 | "type": "module", 5 | "scripts": { 6 | "start": "bun run index.ts" 7 | }, 8 | "dependencies": { 9 | "@screenpipe/js": "workspace:*", 10 | "@screenpipe/browser": "workspace:*" 11 | }, 12 | "devDependencies": { 13 | "@types/bun": "latest" 14 | }, 15 | "peerDependencies": { 16 | "typescript": "^5.0.0" 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /screenpipe-js/examples/deduplicate/app/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mediar-ai/screenpipe/cb8bbfe9fb6ace78de84ed3a732761f039e9cd2d/screenpipe-js/examples/deduplicate/app/favicon.ico -------------------------------------------------------------------------------- /screenpipe-js/examples/deduplicate/app/globals.css: -------------------------------------------------------------------------------- 1 | @tailwind base; 2 | @tailwind components; 3 | @tailwind utilities; 4 | 5 | :root { 6 | --background: #ffffff; 7 | --foreground: #171717; 8 | } 9 | 10 | @media (prefers-color-scheme: dark) { 11 | :root { 12 | --background: #0a0a0a; 13 | --foreground: #ededed; 14 | } 15 | } 16 | 17 | body { 18 | color: var(--foreground); 19 | background: var(--background); 20 | font-family: Arial, Helvetica, sans-serif; 21 | } 22 | -------------------------------------------------------------------------------- /screenpipe-js/examples/deduplicate/eslint.config.mjs: -------------------------------------------------------------------------------- 1 | import { dirname } from "path"; 2 | import { fileURLToPath } from "url"; 3 | import { FlatCompat } from "@eslint/eslintrc"; 4 | 5 | const __filename = fileURLToPath(import.meta.url); 6 | const __dirname = dirname(__filename); 7 | 8 | const compat = new FlatCompat({ 9 | baseDirectory: __dirname, 10 | }); 11 | 12 | const eslintConfig = [ 13 | ...compat.extends("next/core-web-vitals", "next/typescript"), 14 | ]; 15 | 16 | export default eslintConfig; 17 | -------------------------------------------------------------------------------- /screenpipe-js/examples/deduplicate/next.config.ts: -------------------------------------------------------------------------------- 1 | /** @type {import('next').NextConfig} */ 2 | const nextConfig = { 3 | images: { 4 | dangerouslyAllowSVG: true, 5 | remotePatterns: [ 6 | { 7 | protocol: "https", 8 | hostname: "*", 9 | }, 10 | ], 11 | }, 12 | }; 13 | 14 | module.exports = nextConfig; 15 | -------------------------------------------------------------------------------- /screenpipe-js/examples/deduplicate/postcss.config.mjs: -------------------------------------------------------------------------------- 1 | /** @type {import('postcss-load-config').Config} */ 2 | const config = { 3 | plugins: { 4 | tailwindcss: {}, 5 | }, 6 | }; 7 | 8 | export default config; 9 | -------------------------------------------------------------------------------- /screenpipe-js/examples/deduplicate/public/file.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /screenpipe-js/examples/deduplicate/public/vercel.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /screenpipe-js/examples/deduplicate/public/window.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /screenpipe-js/examples/deduplicate/tailwind.config.ts: -------------------------------------------------------------------------------- 1 | import type { Config } from "tailwindcss"; 2 | 3 | export default { 4 | content: [ 5 | "./pages/**/*.{js,ts,jsx,tsx,mdx}", 6 | "./components/**/*.{js,ts,jsx,tsx,mdx}", 7 | "./app/**/*.{js,ts,jsx,tsx,mdx}", 8 | ], 9 | theme: { 10 | extend: { 11 | colors: { 12 | background: "var(--background)", 13 | foreground: "var(--foreground)", 14 | }, 15 | }, 16 | }, 17 | plugins: [], 18 | } satisfies Config; 19 | -------------------------------------------------------------------------------- /screenpipe-js/examples/query-screenpipe/README.md: -------------------------------------------------------------------------------- 1 | # basic-transcription 2 | 3 | To install dependencies: 4 | 5 | ```bash 6 | bun install 7 | ``` 8 | 9 | To run: 10 | 11 | ```bash 12 | bun run index.ts 13 | ``` 14 | 15 | This project was created using `bun init` in bun v1.1.38. [Bun](https://bun.sh) is a fast all-in-one JavaScript runtime. 16 | -------------------------------------------------------------------------------- /screenpipe-js/examples/query-screenpipe/bun.lockb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mediar-ai/screenpipe/cb8bbfe9fb6ace78de84ed3a732761f039e9cd2d/screenpipe-js/examples/query-screenpipe/bun.lockb -------------------------------------------------------------------------------- /screenpipe-js/examples/query-screenpipe/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "query-screenpipe", 3 | "module": "index.ts", 4 | "type": "module", 5 | "scripts": { 6 | "start": "bun run index.ts" 7 | }, 8 | "dependencies": { 9 | "@screenpipe/js": "workspace:*", 10 | "@screenpipe/browser": "workspace:*" 11 | }, 12 | "devDependencies": { 13 | "@types/bun": "latest" 14 | }, 15 | "peerDependencies": { 16 | "typescript": "^5.0.0" 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /screenpipe-js/examples/stream-screenshots/app/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mediar-ai/screenpipe/cb8bbfe9fb6ace78de84ed3a732761f039e9cd2d/screenpipe-js/examples/stream-screenshots/app/favicon.ico -------------------------------------------------------------------------------- /screenpipe-js/examples/stream-screenshots/app/globals.css: -------------------------------------------------------------------------------- 1 | @tailwind base; 2 | @tailwind components; 3 | @tailwind utilities; 4 | 5 | :root { 6 | --background: #ffffff; 7 | --foreground: #171717; 8 | } 9 | 10 | @media (prefers-color-scheme: dark) { 11 | :root { 12 | --background: #0a0a0a; 13 | --foreground: #ededed; 14 | } 15 | } 16 | 17 | body { 18 | color: var(--foreground); 19 | background: var(--background); 20 | font-family: Arial, Helvetica, sans-serif; 21 | } 22 | -------------------------------------------------------------------------------- /screenpipe-js/examples/stream-screenshots/eslint.config.mjs: -------------------------------------------------------------------------------- 1 | import { dirname } from "path"; 2 | import { fileURLToPath } from "url"; 3 | import { FlatCompat } from "@eslint/eslintrc"; 4 | 5 | const __filename = fileURLToPath(import.meta.url); 6 | const __dirname = dirname(__filename); 7 | 8 | const compat = new FlatCompat({ 9 | baseDirectory: __dirname, 10 | }); 11 | 12 | const eslintConfig = [ 13 | ...compat.extends("next/core-web-vitals", "next/typescript"), 14 | ]; 15 | 16 | export default eslintConfig; 17 | -------------------------------------------------------------------------------- /screenpipe-js/examples/stream-screenshots/next.config.ts: -------------------------------------------------------------------------------- 1 | /** @type {import('next').NextConfig} */ 2 | const nextConfig = { 3 | images: { 4 | dangerouslyAllowSVG: true, 5 | remotePatterns: [ 6 | { 7 | protocol: "https", 8 | hostname: "*", 9 | }, 10 | ], 11 | }, 12 | }; 13 | 14 | module.exports = nextConfig; 15 | -------------------------------------------------------------------------------- /screenpipe-js/examples/stream-screenshots/postcss.config.mjs: -------------------------------------------------------------------------------- 1 | /** @type {import('postcss-load-config').Config} */ 2 | const config = { 3 | plugins: { 4 | tailwindcss: {}, 5 | }, 6 | }; 7 | 8 | export default config; 9 | -------------------------------------------------------------------------------- /screenpipe-js/examples/stream-screenshots/public/file.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /screenpipe-js/examples/stream-screenshots/public/vercel.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /screenpipe-js/examples/stream-screenshots/public/window.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /screenpipe-js/examples/stream-screenshots/tailwind.config.ts: -------------------------------------------------------------------------------- 1 | import type { Config } from "tailwindcss"; 2 | 3 | export default { 4 | content: [ 5 | "./pages/**/*.{js,ts,jsx,tsx,mdx}", 6 | "./components/**/*.{js,ts,jsx,tsx,mdx}", 7 | "./app/**/*.{js,ts,jsx,tsx,mdx}", 8 | ], 9 | theme: { 10 | extend: { 11 | colors: { 12 | background: "var(--background)", 13 | foreground: "var(--foreground)", 14 | }, 15 | }, 16 | }, 17 | plugins: [], 18 | } satisfies Config; 19 | -------------------------------------------------------------------------------- /screenpipe-js/node-sdk/.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | dist 3 | 4 | -------------------------------------------------------------------------------- /screenpipe-js/node-sdk/README.md: -------------------------------------------------------------------------------- 1 | # test-screenpipe-node-sdk 2 | 3 | To install dependencies: 4 | 5 | ```bash 6 | bun install 7 | ``` 8 | 9 | To run: 10 | 11 | ```bash 12 | bun run ./dist/main.js 13 | ``` 14 | 15 | This project was created using `bun init` in bun v1.1.42. [Bun](https://bun.sh) is a fast all-in-one JavaScript runtime. 16 | -------------------------------------------------------------------------------- /screenpipe-js/node-sdk/bun.lockb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mediar-ai/screenpipe/cb8bbfe9fb6ace78de84ed3a732761f039e9cd2d/screenpipe-js/node-sdk/bun.lockb -------------------------------------------------------------------------------- /screenpipe-js/node-sdk/tsup.config.ts: -------------------------------------------------------------------------------- 1 | import { defineConfig } from 'tsup'; 2 | 3 | export default defineConfig({ 4 | entry: ['src/main.ts'], 5 | format: ['esm', 'cjs'], 6 | dts: true, 7 | clean: true, 8 | treeshake: true, 9 | splitting: false, 10 | sourcemap: true, 11 | minify: true, 12 | }); 13 | 14 | -------------------------------------------------------------------------------- /screenpipe-server/README.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | think of screenpipe as layers of abstraction capturing human activity: 4 | 5 | ![image](https://github.com/user-attachments/assets/93136194-0945-4eec-a9f1-f58eb9e440a4) 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /screenpipe-server/build.rs: -------------------------------------------------------------------------------- 1 | #[cfg(target_os = "windows")] 2 | fn link_onnx() { 3 | println!("cargo:rustc-link-search=native=../screenpipe-app-tauri/src-tauri/onnxruntime-win-x64-gpu-1.19.2/lib"); 4 | } 5 | 6 | fn main() { 7 | #[cfg(target_os = "windows")] 8 | { 9 | link_onnx(); 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /screenpipe-server/src/embedding/mod.rs: -------------------------------------------------------------------------------- 1 | pub mod embedding_endpoint; 2 | -------------------------------------------------------------------------------- /screenpipe-vision/bin/ui_monitor: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mediar-ai/screenpipe/cb8bbfe9fb6ace78de84ed3a732761f039e9cd2d/screenpipe-vision/bin/ui_monitor -------------------------------------------------------------------------------- /screenpipe-vision/bin/ui_monitor-aarch64-apple-darwin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mediar-ai/screenpipe/cb8bbfe9fb6ace78de84ed3a732761f039e9cd2d/screenpipe-vision/bin/ui_monitor-aarch64-apple-darwin -------------------------------------------------------------------------------- /screenpipe-vision/tests/Claude_prompt.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mediar-ai/screenpipe/cb8bbfe9fb6ace78de84ed3a732761f039e9cd2d/screenpipe-vision/tests/Claude_prompt.png -------------------------------------------------------------------------------- /screenpipe-vision/tests/testing_OCR.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mediar-ai/screenpipe/cb8bbfe9fb6ace78de84ed3a732761f039e9cd2d/screenpipe-vision/tests/testing_OCR.png -------------------------------------------------------------------------------- /screenpipe-vision/tests/testing_OCR_chinese.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mediar-ai/screenpipe/cb8bbfe9fb6ace78de84ed3a732761f039e9cd2d/screenpipe-vision/tests/testing_OCR_chinese.png --------------------------------------------------------------------------------