From 23aced6007b6a0183cd126f37fc1cee8693501b1 Mon Sep 17 00:00:00 2001
From: Idris Gadi
Date: Tue, 27 Jan 2026 14:43:29 +0530
Subject: [PATCH 01/18] docs: move issue templates to YAML forms
Github has official support for forms
(https://docs.github.com/en/communities/using-templates-to-encourage-useful-issues-and-pull-requests/syntax-for-issue-forms)
forms are much easire and intuitive for people to fill out compared to
markdown, this makes creating new issues easy and more structured.
should also help with preventing random issues.
I am intentionally not adding a blank template for now, if required it
can be added later.
---
.github/ISSUE_TEMPLATE/bug_report.md | 38 ------
.github/ISSUE_TEMPLATE/bug_report.yml | 149 +++++++++++++++++++++
.github/ISSUE_TEMPLATE/feature_request.md | 20 ---
.github/ISSUE_TEMPLATE/feature_request.yml | 48 +++++++
4 files changed, 197 insertions(+), 58 deletions(-)
delete mode 100644 .github/ISSUE_TEMPLATE/bug_report.md
create mode 100644 .github/ISSUE_TEMPLATE/bug_report.yml
delete mode 100644 .github/ISSUE_TEMPLATE/feature_request.md
create mode 100644 .github/ISSUE_TEMPLATE/feature_request.yml
diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md
deleted file mode 100644
index dd84ea7..0000000
--- a/.github/ISSUE_TEMPLATE/bug_report.md
+++ /dev/null
@@ -1,38 +0,0 @@
----
-name: Bug report
-about: Create a report to help us improve
-title: ''
-labels: ''
-assignees: ''
-
----
-
-**Describe the bug**
-A clear and concise description of what the bug is.
-
-**To Reproduce**
-Steps to reproduce the behavior:
-1. Go to '...'
-2. Click on '....'
-3. Scroll down to '....'
-4. See error
-
-**Expected behavior**
-A clear and concise description of what you expected to happen.
-
-**Screenshots**
-If applicable, add screenshots to help explain your problem.
-
-**Desktop (please complete the following information):**
- - OS: [e.g. iOS]
- - Browser [e.g. chrome, safari]
- - Version [e.g. 22]
-
-**Smartphone (please complete the following information):**
- - Device: [e.g. iPhone6]
- - OS: [e.g. iOS8.1]
- - Browser [e.g. stock browser, safari]
- - Version [e.g. 22]
-
-**Additional context**
-Add any other context about the problem here.
diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml
new file mode 100644
index 0000000..1c91769
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/bug_report.yml
@@ -0,0 +1,149 @@
+name: Bug Report
+description: Create a report to help us improve
+title: "[Bug]: "
+labels: ["bug", "triage"]
+body:
+ - type: checkboxes
+ attributes:
+ label: Search existing issues
+ description: Please search to see if an issue already exists for the bug you encountered.
+ options:
+ - label: I have searched the existing issues
+ required: true
+
+ - type: textarea
+ id: bug-description
+ attributes:
+ label: Describe the bug
+ description: A clear and concise description of what the bug is.
+ placeholder: e.g., When I click submit, nothing happens...
+ validations:
+ required: true
+
+ - type: textarea
+ id: expected-behavior
+ attributes:
+ label: Expected behavior
+ description: A clear and concise description of what you expected to happen.
+ placeholder: e.g., The form should submit and show a success message
+ validations:
+ required: true
+
+ - type: textarea
+ id: steps-to-reproduce
+ attributes:
+ label: To Reproduce
+ description: Steps to reproduce the behavior.
+ placeholder: |
+ 1. Go to '...'
+ 2. Click on '....'
+ 3. Scroll down to '....'
+ 4. See error
+ validations:
+ required: false
+
+ - type: textarea
+ id: screenshots
+ attributes:
+ label: Screenshots
+ description: If applicable, add screenshots to help explain your problem.
+ placeholder: Drag and drop images here or paste them
+ validations:
+ required: false
+
+ - type: dropdown
+ id: os-type
+ attributes:
+ label: OS
+ description: Operating system
+ options:
+ - Windows
+ - macOS
+ - Linux
+ - iOS
+ - Android
+ - Other
+ validations:
+ required: false
+
+ - type: input
+ id: os-version
+ attributes:
+ label: OS Version
+ description: Please specify your OS version
+ placeholder: e.g., Windows 11, macOS Sonoma, Ubuntu 22.04
+ validations:
+ required: false
+
+ - type: input
+ id: os-other
+ attributes:
+ label: Other OS
+ description: If you selected "Other" for OS, please specify your operating system
+ placeholder: e.g., FreeBSD, Solaris
+ validations:
+ required: false
+
+ - type: dropdown
+ id: browser
+ attributes:
+ label: Browser
+ description: What browser are you using?
+ options:
+ - Chrome
+ - Firefox
+ - Safari
+ - Edge
+ - Other
+ validations:
+ required: false
+
+ - type: input
+ id: browser-version
+ attributes:
+ label: Browser Version
+ description: Please specify your browser version
+ placeholder: e.g., 120.0, 121.0.1
+ validations:
+ required: false
+
+ - type: input
+ id: browser-other
+ attributes:
+ label: Other Browser
+ description: If you selected "Other" for Browser, please specify your browser
+ placeholder: e.g., Brave, Vivaldi, Opera
+ validations:
+ required: false
+
+ - type: dropdown
+ id: device-type
+ attributes:
+ label: Device Type
+ description: Device category
+ options:
+ - Desktop
+ - Laptop
+ - Tablet
+ - Mobile
+ - Other
+ validations:
+ required: false
+
+ - type: input
+ id: device-other
+ attributes:
+ label: Other Device
+ description: If you selected "Other" for Device Type, please specify your device
+ placeholder: e.g., Smart TV, IoT device
+ validations:
+ required: false
+
+ - type: textarea
+ id: additional-context
+ attributes:
+ label: Additional context
+ description: Add any other context about the problem here.
+ placeholder: Links, references, or any additional information
+ validations:
+ required: false
diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md
deleted file mode 100644
index bbcbbe7..0000000
--- a/.github/ISSUE_TEMPLATE/feature_request.md
+++ /dev/null
@@ -1,20 +0,0 @@
----
-name: Feature request
-about: Suggest an idea for this project
-title: ''
-labels: ''
-assignees: ''
-
----
-
-**Is your feature request related to a problem? Please describe.**
-A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
-
-**Describe the solution you'd like**
-A clear and concise description of what you want to happen.
-
-**Describe alternatives you've considered**
-A clear and concise description of any alternative solutions or features you've considered.
-
-**Additional context**
-Add any other context or screenshots about the feature request here.
diff --git a/.github/ISSUE_TEMPLATE/feature_request.yml b/.github/ISSUE_TEMPLATE/feature_request.yml
new file mode 100644
index 0000000..752af95
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/feature_request.yml
@@ -0,0 +1,48 @@
+name: Feature Request
+description: Suggest an idea for this project
+title: "[Feature]: "
+labels: ["enhancement", "feature-request"]
+body:
+ - type: checkboxes
+ attributes:
+ label: Search existing issues
+ description: Please search to see if an issue already exists for this feature request.
+ options:
+ - label: I have searched the existing issues
+ required: true
+
+ - type: textarea
+ id: problem-description
+ attributes:
+ label: Is your feature request related to a problem?
+ description: A clear and concise description of what the problem is.
+ placeholder: e.g., I'm always frustrated when I have to...
+ validations:
+ required: true
+
+ - type: textarea
+ id: solution-description
+ attributes:
+ label: Describe the solution you'd like
+ description: A clear and concise description of what you want to happen.
+ placeholder: Describe the feature or change you're proposing
+ validations:
+ required: false
+
+ - type: textarea
+ id: alternatives
+ attributes:
+ label: Describe alternatives you've considered
+ description: A clear and concise description of any alternative solutions or features you've considered.
+ placeholder: Have you considered any workarounds or alternative approaches?
+ validations:
+ required: false
+
+ - type: textarea
+ id: additional-context
+ attributes:
+ label: Additional context
+ description: Add any other context or screenshots about the feature request here.
+ placeholder: Links, mockups, or any additional information
+ validations:
+ required: false
From 0d27f4fc3694dc347a3f5398c2ce6bc276adf7c4 Mon Sep 17 00:00:00 2001
From: Idris Gadi
Date: Tue, 27 Jan 2026 15:59:01 +0530
Subject: [PATCH 02/18] feat: add support for 16:10 aspect ratio
---
.../video-editor/timeline/TimelineEditor.tsx | 64 +++++++++----------
src/utils/aspectRatioUtils.ts | 7 +-
2 files changed, 37 insertions(+), 34 deletions(-)
diff --git a/src/components/video-editor/timeline/TimelineEditor.tsx b/src/components/video-editor/timeline/TimelineEditor.tsx
index e516cfc..4ea851b 100644
--- a/src/components/video-editor/timeline/TimelineEditor.tsx
+++ b/src/components/video-editor/timeline/TimelineEditor.tsx
@@ -155,13 +155,13 @@ function formatTimeLabel(milliseconds: number, intervalMs: number) {
return `${minutes}:${Math.floor(seconds).toString().padStart(2, "0")}`;
}
-function PlaybackCursor({
- currentTimeMs,
+function PlaybackCursor({
+ currentTimeMs,
videoDurationMs,
onSeek,
timelineRef,
-}: {
- currentTimeMs: number;
+}: {
+ currentTimeMs: number;
videoDurationMs: number;
onSeek?: (time: number) => void;
timelineRef: React.RefObject;
@@ -175,14 +175,14 @@ function PlaybackCursor({
const handleMouseMove = (e: MouseEvent) => {
if (!timelineRef.current || !onSeek) return;
-
+
const rect = timelineRef.current.getBoundingClientRect();
const clickX = e.clientX - rect.left - sidebarWidth;
-
+
// Allow dragging outside to 0 or max, but clamp the value
const relativeMs = pixelsToValue(clickX);
const absoluteMs = Math.max(0, Math.min(range.start + relativeMs, videoDurationMs));
-
+
onSeek(absoluteMs / 1000);
};
@@ -207,7 +207,7 @@ function PlaybackCursor({
}
const clampedTime = Math.min(currentTimeMs, videoDurationMs);
-
+
if (clampedTime < range.start || clampedTime > range.end) {
return null;
}
@@ -276,7 +276,7 @@ function TimelineAxis({
if (visibleStart <= maxTime) {
markerTimes.add(Math.round(visibleStart));
}
-
+
if (videoDurationMs > 0) {
markerTimes.add(Math.round(videoDurationMs));
}
@@ -288,7 +288,7 @@ function TimelineAxis({
// Generate minor ticks (4 ticks between major intervals)
const minorTicks = [];
const minorInterval = intervalMs / 5;
-
+
for (let time = firstMarker; time <= maxTime; time += minorInterval) {
if (time >= visibleStart && time <= visibleEnd) {
// Skip if it's close to a major marker
@@ -299,12 +299,12 @@ function TimelineAxis({
}
}
- return {
+ return {
markers: sorted.map((time) => ({
time,
label: formatTimeLabel(time, intervalMs),
- })),
- minorTicks
+ })),
+ minorTicks
};
}, [intervalMs, range.end, range.start, videoDurationMs]);
@@ -395,7 +395,7 @@ function Timeline({
const handleTimelineClick = useCallback((e: React.MouseEvent) => {
if (!onSeek || videoDurationMs <= 0) return;
-
+
// Only clear selection if clicking on empty space (not on items)
// This is handled by event propagation - items stop propagation
onSelectZoom?.(null);
@@ -404,13 +404,13 @@ function Timeline({
const rect = e.currentTarget.getBoundingClientRect();
const clickX = e.clientX - rect.left - sidebarWidth;
-
+
if (clickX < 0) return;
-
+
const relativeMs = pixelsToValue(clickX);
const absoluteMs = Math.max(0, Math.min(range.start + relativeMs, videoDurationMs));
const timeInSeconds = absoluteMs / 1000;
-
+
onSeek(timeInSeconds);
}, [onSeek, onSelectZoom, onSelectTrim, onSelectAnnotation, videoDurationMs, sidebarWidth, range.start, pixelsToValue]);
@@ -427,13 +427,13 @@ function Timeline({
>
-
-
+
{zoomItems.map((item) => (
- 0) {
const currentTimeMs = Math.round(currentTime * 1000);
const overlapping = annotationRegions
.filter(a => currentTimeMs >= a.startMs && currentTimeMs <= a.endMs)
.sort((a, b) => a.zIndex - b.zIndex); // Sort by z-index
-
+
if (overlapping.length > 0) {
- e.preventDefault();
-
+ e.preventDefault();
+
if (!selectedAnnotationId || !overlapping.some(a => a.id === selectedAnnotationId)) {
onSelectAnnotation?.(overlapping[0].id);
} else {
// Cycle to next annotation
const currentIndex = overlapping.findIndex(a => a.id === selectedAnnotationId);
- const nextIndex = e.shiftKey
+ const nextIndex = e.shiftKey
? (currentIndex - 1 + overlapping.length) % overlapping.length // Shift+Tab = backward
: (currentIndex + 1) % overlapping.length; // Tab = forward
onSelectAnnotation?.(overlapping[nextIndex].id);
}
}
- }
+ }
if ((e.key === 'd' || e.key === 'D') && (e.ctrlKey || e.metaKey)) {
if (selectedKeyframeId) {
deleteSelectedKeyframe();
@@ -803,7 +803,7 @@ export default function TimelineEditor({
const annotations: TimelineRenderItem[] = annotationRegions.map((region) => {
let label: string;
-
+
if (region.type === 'text') {
// Show text preview
const preview = region.content.trim() || 'Empty text';
@@ -813,7 +813,7 @@ export default function TimelineEditor({
} else {
label = 'Annotation';
}
-
+
return {
id: region.id,
rowId: ANNOTATION_ROW_ID,
@@ -896,7 +896,7 @@ export default function TimelineEditor({
- {(['16:9', '9:16', '1:1', '4:3', '4:5'] as AspectRatio[]).map((ratio) => (
+ {(['16:9', '9:16', '1:1', '4:3', '4:5', '16:10', "10:16"] as AspectRatio[]).map((ratio) => (
onAspectRatioChange(ratio)}
@@ -918,7 +918,7 @@ export default function TimelineEditor({
Pan
- {shortcuts.zoom}
+ {shortcuts.zoom}
Zoom
diff --git a/src/utils/aspectRatioUtils.ts b/src/utils/aspectRatioUtils.ts
index aaad804..f00167c 100644
--- a/src/utils/aspectRatioUtils.ts
+++ b/src/utils/aspectRatioUtils.ts
@@ -1,4 +1,4 @@
-export type AspectRatio = '16:9' | '9:16' | '1:1' | '4:3' | '4:5';
+export type AspectRatio = '16:9' | '9:16' | '1:1' | '4:3' | '4:5' | '16:10' | '10:16';
export function getAspectRatioValue(aspectRatio: AspectRatio): number {
switch (aspectRatio) {
@@ -7,6 +7,9 @@ export function getAspectRatioValue(aspectRatio: AspectRatio): number {
case '1:1': return 1;
case '4:3': return 4 / 3;
case '4:5': return 4 / 5;
+ case '16:10': return 16 / 10;
+ case '10:16': return 10 / 16;
+ default: return 1;
}
}
@@ -28,4 +31,4 @@ export function getAspectRatioLabel(aspectRatio: AspectRatio): string {
export function formatAspectRatioForCSS(aspectRatio: AspectRatio): string {
return aspectRatio.replace(':', '/');
-}
\ No newline at end of file
+}
From 95b4df0ae473ef6f98bf950ff6f9b025011f6a7b Mon Sep 17 00:00:00 2001
From: Idris Gadi
Date: Tue, 27 Jan 2026 16:23:45 +0530
Subject: [PATCH 03/18] fix: types
---
.../video-editor/timeline/TimelineEditor.tsx | 4 ++--
src/utils/aspectRatioUtils.ts | 15 +++++++++++++--
2 files changed, 15 insertions(+), 4 deletions(-)
diff --git a/src/components/video-editor/timeline/TimelineEditor.tsx b/src/components/video-editor/timeline/TimelineEditor.tsx
index 4ea851b..bdf9558 100644
--- a/src/components/video-editor/timeline/TimelineEditor.tsx
+++ b/src/components/video-editor/timeline/TimelineEditor.tsx
@@ -17,7 +17,7 @@ import {
DropdownMenuItem,
DropdownMenuTrigger,
} from "@/components/ui/dropdown-menu";
-import { type AspectRatio, getAspectRatioLabel } from "@/utils/aspectRatioUtils";
+import { type AspectRatio, getAspectRatioLabel, ASPECT_RATIOS } from "@/utils/aspectRatioUtils";
import { formatShortcut } from "@/utils/platformUtils";
import { TutorialHelp } from "../TutorialHelp";
@@ -896,7 +896,7 @@ export default function TimelineEditor({
- {(['16:9', '9:16', '1:1', '4:3', '4:5', '16:10', "10:16"] as AspectRatio[]).map((ratio) => (
+ {ASPECT_RATIOS.map((ratio) => (
onAspectRatioChange(ratio)}
diff --git a/src/utils/aspectRatioUtils.ts b/src/utils/aspectRatioUtils.ts
index f00167c..1aa3900 100644
--- a/src/utils/aspectRatioUtils.ts
+++ b/src/utils/aspectRatioUtils.ts
@@ -1,5 +1,12 @@
-export type AspectRatio = '16:9' | '9:16' | '1:1' | '4:3' | '4:5' | '16:10' | '10:16';
+export const ASPECT_RATIOS = ['16:9', '9:16', '1:1', '4:3', '4:5', '16:10', '10:16'] as const;
+export type AspectRatio = typeof ASPECT_RATIOS[number];
+
+/**
+ * Returns the numeric value of an aspect ratio.
+ * Uses exhaustive type checking to ensure all AspectRatio cases are handled.
+ * If TypeScript errors here, a new ratio was added to the type but not handled.
+ */
export function getAspectRatioValue(aspectRatio: AspectRatio): number {
switch (aspectRatio) {
case '16:9': return 16 / 9;
@@ -9,7 +16,11 @@ export function getAspectRatioValue(aspectRatio: AspectRatio): number {
case '4:5': return 4 / 5;
case '16:10': return 16 / 10;
case '10:16': return 10 / 16;
- default: return 1;
+ default: {
+ // Ensures all cases are handled - TypeScript errors if missing
+ const _exhaustiveCheck: never = aspectRatio;
+ return _exhaustiveCheck;
+ }
}
}
From cef987cd33fa1629b88773ae270079d0787cdf04 Mon Sep 17 00:00:00 2001
From: Idris Gadi
Date: Tue, 27 Jan 2026 20:45:53 +0530
Subject: [PATCH 04/18] docs: add the beta warning at top and move assests to
public
moving the assests to public prevents root from getting populated with
alot of files
---
README.md | 178 +++++++++++++---------------
openscreen.png | Bin 873590 -> 0 bytes
preview.png => public/preview.png | Bin
preview2.png => public/preview2.png | Bin
preview3.png => public/preview3.png | Bin
preview4.png => public/preview4.png | Bin
6 files changed, 84 insertions(+), 94 deletions(-)
delete mode 100644 openscreen.png
rename preview.png => public/preview.png (100%)
rename preview2.png => public/preview2.png (100%)
rename preview3.png => public/preview3.png (100%)
rename preview4.png => public/preview4.png (100%)
diff --git a/README.md b/README.md
index 1d754f7..6ae9477 100644
--- a/README.md
+++ b/README.md
@@ -1,94 +1,84 @@
-
-
-
-
-
-
-
-
-
-# OpenScreen
-
-OpenScreen is your free, open-source alternative to Screen Studio (sort of).
-
-
-
-If you don't want to pay $29/month for Screen Studio but want a much simpler version that does what most people seem to need, making beautiful product demos and walkthroughs, here's a free-to-use app for you. OpenScreen does not offer all Screen Studio features, but covers the basics well!
-
-Screen Studio is an awesome product and this is definitely not a 1:1 clone. OpenScreen is a much simpler take, just the basics for folks who want control and don't want to pay. If you need all the fancy features, your best bet is to support Screen Studio (they really do a great job, haha). But if you just want something free (no gotchas) and open, this project does the job!
-
-OpenScreen is 100% free for personal and commercial use. Use it, modify it, distribute it. (Just be cool 😁 and give a shoutout if you feel like it !)
-
-
-
-**⚠️ DISCLAIMER: This is very much in beta and might be buggy here and there (but hope you have a good experience!).**
-
-
-
-
-
-
-
-
-
-
-
-## Core Features
-- Record your whole screen or specific apps
-- Add manual zooms (customizable depth levels)
-- Customize the duration and position of zooms however you please
-- Crop video recordings to hide parts
-- Choose between wallpapers, solid colors, gradients or your own picture for your background
-- Motion blur for smoother pan and zoom effects
-- Add annotations (text, arrows, images)
-- Trim sections of the clip
-- Export in different aspect ratios and resolutions
-
-## Installation
-
-Download the latest installer for your platform from the [GitHub Releases](https://github.com/siddharthvaddem/openscreen/releases) page.
-
-### macOS
-
-If you encounter issues with macOS Gatekeeper blocking the app (since it does not come with a developer certificate), you can bypass this by running the following command in your terminal after installation:
-
-```bash
-xattr -rd com.apple.quarantine /Applications/Openscreen.app
-```
-
-After running this command, proceed to **System Preferences > Security & Privacy** to grant the necessary permissions for "screen recording" and "accessibility". Once permissions are granted, you can launch the app.
-
-### Linux
-
-Download the `.AppImage` file from the releases page. Make it executable and run:
-
-```bash
-chmod +x Openscreen-Linux-*.AppImage
-./Openscreen-Linux-*.AppImage
-```
-
-You may need to grant screen recording permissions depending on your desktop environment.
-
-## Built with
-- Electron
-- React
-- TypeScript
-- Vite
-- PixiJS
-- dnd-timeline
-
----
-
-
-_I'm new to open source, idk what I'm doing lol. If something is wrong please raise an issue 🙏_
-
-## Contributing
-
-Contributions are welcome! If you’d like to help out or see what’s currently being worked on, take a look at the open issues and the [project roadmap](https://github.com/users/siddharthvaddem/projects/3) to understand the current direction of the project and find ways to contribute.
-
-
-## License
-
-
-This project is licensed under the [MIT License](./LICENSE). By using this software, you agree that the authors are not liable for any issues, damages, or claims arising from its use.
-
+> [!WARNING]
+> This is very much in beta and might be buggy here and there (but hope you have a good experience!).
+
+
+
+
+
+
+
+
+
+
+# OpenScreen
+
+OpenScreen is your free, open-source alternative to Screen Studio (sort of).
+
+If you don't want to pay $29/month for Screen Studio but want a much simpler version that does what most people seem to need, making beautiful product demos and walkthroughs, here's a free-to-use app for you. OpenScreen does not offer all Screen Studio features, but covers the basics well!
+
+Screen Studio is an awesome product and this is definitely not a 1:1 clone. OpenScreen is a much simpler take, just the basics for folks who want control and don't want to pay. If you need all the fancy features, your best bet is to support Screen Studio (they really do a great job, haha). But if you just want something free (no gotchas) and open, this project does the job!
+
+OpenScreen is 100% free for personal and commercial use. Use it, modify it, distribute it. (Just be cool 😁 and give a shoutout if you feel like it !)
+
+
+
+
+
+
+
+
+## Core Features
+- Record your whole screen or specific apps
+- Add manual zooms (customizable depth levels)
+- Customize the duration and position of zooms however you please
+- Crop video recordings to hide parts
+- Choose between wallpapers, solid colors, gradients or your own picture for your background
+- Motion blur for smoother pan and zoom effects
+- Add annotations (text, arrows, images)
+- Trim sections of the clip
+- Export in different aspect ratios and resolutions
+
+## Installation
+
+Download the latest installer for your platform from the [GitHub Releases](https://github.com/siddharthvaddem/openscreen/releases) page.
+
+### macOS
+
+If you encounter issues with macOS Gatekeeper blocking the app (since it does not come with a developer certificate), you can bypass this by running the following command in your terminal after installation:
+
+```bash
+xattr -rd com.apple.quarantine /Applications/Openscreen.app
+```
+
+After running this command, proceed to **System Preferences > Security & Privacy** to grant the necessary permissions for "screen recording" and "accessibility". Once permissions are granted, you can launch the app.
+
+### Linux
+
+Download the `.AppImage` file from the releases page. Make it executable and run:
+
+```bash
+chmod +x Openscreen-Linux-*.AppImage
+./Openscreen-Linux-*.AppImage
+```
+
+You may need to grant screen recording permissions depending on your desktop environment.
+
+## Built with
+- Electron
+- React
+- TypeScript
+- Vite
+- PixiJS
+- dnd-timeline
+
+---
+
+_I'm new to open source, idk what I'm doing lol. If something is wrong please raise an issue 🙏_
+
+## Contributing
+
+Contributions are welcome! If you’d like to help out or see what’s currently being worked on, take a look at the open issues and the [project roadmap](https://github.com/users/siddharthvaddem/projects/3) to understand the current direction of the project and find ways to contribute.
+
+## License
+
+This project is licensed under the [MIT License](./LICENSE). By using this software, you agree that the authors are not liable for any issues, damages, or claims arising from its use.
diff --git a/openscreen.png b/openscreen.png
deleted file mode 100644
index 96ab2ae8125175464d582072056bd3d694e53d86..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 873590
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