{"id":13642566,"url":"https://github.com/wasi-master/13ft","last_synced_at":"2025-05-14T01:04:57.185Z","repository":{"id":104241492,"uuid":"445288839","full_name":"wasi-master/13ft","owner":"wasi-master","description":"My own custom 12ft.io replacement","archived":false,"fork":false,"pushed_at":"2024-10-27T15:27:14.000Z","size":10190,"stargazers_count":3183,"open_issues_count":10,"forks_count":165,"subscribers_count":11,"default_branch":"main","last_synced_at":"2025-04-02T11:15:56.016Z","etag":null,"topics":["paywall-blocker","paywall-bypass","paywall-bypasser","python","python3","self-hosted","selfhost","selfhosted"],"latest_commit_sha":null,"homepage":"https://13ft.wasimaster.me","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/wasi-master.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2022-01-06T19:34:47.000Z","updated_at":"2025-04-02T00:12:50.000Z","dependencies_parsed_at":null,"dependency_job_id":"71085386-d56b-48eb-be5b-c6c48d90f874","html_url":"https://github.com/wasi-master/13ft","commit_stats":null,"previous_names":[],"tags_count":11,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wasi-master%2F13ft","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wasi-master%2F13ft/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wasi-master%2F13ft/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wasi-master%2F13ft/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/wasi-master","download_url":"https://codeload.github.com/wasi-master/13ft/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248045230,"owners_count":21038553,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["paywall-blocker","paywall-bypass","paywall-bypasser","python","python3","self-hosted","selfhost","selfhosted"],"created_at":"2024-08-02T01:01:33.147Z","updated_at":"2025-04-09T13:02:19.189Z","avatar_url":"https://github.com/wasi-master.png","language":"Python","readme":"# 13 Feet Ladder\n\nA site similar to [12ft.io](https://12ft.io) but is self hosted and works with websites that 12ft.io doesn't work with.\n\n## What is this?\n\nThis is a simple self hosted server that has a simple but powerful interface to block ads, paywalls, and other nonsense. Specially for sites like medium, new york times which have paid articles that you normally cannot read. Now I do want you to support the creators you benefit from but if you just wanna see one single article and move on with your day then this might be helpful\n\n## How does it work?\n\nIt pretends to be GoogleBot (Google's web crawler) and gets the same content that google will get. Google gets the whole page so that the content of the article can be indexed properly and this takes advantage of that.\n\n## How do I use it?\n\n### Using Docker\n\nRequirements:\n- docker\n- Docker Compose (available as `docker compose`)\n\nFirst, clone the repo to your machine then run the following commands:\n\n```sh\ngit clone https://github.com/wasi-master/13ft.git\ncd 13ft\ndocker compose up\n```\n\nThe image is also available from [DockerHub](https://hub.docker.com/r/wasimaster/13ft \"docker pull wasimaster/13ft\") or [ghcr.io](https://github.com/wasi-master/13ft/pkgs/container/13ft \"docker pull ghcr.io/wasi-master/13ft:0.2.3\") so the command `docker pull wasimaster/13ft` also works.\n\n### Standard Python script\n\nFirst, make sure you have [python](https://python.org) installed on your machine. Next, clone the git repo. Then go to a terminal (`Command Prompt` on Windows, `Terminal` on Mac) and run the following command:\n\nFrom the git cloned directory on your computer:\n\n```sh\ncd app/\npython -m pip install -r requirements.txt\n```\n\nIf that doesn't work retry but replace `python` with `py`, then try `python3`, then try `py3`\n\nThen run `portable.py`, click [this link](https://realpython.com/run-python-scripts/) for a tutorial on how to run python scripts.\n\n```sh\npython portable.py\n```\n\nThen open the link shown in the terminal in the browser and you'll be able to use this\n\n### Installation using venv and running under specific bind address / port\n\n```sh\npython3 -m venv venv\nsource venv/bin/activate\npython -m pip install -r requirements.txt\nFLASK_APP=app/portable.py flask run --host=127.0.0.1 --port=9982\n```\n\n\n## Using as a Bookmarklet in Chrome:\n\nYou can create a bookmarklet that performs the URL transformation by writing a small JavaScript snippet. Below is the JavaScript code for your bookmarklet:\n```javascript\njavascript:(function(){window.location.href='https://13ft.wasimaster.me/'+encodeURIComponent(window.location.href);})();\n```\nYou can replace https://13ft.wasimaster.me with your own 13ft instance if desired.\n\nSteps:\n1. Open Bookmarks Manager:\n\n2. Click on the three dots (menu) in the top-right corner of Chrome.\nGo to Bookmarks \u003e Bookmark manager, or simply press Ctrl+Shift+O on Windows/Linux or Cmd+Option+B on Mac.\nCreate a New Bookmark:\n\n3. In the Bookmark Manager, click the three-dot menu in the top-right corner of the window and select Add new bookmark.\nEnter Bookmark Details:\n    - Name: Enter a name for your bookmarklet, such as \"13ft-ize\". This name will show as a bookmark title in the bookmarks bar\n    - URL: Paste the JavaScript code provided above into the URL field.\n4. Click Save.\n\nUsing the Bookmarklet:\n\nNavigate to the page whose URL you want to use 13ft on.\n\nClick on the bookmarklet you saved in your bookmarks bar. The browser will redirect you to the 13ft version of the URL using your service.\n\nTo show Bookmarks in Chrome, click the icon with three horizontal bars in the top right corner to open options. 2. In options, hover over \"Bookmarks\" to display a second menu where you can click the \"Show bookmarks bar\" text to toggle the bar on or off.\n\nInstructions courtesy of [@barakplasma](https://github.com/barakplasma)\n\n## Customizing listening host and port, Systemd / Reverse-proxy example\n\n### Systemd Service\n\n```\n/lib/systemd/system/13ft.service\n```\n\n```\n[Unit]\nDescription=13ft Flask Service\nWants=network-online.target\nAfter=network-online.target\n\n[Service]\nType=simple\nRestart=on-failure\nRestartSec=10\nUser=www-data\nGroup=www-data\nEnvironment=APP_PATH=/var/www/paywall-break\nEnvironment=FLASK_APP=app/portable.py\n\nExecStart=/bin/bash -c \"cd ${APP_PATH};${APP_PATH}/venv/bin/flask run --host=127.0.0.1 --port=22113\"\n\n# Make sure stderr/stdout is captured in the systemd journal.\nStandardOutput=journal\nStandardError=journal\n\n[Install]\nWantedBy=multi-user.target\n```\n\n### Reverse Proxy\n\n```\n\u003cVirtualHost *:22114\u003e\n    ErrorLog ${APACHE_LOG_DIR}/13ft-error.log\n    CustomLog ${APACHE_LOG_DIR}/13ft-access.log combined\n\n    ProxyRequests Off\n\n    SSLEngine on\n    SSLCertificateFile      /etc/ssl/certs/ssl-cert-snakeoil.pem\n    SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key\n    Header always set Strict-Transport-Security \"max-age=63072000\"\n    SSLProtocol             all -SSLv3 -TLSv1 -TLSv1.1\n\n    SSLHonorCipherOrder     off\n    SSLSessionTickets       off\n\n    Protocols h2 http/1.1\n\n    \u003cProxy *\u003e\n        Order deny,allow\n        Allow from all\n    \u003c/Proxy\u003e\n\n\n    ProxyPass / http://127.0.0.1:22113/\n    ProxyPassReverse / http://127.0.0.1:22113/\n\n\n\u003c/VirtualHost\u003e\n```\n\n## Screenshots\n\n### Step 1\n\n![step 1 screenshot](screenshots/step-1.png)\nGo to the website at the url shown in the console\n\n### Step 2\n\n![step 2 screenshot](screenshots/step-2.png)\nClick on the input box\n\n### Step 3\n\n![step 3 screenshot](screenshots/step-3.png)\nPaste your desired url\n\n### Step 4\n\n![step 4 screenshot](screenshots/step-4.gif)\nVoilà you now have bypassed the paywall and ads\n\n### Alternative method\n\nYou can also append the url at the end of the link and it will also work. (e.g if your server is running at `http://127.0.0.1:5000` then you can go to `http://127.0.0.1:5000/https://example.com` and it will read out the contents of `https://example.com`)\n\nThis feature was implemented by [@atcasanova](https://github.com/atcasanova)\n","funding_links":[],"categories":["Python","self-hosted"],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwasi-master%2F13ft","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fwasi-master%2F13ft","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwasi-master%2F13ft/lists"}