@serpdownloaders/circle-downloader 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,15 @@
1
+ {
2
+ "description": "This actor currently exposes a listing-first browser-extension surface. Runtime scraping input is not finalized yet, so the public input schema documents the current status rather than a finalized run contract.",
3
+ "properties": {
4
+ "listingNotice": {
5
+ "default": "No runtime input is required yet. See the README and product page for the current extension workflow.",
6
+ "description": "Optional informational field only. This actor currently serves as the public listing surface for the browser extension and does not yet expose a finalized runtime API contract.",
7
+ "editor": "textfield",
8
+ "title": "Listing notice",
9
+ "type": "string"
10
+ }
11
+ },
12
+ "schemaVersion": 1,
13
+ "title": "Circle Downloader input",
14
+ "type": "object"
15
+ }
@@ -0,0 +1,10 @@
1
+ {
2
+ "actorSpecification": 1,
3
+ "buildTag": "latest",
4
+ "description": "Circle Downloader preserves Circle community content, coaching lessons, and embedded video platforms before they expire or disappear. It can detect Circle-native uploads as well as common embedded providers and save authorized content as MP4 files for offline access.",
5
+ "input": "./INPUT_SCHEMA.json",
6
+ "name": "circle-downloader",
7
+ "readme": "../README.md",
8
+ "title": "Circle Downloader",
9
+ "version": "0.0"
10
+ }
@@ -0,0 +1,8 @@
1
+ github: [devinschumacher]
2
+ open_collective: devinschumacher
3
+ custom: [
4
+ "https://apps.serp.co/circle-downloader",
5
+ "https://serp.co/products/circle-downloader/reviews/",
6
+ "https://chromewebstore.google.com/detail/circle-downloader/afjjgeafaiahjlcgnflgeojbjobglblg",
7
+ "https://whop.com/serp-downloaders/circle-downloader/"
8
+ ]
@@ -0,0 +1,48 @@
1
+ name: call-comment-on-gist
2
+
3
+ on:
4
+ workflow_dispatch:
5
+ inputs:
6
+ gist_id:
7
+ description: 'The ID of the gist to comment on'
8
+ required: true
9
+ type: string
10
+ content_source:
11
+ description: 'Source of comment content'
12
+ required: true
13
+ type: choice
14
+ options:
15
+ - file
16
+ - release
17
+ - issue
18
+ - direct
19
+ file_path:
20
+ description: 'Path to file (when content_source is file)'
21
+ required: false
22
+ type: string
23
+ release_tag:
24
+ description: 'Release tag (when content_source is release)'
25
+ required: false
26
+ type: string
27
+ issue_number:
28
+ description: 'Issue number (when content_source is issue)'
29
+ required: false
30
+ type: string
31
+ comment_text:
32
+ description: 'Direct comment text (when content_source is direct)'
33
+ required: false
34
+ type: string
35
+
36
+ jobs:
37
+ comment:
38
+ uses: devinschumacher/workflows/.github/workflows/comment-on-gist.yml@main
39
+ with:
40
+ gist_id: ${{ github.event.inputs.gist_id }}
41
+ content_source: ${{ github.event.inputs.content_source }}
42
+ file_path: ${{ github.event.inputs.file_path }}
43
+ release_tag: ${{ github.event.inputs.release_tag }}
44
+ issue_number: ${{ github.event.inputs.issue_number }}
45
+ comment_text: ${{ github.event.inputs.comment_text }}
46
+ # IMPORTANT: Replace GH_PAT with your secret name
47
+ # This secret must exist in your repository
48
+ github_token: ${{ secrets.GH_PAT }}
@@ -0,0 +1,22 @@
1
+ name: call create gist
2
+
3
+ on:
4
+ workflow_dispatch:
5
+ inputs:
6
+ file_path:
7
+ description: 'Path to the markdown file (.md) to create as a gist'
8
+ required: true
9
+ type: string
10
+ jobs:
11
+ create:
12
+ permissions:
13
+ contents: write permissions:
14
+ contents: write create:
15
+ uses: devinschumacher/workflows/.github/workflows/create-gist.yml@main
16
+ with:
17
+ file_path: ${{ github.event.inputs.file_path }}
18
+ secrets:
19
+ # IMPORTANT: Replace GH_PAT with your secret name
20
+ # This secret must exist in your repository
21
+ # Go to Settings > Secrets and variables > Actions to add it
22
+ GH_PAT: ${{ secrets.GH_PAT }}
@@ -0,0 +1,60 @@
1
+ name: Generate README from JSON
2
+
3
+ on:
4
+ workflow_dispatch:
5
+ inputs:
6
+ json_path:
7
+ description: 'Path to the JSON data file'
8
+ required: false
9
+ type: string
10
+ default: 'data/readme.json'
11
+ json_branch:
12
+ description: 'Branch containing the JSON data file'
13
+ required: false
14
+ type: string
15
+ default: 'assets'
16
+ script_path:
17
+ description: 'Path to the README generator script'
18
+ required: false
19
+ type: string
20
+ default: 'scripts/generate-readme.js'
21
+ script_branch:
22
+ description: 'Branch containing the generator script'
23
+ required: false
24
+ type: string
25
+ default: 'assets'
26
+ output_filename:
27
+ description: 'Name of the generated README file'
28
+ required: false
29
+ type: string
30
+ default: 'README.md'
31
+ output_branch:
32
+ description: 'Branch to commit the generated README to'
33
+ required: false
34
+ type: string
35
+ default: 'main'
36
+ commit_message:
37
+ description: 'Commit message for the generated README'
38
+ required: false
39
+ type: string
40
+ default: 'Auto-generate README from data.json'
41
+
42
+ permissions:
43
+ contents: write
44
+ pull-requests: write
45
+ actions: read
46
+
47
+ jobs:
48
+ generate-readme:
49
+ uses: serpapps/.github/.github/workflows/generate-readme-from-json.yml@main
50
+ permissions:
51
+ contents: write
52
+ secrets: inherit
53
+ with:
54
+ json_path: ${{ github.event.inputs.json_path || 'data/readme.json' }}
55
+ json_branch: ${{ github.event.inputs.json_branch || 'assets' }}
56
+ script_path: ${{ github.event.inputs.script_path || 'scripts/generate-readme.js' }}
57
+ script_branch: ${{ github.event.inputs.script_branch || 'assets' }}
58
+ output_filename: ${{ github.event.inputs.output_filename || 'README.md' }}
59
+ output_branch: ${{ github.event.inputs.output_branch || 'main' }}
60
+ commit_message: ${{ github.event.inputs.commit_message || 'Auto-generate README from data.json' }}
@@ -0,0 +1,25 @@
1
+ name: call-update-gist
2
+
3
+ on:
4
+ workflow_dispatch:
5
+ inputs:
6
+ gist_id:
7
+ description: 'The ID of the gist to update'
8
+ required: true
9
+ type: string
10
+ file_path:
11
+ description: 'Path to the markdown file (.md) with updated content'
12
+ required: true
13
+ type: string
14
+
15
+ jobs:
16
+ update:
17
+ uses: devinschumacher/workflows/.github/workflows/update-gist.yml@main
18
+ with:
19
+ gist_id: ${{ github.event.inputs.gist_id }}
20
+ file_path: ${{ github.event.inputs.file_path }}
21
+ secrets:
22
+ # IMPORTANT: Replace GH_PAT with your secret name
23
+ # This secret must exist in your repository
24
+ # Go to Settings > Secrets and variables > Actions to add it
25
+ GH_PAT: ${{ secrets.GH_PAT }}
@@ -0,0 +1,51 @@
1
+ name: Submit packages to Packagist
2
+
3
+ on:
4
+ workflow_dispatch:
5
+ inputs:
6
+ repo_urls:
7
+ description: |
8
+ JSON array of GitHub repo URLs to submit, e.g.
9
+ ["https://github.com/org/repo1","https://github.com/org/repo2"]
10
+ Leave blank to use the default list in the test file.
11
+ required: false
12
+ type: string
13
+
14
+ jobs:
15
+ submit:
16
+ runs-on: ubuntu-latest
17
+
18
+ steps:
19
+ - name: Checkout
20
+ uses: actions/checkout@v4
21
+
22
+ - name: Setup Node.js
23
+ uses: actions/setup-node@v4
24
+ with:
25
+ node-version: "20"
26
+ cache: "npm"
27
+
28
+ - name: Install dependencies
29
+ run: npm ci
30
+
31
+ - name: Install Playwright browsers
32
+ run: npx playwright install chromium --with-deps
33
+
34
+ - name: Write Packagist session to file
35
+ run: echo '${{ secrets.PACKAGIST_COOKIES }}' > /tmp/packagist-auth.json
36
+
37
+ - name: Run Packagist submission tests
38
+ env:
39
+ PLAYWRIGHT_STORAGE_STATE: /tmp/packagist-auth.json
40
+ REPO_URLS_JSON: ${{ github.event.inputs.repo_urls }}
41
+ run: npm test
42
+
43
+ - name: Upload results artifact
44
+ if: always()
45
+ uses: actions/upload-artifact@v4
46
+ with:
47
+ name: packagist-submitted
48
+ path: |
49
+ packagist-submitted.json
50
+ packagist-results.json
51
+ if-no-files-found: ignore
package/LICENSE ADDED
@@ -0,0 +1,61 @@
1
+ PROPRIETARY SOFTWARE LICENSE
2
+
3
+ Copyright (c) 2024-2026 Brian Farley & Devin Schumacher / SERP APPS. All Rights Reserved.
4
+
5
+ NOTICE: This software and all associated source code, documentation, and
6
+ related files (collectively, the "Software") are the exclusive property of
7
+ Brian Farley & Devin Schumacher / SERP APPS.
8
+
9
+ PERMISSIONS AND RESTRICTIONS
10
+
11
+ 1. VIEWING ONLY
12
+ Permission is hereby granted to view the source code of this Software
13
+ solely for personal, non-commercial reference purposes.
14
+
15
+ 2. NO COPYING
16
+ You may not reproduce, duplicate, or copy any portion of this Software,
17
+ in whole or in part, in any form or by any means.
18
+
19
+ 3. NO MODIFICATION
20
+ You may not modify, adapt, alter, translate, decompile, disassemble,
21
+ reverse engineer, or create derivative works based on this Software.
22
+
23
+ 4. NO DISTRIBUTION
24
+ You may not distribute, sublicense, lease, sell, resell, transfer,
25
+ publish, or otherwise make available this Software or any portion
26
+ thereof to any third party.
27
+
28
+ 5. NO COMMERCIAL USE
29
+ You may not use this Software, or any portion thereof, for any
30
+ commercial purpose without prior written permission from the copyright
31
+ holder.
32
+
33
+ 6. NO FORKING
34
+ Forking this repository on GitHub or any other platform does not grant
35
+ you any rights beyond those explicitly stated in this license. Any fork
36
+ remains subject to all restrictions herein.
37
+
38
+ WRITTEN PERMISSION
39
+
40
+ Any use of this Software beyond what is expressly permitted in Section 1
41
+ above requires prior written permission from the copyright holder. Requests
42
+ may be directed to: help@serp.co
43
+
44
+ ENFORCEMENT
45
+
46
+ Unauthorized use, reproduction, modification, or distribution of this
47
+ Software may result in civil and criminal penalties. The copyright holder
48
+ reserves the right to pursue all available legal remedies for any violation
49
+ of this license.
50
+
51
+ DISCLAIMER
52
+
53
+ THIS SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
54
+ OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
55
+ FITNESS FOR A PARTICULAR PURPOSE, AND NONINFRINGEMENT. IN NO EVENT SHALL
56
+ THE COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES, OR OTHER LIABILITY,
57
+ WHETHER IN AN ACTION OF CONTRACT, TORT, OR OTHERWISE, ARISING FROM, OUT OF,
58
+ OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
59
+ SOFTWARE.
60
+
61
+ For licensing inquiries: help@serp.co
package/README.md ADDED
@@ -0,0 +1,216 @@
1
+ # Circle Downloader (Browser Extension)
2
+
3
+ > Browser extension that adds a download button to Circle.so community pages — detects videos from Circle's native player, Tella, Loom, Vimeo, YouTube, and Wistia, and saves them as MP4 for offline viewing.
4
+
5
+ A browser extension that downloads videos from Circle.so communities, Tella.tv recordings, Loom videos, and embedded content from YouTube, Vimeo, and Wistia — directly to your computer as MP4 files. No external software needed. 3 free downloads included.
6
+
7
+ - Save entire Circle classrooms and course content for unlimited offline access anytime, anywhere
8
+ - Protect your educational investment by downloading all materials before courses expire or disappear
9
+ - Create a personal library of video lectures, coaching calls, and resources that you own forever
10
+ - Never lose access to paid courses again — backup everything before platforms shut down or remove content
11
+
12
+ <a href="https://www.youtube.com/watch?v=_8XKKHj0eLs" target="_blank">
13
+ <img src="https://raw.githubusercontent.com/devinschumacher/uploads/refs/heads/main/images/how-to-download-circle-so-videos-for-free-hls-m3u8-streams.jpg" width="700px">
14
+ </a>
15
+
16
+ ## Links
17
+
18
+ - :rocket: Get it here: [Circle Downloader](https://serp.ly/circle-downloader)
19
+ - :new: Latest release: [GitHub Releases](https://github.com/serpapps/circle-downloader/releases/latest)
20
+ - :question: Help center: [SERP Help](https://help.serp.co/en/)
21
+ - :beetle: Report bugs: [GitHub Issues](https://github.com/serpapps/circle-downloader/issues)
22
+ - :bulb: Request features: [Feature Requests](https://github.com/serpapps/circle-downloader/issues)
23
+
24
+ ## Table of Contents
25
+
26
+ - [Why Circle Downloader](#why-circle-downloader)
27
+ - [Features](#features)
28
+ - [How It Works](#how-it-works)
29
+ - [Supported Platforms](#supported-platforms)
30
+ - [Videos](#videos)
31
+ - [Trial & Access](#trial--access)
32
+ - [Installation Instructions](#installation-instructions)
33
+ - [Downloading Member-Only Content](#downloading-member-only-content)
34
+ - [Frequently Asked Questions](#frequently-asked-questions)
35
+ - [Troubleshooting](#troubleshooting)
36
+ - [License](#license)
37
+ - [Related](#related)
38
+
39
+ ## Why Circle Downloader
40
+
41
+ Circle.so has no native download button. Tella recordings expire. Loom auto-deletes older videos on free plans. Course platforms embed videos from multiple sources with no unified download option.
42
+
43
+ Circle Downloader handles all of them in one extension — detecting videos across 7+ platforms and converting HLS/DASH streams to standard MP4 files directly in your browser. Open a lesson or post with a video, click the extension icon, pick your quality, and it saves as MP4.
44
+
45
+ ## Features
46
+
47
+ - **Multi-platform detection** — Circle.so, Tella.tv, Loom.com, YouTube, Vimeo, Wistia, and generic embedded players
48
+ - **Finds hidden embeds** — detects players buried inside Circle.so web components
49
+ - **Stream-to-MP4 conversion** — converts HLS/DASH streaming video to downloadable MP4 in-browser
50
+ - **Quality selector** — all available resolutions per platform with bitrate and estimated file size
51
+ - **Concurrent downloads** — up to 3 simultaneous downloads with real-time progress, speed, and cancel
52
+ - **Batch download queue** — add multiple lessons and process them automatically
53
+ - **YouTube URL display** — one-click yt-dlp copy for Mac and Windows
54
+ - **Right-click context menu** — quick downloads without opening the popup
55
+ - **Auto-organized storage** — saves to a Circle Downloader subfolder in Downloads
56
+ - **Desktop notifications** — alerts when downloads complete or fail
57
+ - **Original quality preserved** — no re-encoding, no watermarks, no quality loss
58
+ - **Privacy-first** — all processing on-device, zero tracking, no data sent to external servers
59
+ - **100% privacy-friendly** — no tracking or data collection
60
+ - 1-on-1 support via our community
61
+
62
+ ### Supported Platforms & Pages
63
+
64
+ | Content Type | Circle Native | YouTube | Vimeo | Wistia | Loom | Tella |
65
+ | --- | --- | --- | --- | --- | --- | --- |
66
+ | Course Lessons | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
67
+ | Community Posts | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
68
+ | Coaching Calls | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
69
+ | Member-Only Content | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
70
+
71
+ ### Supported Browsers
72
+
73
+ Chrome, Edge, Brave, Opera, Firefox, Whale, and Yandex — on Windows, macOS, and Linux.
74
+
75
+ ### Supported Formats
76
+
77
+ - **Input:** Circle.so, Tella.tv, Loom.com, YouTube, Vimeo, Wistia, and generic embedded players
78
+ - **Output:** MP4
79
+
80
+ ## How It Works
81
+
82
+ 1. **Install** — Add SERP Circle Downloader to your browser
83
+ 2. **Navigate** — Go to a Circle.so lesson, Tella recording, Loom video, or any page with embedded video
84
+ 3. **Play** — Start the video so the extension can detect the stream
85
+ 4. **Download** — Click the extension icon, pick your quality, and hit Download — saved as MP4
86
+
87
+ ## Videos
88
+
89
+ <a href="https://www.youtube.com/watch?v=_8XKKHj0eLs" target="_blank">
90
+ <img src="https://raw.githubusercontent.com/devinschumacher/uploads/refs/heads/main/images/how-to-download-circle-so-videos-for-free-hls-m3u8-streams.jpg" width="700px">
91
+ </a>
92
+
93
+ ## Trial & Access
94
+
95
+ - Includes **3 free downloads** after email sign-in (OTP verification)
96
+ - No credit card required for the free trial
97
+ - Unlimited downloads available with a license
98
+
99
+ ## Installation Instructions
100
+
101
+ Each release has its own specific installation instructions to make it easier to upgrade, or rollback, to different versions.
102
+ You can find the installation instructions for the specific version in the release:
103
+
104
+ - <https://github.com/serpapps/circle-downloader/releases>
105
+
106
+ ## Downloading Member-Only Content
107
+
108
+ The Circle Downloader extension respects your existing Circle login and permissions. If you can view a post in your community — whether it's public, member-only, or restricted — the extension can download it using your authentication.
109
+
110
+ **Key Points:**
111
+ - Your existing Circle login is used automatically in the background
112
+ - No separate passwords or credentials needed
113
+ - Works for private communities, restricted posts, and member-exclusive lessons
114
+ - Downloads happen entirely on your device with no data sent to third parties
115
+
116
+ ## Frequently Asked Questions
117
+
118
+ ### Q: What sites does this extension support?
119
+
120
+ A: Circle.so (and Circle.com), Tella.tv, Loom.com, YouTube.com, Vimeo.com, and Wistia.com. It also detects generic embedded video players on other sites.
121
+
122
+ ### Q: Does this work on native Circle videos?
123
+
124
+ A: Yes.
125
+
126
+ ### Q: Does this work on 2+ hour long videos?
127
+
128
+ A: Yes.
129
+
130
+ ### Q: Does this work on Loom/Tella videos embedded in Circle?
131
+
132
+ A: Yes.
133
+
134
+ ### Q: Can I download multiple videos at once?
135
+
136
+ A: Yes. The extension supports up to 3 concurrent downloads with individual progress tracking. Additional videos are added to an automatic queue.
137
+
138
+ ### Q: What quality options are available?
139
+
140
+ A: The extension detects all available resolutions from the source platform and lists them in the quality selector, sorted highest to lowest. Each option shows resolution, bitrate, and estimated file size.
141
+
142
+ ### Q: Does downloading preserve the original quality?
143
+
144
+ A: Yes. For adaptive streams (HLS/DASH), the extension downloads segments and merges them into a single MP4 without re-encoding. Direct MP4 uploads are saved at full quality instantly.
145
+
146
+ ### Q: Where are my downloads saved?
147
+
148
+ A: Videos automatically save to a Circle Downloader subfolder inside your browser's default Downloads directory. You can also set a custom default download location.
149
+
150
+ ### Q: Can I download member-only or private content?
151
+
152
+ A: Yes. If you can view the post in Circle, the extension can download it using your existing Circle login. Authentication happens automatically in the background.
153
+
154
+ ### Q: Why isn't the extension finding my video?
155
+
156
+ A: Press play on the video first. The extension needs the stream to start before detection works. If issues persist, refresh the page and try again.
157
+
158
+ ### Q: Is there a free trial?
159
+
160
+ A: Yes — 3 free downloads after email sign-in. No credit card required. Unlimited downloads available with a license.
161
+
162
+ ### Q: Is my data safe?
163
+
164
+ A: Yes. All video processing happens entirely in your browser. No video data is sent to external servers. Your Circle login credentials are never shared.
165
+
166
+ ## Troubleshooting
167
+
168
+ ### Videos Not Detecting
169
+
170
+ 1. Refresh the Circle post page
171
+ 2. Press play on the video first — the extension needs the stream active
172
+ 3. Make sure you're logged into your Circle community
173
+ 4. Try clearing browser cache and reloading
174
+ 5. Check that JavaScript is enabled in your browser
175
+ 6. Disable browser extensions that might interfere (ad blockers, etc.)
176
+
177
+ ### Download Failures
178
+
179
+ 1. Check your internet connection stability
180
+ 2. Try downloading in a lower quality
181
+ 3. Reduce concurrent downloads to 1
182
+ 4. Ensure you have sufficient disk space
183
+ 5. Try a different browser to rule out browser-specific issues
184
+
185
+ ### Authentication Issues
186
+
187
+ 1. Make sure you're logged into Circle in your browser
188
+ 2. Refresh the page and try again
189
+ 3. Check that cookies are enabled
190
+ 4. Log out and log back into Circle
191
+ 5. Clear browser cookies for circle.so and try again
192
+
193
+ ### File Playback Issues
194
+
195
+ 1. Try a different video player (VLC, Windows Media Player, QuickTime)
196
+ 2. Check file format — should be .mp4
197
+ 3. Ensure download completed fully (check file size)
198
+ 4. Update your video player to the latest version
199
+ 5. Try re-downloading the video
200
+
201
+ ## License
202
+
203
+ This repository is distributed under the proprietary SERP Apps license in the [LICENSE](LICENSE) file. Review that file before copying, modifying, or redistributing any part of this project.
204
+
205
+ ## About
206
+
207
+ Circle.so is a community platform for creators, educators, and businesses to host courses, coaching programs, and member communities. However, like many course platforms, they don't provide a way to download the videos that you (the actual users) pay for access to — or even offer an offline viewing option.
208
+
209
+ So we created a way for you to download your Circle.so community videos even if you're not technically inclined.
210
+
211
+ ---
212
+
213
+ ## Related
214
+
215
+ - [Circle Downloader](https://github.com/serpapps/circle-downloader)
216
+ - [How to download circle videos for free](https://gist.github.com/devinschumacher/5910965cbff1e563e120dbd2df06d4ba)
package/composer.json ADDED
@@ -0,0 +1,24 @@
1
+ {
2
+ "name": "serpapps/circle-downloader",
3
+ "type": "library",
4
+ "description": "Download Circle course videos to save offline for convenient viewing and content backup",
5
+ "keywords": [
6
+ "circle-downloader",
7
+ "circle-so-video-downloader",
8
+ "circle-video-downloader",
9
+ "browser-extension",
10
+ "course-video-downloader"
11
+ ],
12
+ "homepage": "https://github.com/serpapps/circle-downloader",
13
+ "license": "MIT",
14
+ "authors": [
15
+ {
16
+ "name": "SERP Apps",
17
+ "homepage": "https://github.com/serpapps",
18
+ "role": "Developer"
19
+ }
20
+ ],
21
+ "require": {
22
+ "php": ">=7.4"
23
+ }
24
+ }
@@ -0,0 +1,84 @@
1
+ {
2
+ "id": 12,
3
+ "created_at": "2025-01-23T00:00:00Z",
4
+ "seo_title": "Circle Downloader - Free Content Download Tool",
5
+ "seo_description": null,
6
+ "product_page_url": "https://store.serp.co/product-details/product/circle-downloader",
7
+ "purchase_url": "https://serp.ly/circle-downloader",
8
+ "store_product_id": null,
9
+ "name": "Circle Downloader",
10
+ "tagline": "Download Circle community content including posts, videos, and course materials",
11
+ "featured_image": "https://raw.githubusercontent.com/serpapps/circle-downloader/assets/images/circle-downloader.jpg",
12
+ "featured_image_gif": "https://raw.githubusercontent.com/serpapps/circle-downloader/assets/images/circle-downloader.gif",
13
+ "github_repo_url": "https://github.com/serpapps/circle-downloader",
14
+ "github_repo_tags": [
15
+ "circle-downloader"
16
+ ],
17
+ "github_gist_url": null,
18
+ "features": [
19
+ "Stream-to-file conversion",
20
+ "HD quality downloads",
21
+ "Batch download support",
22
+ "Resume interrupted downloads",
23
+ "No watermarks",
24
+ "Content extraction"
25
+ ],
26
+ "chrome_web_store_url": null,
27
+ "description": "Circle Downloader is a powerful tool that helps you download content from Circle instantly without ads or popups. Built with modern technologies, it provides a seamless experience for downloading and managing content.",
28
+ "product_video": null,
29
+ "related_videos": null,
30
+ "changelog": null,
31
+ "version_number": 1,
32
+ "updated_at": "2025-01-23T00:00:00Z",
33
+ "troubleshooting_instructions": [],
34
+ "installation_instructions": "1. Clone the repository: git clone https://github.com/serpapps/circle-downloader\n2. Install dependencies\n3. Configure settings\n4. Run the application",
35
+ "usage_instructions": [
36
+ "Open the application",
37
+ "Enter the URL of the content you want to download",
38
+ "Select your preferred quality and format",
39
+ "Click download to start the process",
40
+ "Files will be saved to your specified directory"
41
+ ],
42
+ "faqs": null,
43
+ "supported_operating_systems": [
44
+ "windows",
45
+ "macos",
46
+ "linux"
47
+ ],
48
+ "status": "live",
49
+ "technologies": [
50
+ "Python",
51
+ "JavaScript",
52
+ "Node.js",
53
+ "Automation"
54
+ ],
55
+ "serpco_product_page_link": "https://serp.co/products/circle-downloader/reviews/",
56
+ "serpai_product_page_link": "https://serp.ai/products/circle-downloader/reviews/",
57
+ "file_formats": null,
58
+ "categories": [
59
+ "community site"
60
+ ],
61
+ "extraction_targets": null,
62
+ "content_medium": null,
63
+ "discovery_source": null,
64
+ "related_articles": null,
65
+ "related_gists": null,
66
+ "funding_links_github": [
67
+ "devinschumacher"
68
+ ],
69
+ "funding_links_liberapay": [
70
+ "devinschumacher"
71
+ ],
72
+ "funding_links_opencollective": [
73
+ "devinschumacher"
74
+ ],
75
+ "funding_links_custom": [
76
+ "https://serpapps.github.io/circle-downloader",
77
+ "https://devinschumacher.com/circle-downloader",
78
+ "https://serp.co/products/circle-downloader/",
79
+ "https://github.com/sponsors/devinschumacher"
80
+ ],
81
+ "keywords": [
82
+ "circle downloader"
83
+ ]
84
+ }
File without changes
Binary file
Binary file
Binary file
Binary file
Binary file
@@ -0,0 +1,62 @@
1
+ <svg width="798" height="494" viewBox="0 0 798 494" fill="none" xmlns="http://www.w3.org/2000/svg">
2
+ <rect width="798" height="494" fill="#1f1f1f"/>
3
+ <rect x="0" y="0" width="798" height="36" fill="#263238"/>
4
+ <rect x="0" y="36" width="798" height="28" fill="#2f3a3d"/>
5
+ <rect x="0" y="64" width="798" height="72" fill="#d8d8d8"/>
6
+ <rect x="0" y="144" width="798" height="60" fill="#3c3a3a"/>
7
+ <rect x="0" y="212" width="798" height="62" fill="#2c2c2c"/>
8
+ <rect x="0" y="279" width="798" height="43" fill="#171717"/>
9
+ <rect x="0" y="323" width="798" height="43" fill="#191919"/>
10
+ <rect x="0" y="367" width="798" height="43" fill="#1b1b1b"/>
11
+ <rect x="0" y="411" width="798" height="83" fill="#242424"/>
12
+
13
+ <rect x="0" y="135" width="798" height="9" fill="#0e0e0e"/>
14
+ <rect x="0" y="204" width="798" height="8" fill="#0e0e0e"/>
15
+ <rect x="0" y="274" width="798" height="5" fill="#2d2d2d"/>
16
+
17
+ <rect x="-7" y="87" width="67" height="39" rx="19.5" fill="#c7d9df"/>
18
+ <text x="27" y="110" text-anchor="middle" fill="#14303A" font-family="Arial, sans-serif" font-size="14">Cancel</text>
19
+
20
+ <circle cx="19" cy="173" r="13" fill="#5b5b5b"/>
21
+ <rect x="31" y="165" width="142" height="15" rx="7.5" fill="#d8d8d8" fill-opacity="0.95"/>
22
+ <text x="31" y="178" fill="#efefef" font-family="Arial, sans-serif" font-size="16">Search mail</text>
23
+
24
+ <circle cx="30" cy="301" r="10" fill="#121212" stroke="#6a6a6a" stroke-width="1.5"/>
25
+ <path d="M26 301L29 304L34 297" stroke="#f5f5f5" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
26
+ <path d="M47 295L47 307" stroke="#f5f5f5" stroke-width="2" stroke-linecap="round"/>
27
+ <path d="M42 301H52" stroke="#f5f5f5" stroke-width="2" stroke-linecap="round"/>
28
+ <polygon points="79,294 86,301 79,308" fill="#9d9d9d"/>
29
+ <path d="M103 293C106 296 106 306 103 309" stroke="#8c8c8c" stroke-width="3" stroke-linecap="round"/>
30
+ <circle cx="120" cy="301" r="3" fill="#a5a5a5"/>
31
+ <circle cx="120" cy="292" r="3" fill="#a5a5a5"/>
32
+ <circle cx="120" cy="310" r="3" fill="#a5a5a5"/>
33
+
34
+ <circle cx="30" cy="345" r="10" fill="#121212" stroke="#6a6a6a" stroke-width="1.5"/>
35
+ <path d="M26 345L29 348L34 341" stroke="#f5f5f5" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
36
+ <path d="M47 339L47 351" stroke="#f5f5f5" stroke-width="2" stroke-linecap="round"/>
37
+ <polygon points="79,338 86,345 79,352" fill="#9d9d9d"/>
38
+ <text x="104" y="349" fill="#bcbcbc" font-family="Arial, sans-serif" font-size="14">noreply</text>
39
+ <text x="305" y="349" fill="#d7d7d7" font-family="Arial, sans-serif" font-size="15">Your SERP sign-in code - Enter this code to sign in:</text>
40
+ <text x="716" y="349" fill="#bdbdbd" font-family="Arial, sans-serif" font-size="15">895575</text>
41
+
42
+ <circle cx="30" cy="388" r="10" fill="#121212" stroke="#6a6a6a" stroke-width="1.5"/>
43
+ <path d="M26 388L29 391L34 384" stroke="#f5f5f5" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
44
+ <path d="M47 382L47 394" stroke="#f5f5f5" stroke-width="2" stroke-linecap="round"/>
45
+ <text x="57" y="392" fill="#bcbcbc" font-family="Arial, sans-serif" font-size="14">'Chrome Web Store'</text>
46
+ <text x="305" y="392" fill="#cfcfcf" font-family="Arial, sans-serif" font-size="15">Chrome Web Store: Rejection notification for Downloader for</text>
47
+
48
+ <circle cx="30" cy="432" r="10" fill="#121212" stroke="#6a6a6a" stroke-width="1.5"/>
49
+ <path d="M26 432L29 435L34 428" stroke="#f5f5f5" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
50
+ <path d="M47 426L47 438" stroke="#f5f5f5" stroke-width="2" stroke-linecap="round"/>
51
+ <text x="57" y="436" fill="#bcbcbc" font-family="Arial, sans-serif" font-size="14">Chrome Web Store</text>
52
+ <text x="305" y="436" fill="#cfcfcf" font-family="Arial, sans-serif" font-size="15">Chrome Web Store: Rejection notification for Downloader for</text>
53
+
54
+ <circle cx="30" cy="476" r="10" fill="#121212" stroke="#6a6a6a" stroke-width="1.5"/>
55
+ <path d="M26 476L29 479L34 472" stroke="#f5f5f5" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
56
+ <path d="M47 470L47 482" stroke="#f5f5f5" stroke-width="2" stroke-linecap="round"/>
57
+ <text x="57" y="480" fill="#bcbcbc" font-family="Arial, sans-serif" font-size="14">Adammataafa - SERP</text>
58
+ <text x="305" y="480" fill="#cfcfcf" font-family="Arial, sans-serif" font-size="15">Re: Sure no worries! Let us know if you have any other issues</text>
59
+
60
+ <line x1="583" y1="194" x2="742" y2="305" stroke="#ff1d1d" stroke-width="3"/>
61
+ <polygon points="742,305 726,301 734,289" fill="#ff1d1d"/>
62
+ </svg>
package/index.js ADDED
@@ -0,0 +1 @@
1
+ // placeholder
package/package.json ADDED
@@ -0,0 +1,28 @@
1
+ {
2
+ "name": "@serpdownloaders/circle-downloader",
3
+ "version": "1.0.0",
4
+ "description": "circle-downloader",
5
+ "keywords": ["circle-downloader", "automation"],
6
+ "homepage": "https://serp.ly/circle-downloader",
7
+ "repository": {
8
+ "type": "git",
9
+ "url": "https://github.com/serpapps/circle-downloader.git"
10
+ },
11
+ "author": {
12
+ "name": "Devin Schumacher",
13
+ "url": "https://devinschumacher.com"
14
+ },
15
+ "contributors": [
16
+ {"name":"Devin Schumacher","url":"https://devinschumacher.com"},
17
+ {"name":"Devin Schumacher","url":"https://youtube.com/@devinschumacher"},
18
+ {"name":"Devin Schumacher","url":"https://github.com/devinschumacher"},
19
+ {"name":"Devin Schumacher","url":"https://gist.github.com/devinschumacher"},
20
+ {"name":"SERP Apps","url":"https://github.com/serpapps"},
21
+ {"name":"SERP Downloaders","url":"https://github.com/serpdownloaders"}
22
+ ],
23
+ "license": "UNLICENSED",
24
+ "private": false,
25
+ "publishConfig": {
26
+ "access": "public"
27
+ }
28
+ }