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.
Yotter/README.md

194 lines
9.6 KiB
Markdown
Raw Normal View History

2020-08-31 13:37:59 +05:30
<p align="center"> <img width="700" src="app/static/img/banner.png"> </img></p>
<p align="center">
<a href="https://www.gnu.org/licenses/gpl-3.0"><img alt="License: GPL v3" src="https://img.shields.io/badge/License-GPLv3-blue.svg"></img></a>
<a href="https://github.com/pluja/Yotter"><img alt="Development state" src="https://img.shields.io/badge/State-Beta-blue.svg"></img></a>
<a href="https://github.com/pluja/Yotter/pulls"><img alt="Pull Requests Welcome" src="https://img.shields.io/badge/PRs-Welcome-green.svg"></img></a>
<a href="https://github.com/pluja/Yotter/tree/master"><img alt="Formerly named Parasitter" src="https://img.shields.io/badge/Formerly-Parasitter-blue.svg"></img></a>
</p>
2020-08-30 04:41:43 +05:30
2020-08-30 04:33:21 +05:30
2020-08-31 13:33:33 +05:30
Yotter allows you to follow and gather all the content from your favorite Twitter and YouTube accounts in a *beautiful* feed so you can stay up to date without compromising your privacy at all. Yotter is written with Python and Flask and uses Semantic-UI as its CSS framework.
2020-07-15 03:48:08 +05:30
2020-08-30 15:28:01 +05:30
Yotter is possible thanks to several open-source projects that are listed on the [Powered by](#powered-by) section. Make sure to check out those awesome projects!
2020-07-13 04:06:16 +05:30
2020-07-13 18:31:54 +05:30
## Index:
2020-09-01 23:29:27 +05:30
* [Why](#why)
2020-07-14 13:18:11 +05:30
* [Features](#features)
2020-08-31 13:25:37 +05:30
* [Screenshots](#screenshots)
2020-08-30 04:18:03 +05:30
* [Privacy and Security](#-privacy)
2020-08-30 04:17:05 +05:30
* [Self hosting](#-self-hosting)
2020-09-04 11:56:36 +05:30
* Install & Test
* [Normal installation](#-test)
* [Docker installation](#using-docker)
2020-08-31 16:50:43 +05:30
* [Hosting on a server](#-hosting-on-a-server)
2020-08-30 04:17:05 +05:30
* [Update](#-updating-to-newer-versions)
2020-09-04 11:56:36 +05:30
* [Configure server](#configure-the-server)
2020-08-30 04:17:05 +05:30
* [Powered by](#-powered-by)
* [Donate](#-donate)
2020-07-13 04:13:13 +05:30
2020-09-01 23:29:27 +05:30
## Why
At first I started working on this project as a solution for following Twitter accounts (a thing that can't be done with Nitter) and getting a Twitter-like feed. Weeks later the leader of Invidious, Omar Roth, announced that he was stepping away from the project. As an Invidious active user, this made me think that a new alternative was needed for the community and also an alternative with an easier language for most people (as Invidious is written in Crystal). So I started developing a 'written-in-python Invidious alternative' and it went quite well.
I hope that this project can prosperate, gain contributors, new instances and create a good community around it.
2020-07-14 13:18:11 +05:30
## Features:
2020-08-30 16:13:17 +05:30
- [x] No Ads.
- [x] No JavaScript.
- [x] Minimalist.
- [x] Search on Twitter and Youtube.
- [x] Zero connections to Google/Twitter on the client.
- [x] Follow Twitter accounts.
- [x] Follow Youtube accounts.
- [x] Save your favourite Tweets.
- [x] Tor-friendly.
- [x] Terminal-browser friendly.
2020-08-30 15:27:12 +05:30
2020-07-27 21:21:51 +05:30
> And many more to come!
2020-07-14 13:18:11 +05:30
2020-08-30 04:15:55 +05:30
## 🎭 Privacy
2020-08-30 04:18:03 +05:30
#### 🌐 Connections
2020-08-30 15:28:01 +05:30
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.
2020-07-13 04:13:13 +05:30
2020-08-31 13:31:27 +05:30
The Yotter server connects to Google (Youtube) and Nitter in order to gather all the necessary data. Then it serves it (proxyed 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.
2020-07-13 04:13:13 +05:30
2020-08-31 16:50:43 +05:30
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**. - Even with this method, you can stay safe if you use a VPN to hide your IP.
2020-07-13 18:26:31 +05:30
2020-08-30 04:15:55 +05:30
#### 🛡️ Your data
2020-08-27 13:54:52 +05:30
The only things the database stores are:
2020-07-13 18:26:45 +05:30
* Hash of the password
2020-07-13 18:26:31 +05:30
* Username
* List of followed users
* List of saved posts
2020-08-31 16:50:43 +05:30
* Some user configurations (Dark theme, etc)
2020-07-13 18:26:31 +05:30
2020-08-31 16:50:43 +05:30
This data will never be used for any other purpose than offering the service to the user. It's not sent anywhere, never.
2020-08-27 13:54:52 +05:30
2020-08-30 04:18:03 +05:30
#### 🔐 Security
2020-08-31 16:50:43 +05:30
Only the hash of your password is stored on the database. Also, no personal information of any kind is required nor kept, if a hacker gets access to the database the only thing they could do would be to follow/unfollow some accounts. So there's no motivation in 'hacking' Yotter.
2020-08-30 04:10:08 +05:30
I always recommend self-hosting, as you will be the only person with access to the data.
2020-08-16 19:08:44 +05:30
2020-08-17 14:36:07 +05:30
> Important note: The **client** never connects to Google / Youtube however, the server does in order to gather all the necessary things!
2020-08-31 13:25:37 +05:30
#### Others
If you want to use a specific Nitter instance you can replace it on the file `app/routes.py`.
## 🏠 Self hosting
2020-07-13 18:31:54 +05:30
2020-08-30 04:15:55 +05:30
### 🐣 Test
2020-08-05 02:55:40 +05:30
You can test this new version.
2020-08-26 12:11:38 +05:30
##### IMPORTANT: Connections to googlevideo will be made to stream the videos. It is recommended to use a VPS server or a VPN to preserve your privacy. This version is intended for a remote server.
2020-07-15 03:57:38 +05:30
2020-07-15 16:25:47 +05:30
1. Install `python3`, `pip3`, `python3-venv` (optional) and `git`.
2020-08-30 04:00:30 +05:30
2020-07-13 03:25:32 +05:30
2. Clone this repository:
2020-08-30 15:28:01 +05:30
- `git clone https://github.com/pluja/Yotter.git`
2020-08-30 04:00:30 +05:30
2020-07-13 03:25:32 +05:30
3. Navigate to the project folder:
2020-08-30 15:28:01 +05:30
- `cd Yotter`
2020-08-30 04:00:30 +05:30
4. Prepare a virtual environment and activate it:
2020-08-30 03:57:14 +05:30
> Python lets you create virtual environments. This allows you to avoid installing all the `pip` packages on your system.
2020-07-13 03:14:56 +05:30
- `python3 -m venv venv`
- `source venv/bin/activate`
2020-07-13 18:26:31 +05:30
> 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.
2020-08-30 04:00:30 +05:30
5. [env] Update pip
2020-08-26 12:12:39 +05:30
- `python3 pip install --upgrade pip`
2020-08-30 04:00:30 +05:30
6. [env] Install the required libraries:
2020-08-26 12:12:39 +05:30
- `python3 pip install -r requirements.txt`
2020-08-30 04:04:18 +05:30
> If you get errors, try running `source venv/bin/activate` again of use `--user` option.
2020-08-30 04:00:30 +05:30
7. [env] Initialize and prepare the database.
2020-07-13 03:14:56 +05:30
- `flask db init`
- `flask db migrate`
- `flask db upgrade`
2020-08-26 12:05:23 +05:30
> If you get *`"No such command db"`*, try running `source venv/bin/activate` again.
2020-08-30 04:00:30 +05:30
8. [env] Run the application.
2020-07-13 03:14:56 +05:30
- `flask run`
2020-08-30 15:28:01 +05:30
> 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!
2020-08-30 04:00:30 +05:30
9. Go to "http://localhost:5000/" and enjoy.
2020-07-13 03:22:51 +05:30
### Using Docker:
A quick deployment
1. Install Docker:
- `https://docs.docker.com/engine/install/`
2. Clone this repository:
- `git clone https://github.com/pluja/Yotter.git`
3. Navigate to the project folder:
- `cd Yotter`
4. Build the docker image:
- `docker build -t yotter .`
5. Run the container:
- `docker run -p 5000:5000 yotter`
6. Go to "http://localhost:5000/" and enjoy.
2020-08-31 13:25:37 +05:30
### 🔗 Hosting on a server:
`SOON`
2020-08-30 04:15:55 +05:30
### 🐓 Updating to newer versions:
2020-08-30 04:04:18 +05:30
**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)!**
2020-07-13 18:28:56 +05:30
1. Navigate to the git repository (the one you cloned when installing).
2020-08-30 04:04:18 +05:30
2020-07-13 18:28:56 +05:30
2. Pull new changes:
- `git pull`
2020-08-30 04:04:18 +05:30
2020-07-14 12:14:31 +05:30
4. 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.
2020-08-25 17:05:47 +05:30
5. Update the database:
- `flask db migrate`
- `flask db upgrade`
2020-08-30 04:04:18 +05:30
> 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.
2020-08-25 17:05:47 +05:30
6. Done! You are on latest version.
> **See [CHANGELOG](CHANGELOG.md) for a list of changes.**
2020-07-13 03:22:51 +05:30
2020-09-04 11:56:36 +05:30
### Configure the server
You will find in the root folder of the project a file named `yotter-config.json`. This is the global config file for the Yotter server.
Currently available config is:
* **nitterInstance**: Nitter instance that will be used when fetching Twitter content.
* **maxInstanceUsers**: Max users on the instance. When set to `0` it closes registrations.
2020-08-30 04:15:55 +05:30
### ⛽ Powered by:
2020-08-16 20:19:02 +05:30
* [Nitter](https://nitter.net/)
2020-08-04 13:31:48 +05:30
* [youtube-dl](https://github.com/ytdl-org/youtube-dl)
2020-07-13 03:22:51 +05:30
* [Flask](https://flask.palletsprojects.com/)
* [SQLAlchemy](https://docs.sqlalchemy.org/en/13/)
2020-07-13 04:06:16 +05:30
* [Semantic-UI](https://semantic-ui.com)
2020-07-14 22:55:10 +05:30
* [requests-futures](https://github.com/ross/requests-futures)
2020-07-15 03:52:48 +05:30
* [microblog](https://github.com/miguelgrinberg/microblog)
2020-08-16 20:19:02 +05:30
* [Video.js](https://videojs.com/)
2020-08-17 12:59:20 +05:30
* [My fork of youtube_search](https://github.com/pluja/youtube_search-fork)
2020-07-30 02:34:56 +05:30
2020-08-30 04:15:55 +05:30
### 💌 Donate
2020-09-01 23:46:35 +05:30
This project is completely free and Open Source and will always be.
2020-09-01 23:46:35 +05:30
Funding will be used 100% for opening and mantaining an online public instance of Yotter, this will be hosted on Netcup and will (at first) be the *VPS 500 G8*. I mention all of this in case you want to check the prices.
2020-09-01 23:50:30 +05:30
#### Crypto (preferred):
- **Bitcoin**: `3EjaWjtsHz4WpbVL5Wx8Xg6MfyRRnKYj4e`
- **Monero**: `83hinYmUkMH2ANgdhxRupmakzLwN26ddePrLQvZv4E3Q1CWjq7MDzsKRcPqLPQwTvG3DdujyaxbKbMsf9VKVAmphMhsfndc`
2020-09-01 23:50:30 +05:30
#### Fiat:
- <a href="https://liberapay.com/pluja/donate"><img alt="Donate using Liberapay" src="https://liberapay.com/assets/widgets/donate.svg"></a>
2020-08-31 13:25:37 +05:30
## 🖼️ Screenshots
<p align="center"> <img width="720" src="https://i.imgur.com/6AfXO57.png"> </img></p>
<p align="center"> <img width="720" src="https://i.imgur.com/jipjySH.png"> </img></p>
<p align="center"> <img width="720" src="https://i.imgur.com/JMUW6VH.png"> </img></p>
<p align="center"> <img width="720" src="https://i.imgur.com/a7rM4sv.png"> </img></p>
<p align="center"> <img width="720" src="https://i.imgur.com/skXFMqE.png"> </img></p>
<p align="center"> <img width="720" src="https://i.imgur.com/AurVw5M.png"> </img></p>