Youtube and Twitter with privacy.
This repository has been archived on 2022-06-28. You can view files and clone it, but cannot push or open issues or pull requests.
Go to file
2020-08-31 09:38:51 +02:00
app Add new error pages and fix debug printing 2020-08-31 09:38:35 +02:00
misc Create README.md 2020-08-31 09:27:06 +02:00
.gitignore Update .gitignore 2020-08-31 09:27:42 +02:00
CHANGELOG.md Update changelog 2020-08-29 22:36:42 +02:00
config.py Twitter follow logic and DB rewrite + Youtube logic improvements 2020-08-24 12:34:17 +02:00
LICENSE Add LICENSE 2020-08-30 00:55:17 +02:00
parasitter.py re-organization 2020-07-13 00:11:15 +02:00
README.md Add banner 2020-08-30 12:43:17 +02:00
requirements.txt Update requirements 2020-08-27 12:54:41 +02:00
yotter.py Add banner 2020-08-30 12:40:20 +02:00

License: GPL v3 made-with-python Generic badge Generic badge


In this new version, Yotter no longer depends on Invidious. Click on this link if you want to go to the old version using Invidious (not updated anymore).

Yotter allows you to follow your favorite Twitter and YouTube accounts with full privacy using rss feeds in order to gather the latest content from your favourite accounts and builds a beautiful feed so you can read them. Yotter is written in Python and Flask and uses Semantic-UI as its CSS framework.

Yotter is possible thanks to several open-source projects that are listed on the Powered by section. Make sure to check out those awesome projects!

Index:

Features:

  • No Ads.
  • No JavaScript.
  • Minimalist.
  • Search on Twitter and Youtube.
  • Zero connections to Google/Twitter on the client.
  • Follow Twitter accounts.
  • Follow Youtube accounts.
  • Save your favourite Tweets.
  • Tor-friendly.
  • Terminal-browser friendly.
  • Easy 2 minute self-hosting deploy.

And many more to come!

🎭 Privacy

🌐 Connections

Yotter cares about your privacy, and for this it will never make any connection to Twitter or Youtube on the client. Every request is proxied through the Yotter server; video streaming, photos, data gathering, scrapping, etc.

The Yotter server connects to Google (Youtube) and Nitter in order to gather all the necessary data. Then it serves it (proxied through itself) to the client. This means that as a client, you will never connect to Google - the Yotter server will do it for you. So if you want to set up a Yotter server for privacy reasons I recommend you to set it up on a remote VPS so you don't share your IP with Google or use a VPN on the server.

If you don't mind exposing your IP making requests to Google then you can set it up wherever you want. Even with this method you will avoid all trackers, ads, heavy-loaded pages, etc.

🛡️ Your data

The only things the database stores are:

  • Hash of the password
  • Username
  • List of followed users
  • List of saved posts

This data will never be used for any other purpose than offering the service to the user.

Others

If you want to use a specific Nitter instance you can replace it on the file app/routes.py.

🔐 Security

Only the hash of your password is stored on the database. Also no personal information of any kind is kept on the app itself, if a hacker gets access to it only thing they could do would be to follow/unfollow some accounts.

I always recommend self-hosting, as you will be the only person with access to the data.

Important note: The client never connects to Google / Youtube however, the server does in order to gather all the necessary things!

🏠 Self hosting

🐣 Test

You can test this new version.

  1. Install python3, pip3, python3-venv (optional) and git.

  2. Clone this repository:

    • git clone https://github.com/pluja/Yotter.git
  3. Navigate to the project folder:

    • cd Yotter
  4. Prepare a virtual environment and activate it:

    Python lets you create virtual environments. This allows you to avoid installing all the pip packages on your system.

    • python3 -m venv venv
    • source venv/bin/activate

    Now you are inside of the virtual environment for python. All instructions wiht [env] indicate that must be done inside the env if you decided to create one. From now on, you will always need to start the application from within the virtual env.

  5. [env] Update pip

    • python3 pip install --upgrade pip
  6. [env] Install the required libraries:

    • python3 pip install -r requirements.txt

      If you get errors, try running source venv/bin/activate again of use --user option.

  7. [env] Initialize and prepare the database.

    • flask db init
    • flask db migrate
    • flask db upgrade

    If you get "No such command db", try running source venv/bin/activate again.

  8. [env] Run the application.

    • flask run

    You can optionally use flask run --host 0.0.0.0 so you can use Yotter from other devices from the same network using the host device's IP address and port. ¡Test it from a smartphone!

  9. Go to "http://localhost:5000/" and enjoy.

🐓 Updating to newer versions:

IMPORTANT: Before updating to newer versions, always export your data on Settings>Export Data. A major version update could have changes on the whole database and you may be forced to remove and reset the database (only when running locally)!

  1. Navigate to the git repository (the one you cloned when installing).

  2. Pull new changes:

    • git pull
  3. Install new packages (if any):

    • pip install -r requirements.txt

    It may be that there are no new packages to install. In that case, all requirements will be satisfied.

  4. Update the database:

    • flask db migrate
    • flask db upgrade

If you experience any error in this step, it might be that there were big changes on the database structure. You can solve it by exporting your data, then deleting and resetting the database. Run rm -rf app.db migrations and then flask db init. Then run step 5 normally.

  1. Done! You are on latest version.

See CHANGELOG for a list of changes.

Powered by:

💌 Donate

This project is completelly free and Open Source and will always be. I am dedicating my free time to build it so if you like it, you can buy me a coffee!

  • Bitcoin: 3EjaWjtsHz4WpbVL5Wx8Xg6MfyRRnKYj4e
  • Monero: 83hinYmUkMH2ANgdhxRupmakzLwN26ddePrLQvZv4E3Q1CWjq7MDzsKRcPqLPQwTvG3DdujyaxbKbMsf9VKVAmphMhsfndc