Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
81 changes: 81 additions & 0 deletions NOTICE
Original file line number Diff line number Diff line change
@@ -0,0 +1,81 @@
NOTICE
======

Vooglaadija
Copyright (c) 2024-2026 Vooglaadija Contributors

This program is free software: you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by the Free
Software Foundation, either version 3 of the License, or (at your option)
any later version.

This program is distributed in the hope that it will be useful, but WITHOUT
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License along with
this program. If not, see <https://www.gnu.org/licenses/>.

Warranty Disclaimer and Liability Limitation
--------------------------------------------
This software is provided AS IS, AS AVAILABLE, with NO WARRANTIES.
Per GPLv3 Section 15, this program is provided without warranty of any kind.
Per GPLv3 Section 16, no liability is accepted for any damages arising
from the use of this software.

Third-Party Components
----------------------

This software includes the following third-party components:

1. yt-dlp
- License: Unlicense (public domain)
- URL: https://github.com/yt-dlp/yt-dlp

2. FastAPI
- Copyright (c) 2018-2026 Sebastián Ramírez
- License: MIT
- URL: https://github.com/tiangolo/fastapi

3. SQLAlchemy
- Copyright (c) 2007-2026 SQLAlchemy authors
- License: MIT
- URL: https://github.com/sqlalchemy/sqlalchemy

4. Pydantic
- Copyright (c) 2018-2026 Samuel Colvin and contributors
- License: MIT
- URL: https://github.com/pydantic/pydantic

5. Redis (python)
- Copyright (c) 2023-2026 Redis contributors
- License: MIT
- URL: https://github.com/redis/redis-py

6. HTMX
- Copyright (c) 2023-2026 Big Sky Software
- License: 0BSD
- URL: https://github.com/bigskysoftware/htmx

7. Tailwind CSS
- Copyright (c) 2023-2026 Tailwind Labs
- License: MIT
- URL: https://github.com/tailwindlabs/tailwindcss

For full license texts of third-party components, please refer to their
respective repositories.

Nature of Vooglaadija
---------------------
Vooglaadija does not host, re-upload, or redistribute any copyrighted content.
It is a passive download tool — the user initiates all downloads. The service
operator does not select, modify, or control the content being downloaded.

This tool has substantial non-infringing uses including:
- Downloading content you own or have created
- Downloading content with explicit permission from the copyright holder
- Downloading Creative Commons or public domain content
- Archival purposes with creator's consent

Users are solely responsible for ensuring they have the right to download
any content before using this tool. See Terms of Service for details.
17 changes: 17 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,23 @@ Vooglaadija is an async REST API for extracting media from video URLs. It uses [

The system includes JWT authentication, CSRF protection, rate limiting, structured logging, Prometheus metrics, OpenTelemetry tracing, and Sentry error tracking. A server-rendered web UI built with HTMX and Tailwind CSS provides job management with real-time status updates via Server-Sent Events.

### Legitimate Use Cases

Vooglaadija is a tool. Examples of legitimate uses include:

- Downloading your own YouTube content
- Archival or backup of content you have created or have explicit permission to download
- Downloading Creative Commons or public domain content
- Offline access to content you are authorized to view

### Legal Disclaimer

**You are responsible for ensuring you have the right to download any content before using Vooglaadija.** Downloading copyrighted content without authorization may violate YouTube's Terms of Service and applicable copyright law, including the DMCA §1201 anti-circumvention provisions in the US.

Vooglaadija is open-source software provided under GPLv3. The operators of this service do not endorse or encourage copyright infringement. This tool has substantial non-infringing uses and is designed for lawful purposes only. Users should consult qualified legal counsel if unsure about the legality of their use case.

See the [Terms of Service](/web/terms) for full details.

---

## Features
Expand Down
10 changes: 10 additions & 0 deletions app/api/routes/web.py
Original file line number Diff line number Diff line change
Expand Up @@ -416,6 +416,16 @@ async def logout(request: Request):
return redirect


@router.get("/terms")
async def terms_page(request: Request):
"""Render terms of service page with copyright disclaimers and lawful-use requirements."""
return templates.TemplateResponse(
request,
"terms.html",
get_template_context(request, last_updated="April 26, 2026"),
)


# ========================
# PROTECTED ROUTES
# ========================
Expand Down
14 changes: 1 addition & 13 deletions app/templates/base.html
Original file line number Diff line number Diff line change
Expand Up @@ -140,22 +140,10 @@
</div>
<div class="flex gap-8">
<a
href="/privacy"
class="text-sm text-gray-600 hover:text-amber-400 transition-colors duration-300 font-body"
>Privacy</a
>
<span class="text-gray-800" aria-hidden="true">|</span>
<a
href="/terms"
href="/web/terms"
class="text-sm text-gray-600 hover:text-amber-400 transition-colors duration-300 font-body"
>Terms</a
>
<span class="text-gray-800" aria-hidden="true">|</span>
<a
href="/contact"
class="text-sm text-gray-600 hover:text-amber-400 transition-colors duration-300 font-body"
>Contact</a
>
</div>
</div>
</div>
Expand Down
229 changes: 229 additions & 0 deletions app/templates/terms.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,229 @@
{% extends "base.html" %}

{% block title %}Terms of Service — Vooglaadija{% endblock %}

{% block nav_actions %}
<a href="/web/login" class="btn-secondary text-sm">
Sign In
</a>
{% endblock %}

{% block content %}
<div class="min-h-[calc(100vh-4rem)] py-12 px-4 sm:px-6 lg:px-8 relative">
<div class="max-w-3xl mx-auto relative z-10">
<div class="slide-up opacity-0-initial animate-fill-forwards">
<!-- Header -->
<div class="text-center mb-10">
<h1 class="text-3xl font-display font-bold text-white tracking-tight">
Terms of Service
</h1>
<p class="mt-3 text-gray-500 font-body">
Last updated: {{ last_updated }}
</p>
Comment thread
tomkabel marked this conversation as resolved.
</div>

<!-- Terms Card -->
<div class="card-glow p-8 space-y-8">
<!-- Important Notice -->
<div class="bg-amber-500/10 border border-amber-500/20 rounded-xl p-6">
<div class="flex items-start gap-4">
<div class="flex-shrink-0 mt-0.5">
<svg class="h-6 w-6 text-amber-400" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2">
<path stroke-linecap="round" stroke-linejoin="round" d="M12 9v3.75m-9.303 3.376c-.866 1.5.217 3.374 1.948 3.374h14.71c1.73 0 2.813-1.874 1.948-3.374L13.949 3.378c-.866-1.5-3.374-1.5-4.242 0L3.616 6.376c-.866 1.5.217 3.374 1.948 3.374h1.872zM12 15.75h.008v.008H12v-.008z" />
</svg>
Comment thread
coderabbitai[bot] marked this conversation as resolved.
</div>
<div>
<h3 class="font-display font-semibold text-amber-400 mb-2">
Important Legal Notice
</h3>
<p class="text-sm text-gray-400 leading-relaxed">
<strong class="text-gray-300">You are solely responsible for ensuring you have the right to download any content before using Vooglaadija.</strong>
Downloading copyrighted content without authorization may violate YouTube's Terms of Service, applicable copyright laws, and the DMCA. Vooglaadija is a tool — its presence on this server does not authorize any particular download.
</p>
</div>
</div>
</div>

<!-- Section 1: Acceptance -->
<section>
<h2 class="text-xl font-display font-semibold text-white mb-4">
1. Acceptance of Terms
</h2>
<div class="text-gray-400 font-body space-y-3 text-sm leading-relaxed">
<p>
By accessing or using Vooglaadija, you acknowledge that you have read, understood, and agree to be bound by these Terms of Service. If you do not agree to these terms, do not use this service.
</p>
</div>
</section>

<!-- Section 2: Permitted Uses -->
<section>
<h2 class="text-xl font-display font-semibold text-white mb-4">
2. Permitted Uses
</h2>
<div class="text-gray-400 font-body space-y-3 text-sm leading-relaxed">
<p>Vooglaadija is intended for lawful purposes only. Permitted uses include:</p>
<ul class="list-disc list-inside space-y-1.5 ml-4">
<li>Downloading content you own or have created yourself</li>
<li>Downloading content with the explicit permission of the copyright holder</li>
<li>Downloading content licensed under Creative Commons or similar free licenses</li>
<li>Downloading public domain content</li>
<li>Archival or backup purposes with the creator's consent</li>
</ul>
</div>
</section>

<!-- Section 3: Prohibited Uses -->
<section>
<h2 class="text-xl font-display font-semibold text-white mb-4">
3. Prohibited Uses
</h2>
<div class="text-gray-400 font-body space-y-3 text-sm leading-relaxed">
<p>You agree not to use Vooglaadija to:</p>
<ul class="list-disc list-inside space-y-1.5 ml-4">
<li>Download content you do not have the right to download</li>
<li>Circumvent any technological protection measures or access controls</li>
<li>Violate YouTube's Terms of Service or any applicable platform terms</li>
<li>Infringe copyright or other intellectual property rights</li>
<li>Redistribute downloaded content without authorization</li>
<li>Use the service for any commercial purpose without proper authorization</li>
</ul>
</div>
</section>

<!-- Section 4: Disclaimer -->
<section>
<h2 class="text-xl font-display font-semibold text-white mb-4">
4. Disclaimer of Liability
</h2>
<div class="text-gray-400 font-body space-y-3 text-sm leading-relaxed">
<p>
<strong class="text-gray-300">Vooglaadija is provided "AS IS" without warranty of any kind.</strong>
The operators of this service make no representations about the legality of any specific use of this tool. Copyright law varies by jurisdiction. Users are advised to consult qualified legal counsel before downloading any content.
</p>
<p>
To the maximum extent permitted by law, the operators of this service shall not be liable for any damages arising from the use of Vooglaadija, including but not limited to direct, indirect, incidental, special, or consequential damages.
</p>
<p>
As permitted by GPLv3 Sections 15 and 16, this software is provided without warranty or liability of any kind for any purpose.
</p>
</div>
</section>

<!-- Section 5: DMCA -->
<section>
<h2 class="text-xl font-display font-semibold text-white mb-4">
5. DMCA and Content Removal
</h2>
<div class="text-gray-400 font-body space-y-3 text-sm leading-relaxed">
<p>
If you believe that content on YouTube infringes your copyright, please contact YouTube directly or file a DMCA takedown request with YouTube. Vooglaadija operators cannot remove content from YouTube.
</p>
<p>
If you are a rights holder and believe that this service is being used to infringe your rights, contact the service administrator. We take intellectual property rights seriously and will cooperate with legitimate takedown requests.
</p>
<div class="bg-surface-800/50 rounded-lg p-4 mt-4">
<h4 class="text-sm font-display font-semibold text-gray-300 mb-2">DMCA Designated Agent</h4>
<p class="text-xs text-gray-500 font-mono">
To file a DMCA takedown request, contact the service administrator at the email address associated with this service.
</p>
</div>
Comment on lines +125 to +130

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟡 Minor

DMCA designated agent contact information is too vague.

DMCA safe harbor provisions under 17 U.S.C. § 512(c)(2) require specific contact information (name, address, telephone, email) for the designated agent. "The email address associated with this service" doesn't meet statutory requirements.

🛡️ Suggested improvement

Consider either:

  1. Adding a specific contact email/form if this is a production deployment
  2. Adding a placeholder that makes it clear this needs to be filled in:
                             <h4 class="text-sm font-display font-semibold text-gray-300 mb-2">DMCA Designated Agent</h4>
-                            <p class="text-xs text-gray-500 font-mono">
-                                To file a DMCA takedown request, contact the service administrator at the email address associated with this service.
-                            </p>
+                            <p class="text-xs text-gray-500">
+                                <strong class="text-amber-400">[TODO: Add specific agent name and contact details per 17 U.S.C. § 512(c)(2)]</strong><br>
+                                Email: <span class="font-mono">[[email protected]]</span>
+                            </p>
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@app/templates/terms.html` around lines 125 - 130, Replace the vague DMCA
contact paragraph inside the "DMCA Designated Agent" block in
app/templates/terms.html with statutory-compliant contact information: include
the designated agent's full name/title, physical mailing address, telephone
number, and a specific email address or link to a takedown form; if this is a
template, swap the current sentence for an explicit placeholder string that
lists the required fields (e.g. "DESIGNATED AGENT NAME, ADDRESS, PHONE, EMAIL /
takedown form URL — replace before production") so it's clear the values must be
filled in before deployment.

</div>
</section>

<!-- Section 6: Nature of Service -->
<section>
<h2 class="text-xl font-display font-semibold text-white mb-4">
6. Nature of Vooglaadija
</h2>
<div class="text-gray-400 font-body space-y-3 text-sm leading-relaxed">
<p>
Vooglaadija is open-source software distributed under the GNU General Public License v3.0. It is a passive tool — the service operator does not select, modify, or control the content being downloaded. The user initiates all downloads.
</p>
<p>
This service architecture (local file storage, authenticated access, time-limited download links) is designed to limit third-party liability exposure and is not intended to facilitate copyright infringement.
</p>
</div>
</section>

<!-- Section 7: Changes to Terms -->
<section>
<h2 class="text-xl font-display font-semibold text-white mb-4">
7. Changes to These Terms
</h2>
<div class="text-gray-400 font-body space-y-3 text-sm leading-relaxed">
<p>
These terms may be updated at any time to reflect changes in law, service architecture, or operational requirements. Material changes will be communicated via a notice on this page and, where practicable, via the service dashboard.
</p>
<p>
Continued use of the service after any modification constitutes acceptance of the updated terms. Users are advised to review these terms periodically.
</p>
</div>
</section>

<!-- Section 8: Governing Law -->
<section>
<h2 class="text-xl font-display font-semibold text-white mb-4">
8. Governing Law and Jurisdiction
</h2>
<div class="text-gray-400 font-body space-y-3 text-sm leading-relaxed">
<p>
These Terms of Service are governed by the laws of the Republic of Estonia, without regard to conflict of law principles.
</p>
<p>
Any disputes arising from the use of this service shall be subject to the exclusive jurisdiction of the courts of the Republic of Estonia.
</p>
</div>
</section>

<!-- Section 9: Contact -->
<section>
<h2 class="text-xl font-display font-semibold text-white mb-4">
9. Contact
</h2>
<div class="text-gray-400 font-body space-y-3 text-sm leading-relaxed">
<p>
For questions about these terms, please contact the service administrator at the email address associated with this service.
</p>
</div>
</section>

<!-- Legal Framework -->
<div class="border-t border-white/[0.04] pt-6">
<h3 class="text-sm font-display font-semibold text-gray-500 uppercase tracking-wider mb-3">
Applicable Legal Framework
</h3>
<div class="grid grid-cols-1 md:grid-cols-2 gap-3 text-xs text-gray-600 font-mono">
<div class="bg-surface-800/50 rounded-lg p-3">
<span class="text-gray-500">US:</span> DMCA §1201, Copyright Law
</div>
<div class="bg-surface-800/50 rounded-lg p-3">
<span class="text-gray-500">EU:</span> Copyright Directive Art. 17, DSA
</div>
<div class="bg-surface-800/50 rounded-lg p-3">
<span class="text-gray-500">Estonia:</span> Autoriõiguse seadus
</div>
<div class="bg-surface-800/50 rounded-lg p-3">
<span class="text-gray-500">License:</span> GNU GPLv3 §§15-16
</div>
</div>
</div>

<!-- Consent -->
<div class="border-t border-white/[0.04] pt-6">
<p class="text-xs text-gray-600 font-body">
By using Vooglaadija, you confirm that you have read, understood, and agree to be bound by these Terms of Service. You acknowledge that you are responsible for ensuring any downloads comply with applicable law.
</p>
</div>
</div>

<!-- Footer Navigation -->
<div class="mt-8 flex justify-center">
<a href="/web/login" class="text-sm text-gray-500 hover:text-amber-400 transition-colors duration-300">
Sign In
</a>
</div>
</div>
</div>
</div>
{% endblock %}
Loading
Loading