Merge branch 'master' of https://github.com/Jazys/runtipi-appstore
This commit is contained in:
commit
fa6a38f4b7
|
@ -122,6 +122,7 @@ This is the official repository for the Tipi App Store. It contains all the apps
|
|||
- [SimpleX SMP](https://github.com/simplex-chat/simplexmq) - A reference implementation of the SimpleX Messaging Protocol for simplex queues over public networks.
|
||||
- [Sonarr](https://github.com/Sonarr/Sonarr) - TV show manager for Usenet and BitTorrent
|
||||
- [Sshwifty](https://github.com/nirui/sshwifty/) - Web SSH & Telnet (WebSSH & WebTelnet client)
|
||||
- [Stirling-PDF](https://github.com/Frooodle/Stirling-PDF) - Locally hosted web application that allows you to perform various operations on PDF files.
|
||||
- [Syncthing](https://github.com/syncthing/syncthing) - Continuous File Synchronization
|
||||
- [Tailscale](https://github.com/tailscale/tailscale) - The easiest, most secure way to use WireGuard and 2FA
|
||||
- [Tandoor](https://github.com/TandoorRecipes/recipes) - Drop your collection of links and notes. Get Tandoor and never look back onto a time without recipe management, storage, sharing and collaborative cooking!
|
||||
|
|
|
@ -5,8 +5,8 @@
|
|||
"exposable": true,
|
||||
"port": 8119,
|
||||
"id": "bookstack",
|
||||
"tipi_version": 11,
|
||||
"version": "23.06.20230703",
|
||||
"tipi_version": 12,
|
||||
"version": "23.08.20230830",
|
||||
"description": "BookStack is a simple, self-hosted, easy-to-use platform for organising and storing information. Default login: admin@admin.com password: password",
|
||||
"short_desc": "BookStack is a self-hosted platform for organising and storing information.",
|
||||
"author": "Dan Brown",
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
version: "3.7"
|
||||
services:
|
||||
bookstack:
|
||||
image: lscr.io/linuxserver/bookstack:23.06.20230703
|
||||
image: lscr.io/linuxserver/bookstack:23.08.20230830
|
||||
container_name: bookstack
|
||||
environment:
|
||||
- APP_URL=${APP_PROTOCOL:-http}://${APP_DOMAIN}
|
||||
|
|
|
@ -5,12 +5,10 @@ services:
|
|||
image: filebrowser/filebrowser:s6
|
||||
ports:
|
||||
- ${APP_PORT}:80
|
||||
environment:
|
||||
- PUID=1000
|
||||
- PGID=1000
|
||||
volumes:
|
||||
- ${ROOT_FOLDER_HOST}/app-data:/srv/app-data
|
||||
- ${ROOT_FOLDER_HOST}/media:/srv/media
|
||||
- ${APP_DATA_DIR}/data/general:/srv/general
|
||||
- ${APP_DATA_DIR}/data/db:/database
|
||||
- ${APP_DATA_DIR}/data/config:/config
|
||||
networks:
|
||||
|
|
|
@ -4,9 +4,9 @@ filebrowser provides a file managing interface within a specified directory and
|
|||
|
||||
- **username**: admin
|
||||
- **password**: admin
|
||||
<br />
|
||||
|
||||
## Features
|
||||
|
||||
Please refer to our docs at [https://filebrowser.org/features](https://filebrowser.org/features)
|
||||
|
||||
![Preview](https://user-images.githubusercontent.com/5447088/50716739-ebd26700-107a-11e9-9817-14230c53efd2.gif)
|
||||
![Preview](https://user-images.githubusercontent.com/5447088/50716739-ebd26700-107a-11e9-9817-14230c53efd2.gif)
|
||||
|
|
|
@ -5,8 +5,8 @@
|
|||
"available": true,
|
||||
"exposable": true,
|
||||
"id": "filestash",
|
||||
"tipi_version": 2,
|
||||
"version": "397fd8b",
|
||||
"tipi_version": 3,
|
||||
"version": "latest",
|
||||
"categories": ["utilities"],
|
||||
"description": "A modern web client for SFTP, S3, FTP, WebDAV, Git, Minio, LDAP, CalDAV, CardDAV, Mysql, Backblaze",
|
||||
"short_desc": "A modern web client for SFTP, S3, FTP, WebDAV, Git, Minio, LDAP, CalDAV, CardDAV, Mysql, Backblaze",
|
||||
|
|
|
@ -2,7 +2,7 @@ version: "2"
|
|||
services:
|
||||
filestash:
|
||||
container_name: filestash
|
||||
image: machines/filestash:397fd8b
|
||||
image: machines/filestash:latest
|
||||
restart: unless-stopped
|
||||
environment:
|
||||
- APPLICATION_URL=${APP_DOMAIN}
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
"available": true,
|
||||
"exposable": true,
|
||||
"id": "ghost",
|
||||
"tipi_version": 41,
|
||||
"tipi_version": 42,
|
||||
"version": "5.60.0",
|
||||
"categories": [
|
||||
"social",
|
||||
|
|
|
@ -16,7 +16,7 @@ services:
|
|||
database__connection__user: tipi
|
||||
database__connection__password: ${GHOST_DATABASE_PASSWORD}
|
||||
database__connection__database: ghosttipi
|
||||
url: http://localhost:${APP_PORT}
|
||||
url: ${APP_PROTOCOL:-http}://${APP_DOMAIN}
|
||||
volumes:
|
||||
- ${APP_DATA_DIR}/content:/var/lib/ghost/content
|
||||
networks:
|
||||
|
|
|
@ -1,3 +1,6 @@
|
|||
# Install Information
|
||||
|
||||
After Ghost is installed, head over to https://yourdomain.com/ghost/ to finish setup and create the admin account!
|
||||
# A painless self-hosted Blog
|
||||
|
||||
Ghost is a powerful app for new-media creators to publish, share, and grow a business around their content. It comes with modern tools to build a website, publish content, send newsletters & offer paid subscriptions to members.
|
||||
|
|
|
@ -5,8 +5,8 @@
|
|||
"available": true,
|
||||
"exposable": false,
|
||||
"id": "gladys",
|
||||
"tipi_version": 16,
|
||||
"version": "4.27.0",
|
||||
"tipi_version": 17,
|
||||
"version": "4.27.2",
|
||||
"categories": [
|
||||
"automation"
|
||||
],
|
||||
|
|
|
@ -3,7 +3,7 @@ version: '3'
|
|||
services:
|
||||
gladys:
|
||||
container_name: gladys
|
||||
image: gladysassistant/gladys:v4.27.0
|
||||
image: gladysassistant/gladys:v4.27.2
|
||||
privileged: true
|
||||
restart: on-failure
|
||||
stop_grace_period: 1m
|
||||
|
|
|
@ -5,8 +5,8 @@
|
|||
"available": true,
|
||||
"exposable": true,
|
||||
"id": "grafana",
|
||||
"tipi_version": 11,
|
||||
"version": "9.5.8",
|
||||
"tipi_version": 13,
|
||||
"version": "10.1.0",
|
||||
"categories": [
|
||||
"data"
|
||||
],
|
||||
|
|
|
@ -3,7 +3,7 @@ version: "3"
|
|||
services:
|
||||
grafana:
|
||||
container_name: grafana
|
||||
image: grafana/grafana-oss:9.5.8
|
||||
image: grafana/grafana-oss:10.1.0
|
||||
ports:
|
||||
- ${APP_PORT}:3000
|
||||
volumes:
|
||||
|
|
|
@ -5,8 +5,8 @@
|
|||
"exposable": true,
|
||||
"port": 8128,
|
||||
"id": "immich",
|
||||
"tipi_version": 38,
|
||||
"version": "1.75.2",
|
||||
"tipi_version": 40,
|
||||
"version": "1.76.1",
|
||||
"categories": [
|
||||
"data",
|
||||
"photography"
|
||||
|
|
|
@ -3,7 +3,7 @@ version: "3.7"
|
|||
services:
|
||||
immich:
|
||||
container_name: immich
|
||||
image: altran1502/immich-proxy:v1.75.2
|
||||
image: altran1502/immich-proxy:v1.76.1
|
||||
ports:
|
||||
- ${APP_PORT}:8080
|
||||
depends_on:
|
||||
|
@ -43,7 +43,7 @@ services:
|
|||
|
||||
immich-server:
|
||||
container_name: immich-server
|
||||
image: altran1502/immich-server:v1.75.2
|
||||
image: altran1502/immich-server:v1.76.1
|
||||
command: ["start-server.sh"]
|
||||
volumes:
|
||||
- ${ROOT_FOLDER_HOST}/media/data/images/immich:/usr/src/app/upload
|
||||
|
@ -68,7 +68,7 @@ services:
|
|||
|
||||
immich-microservices:
|
||||
container_name: immich-microservices
|
||||
image: altran1502/immich-server:v1.75.2
|
||||
image: altran1502/immich-server:v1.76.1
|
||||
command: ["start-microservices.sh"]
|
||||
volumes:
|
||||
- ${ROOT_FOLDER_HOST}/media/data/images/immich:/usr/src/app/upload
|
||||
|
@ -93,7 +93,7 @@ services:
|
|||
|
||||
immich-machine-learning:
|
||||
container_name: immich-machine-learning
|
||||
image: altran1502/immich-machine-learning:v1.75.2
|
||||
image: altran1502/immich-machine-learning:v1.76.1
|
||||
volumes:
|
||||
- ${ROOT_FOLDER_HOST}/media/data/images/immich:/usr/src/app/upload
|
||||
- ${APP_DATA_DIR}/data/immich-ml-cache:/cache
|
||||
|
@ -114,7 +114,7 @@ services:
|
|||
|
||||
immich-web:
|
||||
container_name: immich-web
|
||||
image: altran1502/immich-web:v1.75.2
|
||||
image: altran1502/immich-web:v1.76.1
|
||||
restart: unless-stopped
|
||||
networks:
|
||||
- tipi_main_network
|
||||
|
|
30
apps/linkwarden/config.json
Normal file
30
apps/linkwarden/config.json
Normal file
|
@ -0,0 +1,30 @@
|
|||
{
|
||||
"$schema": "../schema.json",
|
||||
"name": "Linkwarden",
|
||||
"port": 8199,
|
||||
"available": true,
|
||||
"exposable": true,
|
||||
"id": "linkwarden",
|
||||
"tipi_version": 1,
|
||||
"supported_architectures": ["amd64"],
|
||||
"version": "v1.0.1",
|
||||
"categories": ["data"],
|
||||
"description": "A self-hosted, open-source collaborative bookmark manager to collect, organize and archive webpages.",
|
||||
"short_desc": "A self-hosted, open-source collaborative bookmark manager",
|
||||
"author": "Linkwarden",
|
||||
"source": "https://github.com/linkwarden/linkwarden",
|
||||
"form_fields": [
|
||||
{
|
||||
"type": "random",
|
||||
"label": "Linkwarden DB Password",
|
||||
"min": 32,
|
||||
"env_variable": "LINKWARDEN_DB_PASSWORD"
|
||||
},
|
||||
{
|
||||
"type": "random",
|
||||
"label": "Linkwarden Nextauth Secret",
|
||||
"min": 32,
|
||||
"env_variable": "LINKWARDEN_NEXTAUTH_SECRET"
|
||||
}
|
||||
]
|
||||
}
|
57
apps/linkwarden/docker-compose.yml
Normal file
57
apps/linkwarden/docker-compose.yml
Normal file
|
@ -0,0 +1,57 @@
|
|||
version: "3.7"
|
||||
|
||||
services:
|
||||
linkwarden:
|
||||
image: ghcr.io/selfhostedhub/linkwarden:v1.0.1
|
||||
container_name: linkwarden
|
||||
environment:
|
||||
- DATABASE_URL=postgresql://tipi:${LINKWARDEN_DB_PASSWORD}@linkwarden-db:5432/linkwarden
|
||||
- NEXTAUTH_SECRET=${LINKWARDEN_NEXTAUTH_SECRET}
|
||||
- NEXTAUTH_URL=${APP_PROTOCOL:-http}://${APP_DOMAIN}
|
||||
restart: unless-stopped
|
||||
volumes:
|
||||
- ${APP_DATA_DIR}/data/linkwarden:/data/data
|
||||
ports:
|
||||
- ${APP_PORT}:3000
|
||||
depends_on:
|
||||
- linkwarden-db
|
||||
networks:
|
||||
- tipi_main_network
|
||||
labels:
|
||||
# Main
|
||||
traefik.enable: true
|
||||
traefik.http.middlewares.linkwarden-web-redirect.redirectscheme.scheme: https
|
||||
traefik.http.services.linkwarden.loadbalancer.server.port: 3000
|
||||
# Web
|
||||
traefik.http.routers.linkwarden-insecure.rule: Host(`${APP_DOMAIN}`)
|
||||
traefik.http.routers.linkwarden-insecure.entrypoints: web
|
||||
traefik.http.routers.linkwarden-insecure.service: linkwarden
|
||||
traefik.http.routers.linkwarden-insecure.middlewares: linkwarden-web-redirect
|
||||
# Websecure
|
||||
traefik.http.routers.linkwarden.rule: Host(`${APP_DOMAIN}`)
|
||||
traefik.http.routers.linkwarden.entrypoints: websecure
|
||||
traefik.http.routers.linkwarden.service: linkwarden
|
||||
traefik.http.routers.linkwarden.tls.certresolver: myresolver
|
||||
# Local domain
|
||||
traefik.http.routers.linkwarden-local-insecure.rule: Host(`linkwarden.${LOCAL_DOMAIN}`)
|
||||
traefik.http.routers.linkwarden-local-insecure.entrypoints: web
|
||||
traefik.http.routers.linkwarden-local-insecure.service: linkwarden
|
||||
traefik.http.routers.linkwarden-local-insecure.middlewares: linkwarden-web-redirect
|
||||
# Local domain secure
|
||||
traefik.http.routers.linkwarden-local.rule: Host(`linkwarden.${LOCAL_DOMAIN}`)
|
||||
traefik.http.routers.linkwarden-local.entrypoints: websecure
|
||||
traefik.http.routers.linkwarden-local.service: linkwarden
|
||||
traefik.http.routers.linkwarden-local.tls: true
|
||||
|
||||
linkwarden-db:
|
||||
container_name: linkwarden-db
|
||||
image: postgres
|
||||
restart: unless-stopped
|
||||
environment:
|
||||
- POSTGRES_USER=tipi
|
||||
- POSTGRES_PASSWORD=${LINKWARDEN_DB_PASSWORD}
|
||||
- POSTGRES_DB=linkwarden
|
||||
volumes:
|
||||
- ${APP_DATA_DIR}/data/postgres:/var/lib/postgresql/data
|
||||
networks:
|
||||
- tipi_main_network
|
30
apps/linkwarden/metadata/description.md
Normal file
30
apps/linkwarden/metadata/description.md
Normal file
|
@ -0,0 +1,30 @@
|
|||
# Linkwarden
|
||||
|
||||
## [](https://github.com/linkwarden/linkwarden#intro--motivation)Intro & motivation
|
||||
|
||||
**Linkwarden is a self-hosted, open-source collaborative bookmark manager to collect, organize and archive webpages.** The objective is to organize useful webpages and articles you find across the web in one place, and since useful webpages can go away (see the inevitability of [Link Rot](https://www.howtogeek.com/786227/what-is-link-rot-and-how-does-it-threaten-the-web/)), Linkwarden also saves a copy of each webpage as a Screenshot and PDF, ensuring accessibility even if the original content is no longer available.
|
||||
|
||||
Additionally, Linkwarden is designed with collaboration in mind, sharing links with the public and/or allowing multiple users to work together seamlessly.
|
||||
|
||||
[![](https://github.com/linkwarden/linkwarden/raw/main/assets/showcase_image.png)](https://github.com/linkwarden/linkwarden/blob/main/assets/showcase_image.png)
|
||||
|
||||
**A bit of a "history"** Linkwarden has been completely rebuilt and redesigned from ground up, so pretty much the only thing it has in common with its predecessor is the idea behind it - bookmark management.
|
||||
|
||||
## Features
|
||||
|
||||
- ✅ Auto capture a screenshot and a PDF of each link.
|
||||
- ✅ Organize links by collection, name, description and multiple tags.
|
||||
- ✅ Collaborate on gathering links in a collection.
|
||||
- ✅ Customize the permissions of each member.
|
||||
- ✅ Share your collected links with the world.
|
||||
- ✅ Search, filter and sort by link details.
|
||||
- ✅ Responsive design and supports most browsers.
|
||||
|
||||
|
||||
## Screenshots
|
||||
|
||||
[![](https://github.com/linkwarden/linkwarden/raw/main/assets/collections.png)](https://github.com/linkwarden/linkwarden/blob/main/assets/collections.png)
|
||||
|
||||
[![](https://github.com/linkwarden/linkwarden/raw/main/assets/collaborators.png)](https://github.com/linkwarden/linkwarden/blob/main/assets/collaborators.png)
|
||||
|
||||
[![](https://github.com/linkwarden/linkwarden/raw/main/assets/link_details.png)](https://github.com/linkwarden/linkwarden/blob/main/assets/link_details.png)
|
BIN
apps/linkwarden/metadata/logo.jpg
Normal file
BIN
apps/linkwarden/metadata/logo.jpg
Normal file
Binary file not shown.
After Width: | Height: | Size: 77 KiB |
|
@ -5,8 +5,8 @@
|
|||
"available": true,
|
||||
"exposable": true,
|
||||
"id": "logto",
|
||||
"tipi_version": 6,
|
||||
"version": "1.7.0",
|
||||
"tipi_version": 7,
|
||||
"version": "1.8.0",
|
||||
"force_expose": true,
|
||||
"categories": [
|
||||
"security"
|
||||
|
|
|
@ -4,7 +4,7 @@ services:
|
|||
depends_on:
|
||||
logto-db:
|
||||
condition: service_healthy
|
||||
image: svhd/logto:1.7.0
|
||||
image: svhd/logto:1.8.0
|
||||
container_name: logto
|
||||
entrypoint: ["sh", "-c", "npm run cli db seed -- --swe && npm start"]
|
||||
ports:
|
||||
|
|
|
@ -10,7 +10,7 @@
|
|||
]
|
||||
},
|
||||
"id": "pihole",
|
||||
"tipi_version": 8,
|
||||
"tipi_version": 9,
|
||||
"version": "2023.05.2",
|
||||
"url_suffix": "/admin",
|
||||
"categories": [
|
||||
|
|
|
@ -18,12 +18,10 @@ services:
|
|||
environment:
|
||||
TZ: ${TZ}
|
||||
WEBPASSWORD: ${APP_PASSWORD}
|
||||
FTLCONF_REPLY_ADDR4: 10.21.21.201
|
||||
cap_add:
|
||||
- NET_ADMIN
|
||||
networks:
|
||||
tipi_main_network:
|
||||
ipv4_address: 10.21.21.201
|
||||
- tipi_main_network
|
||||
labels:
|
||||
# Main
|
||||
traefik.enable: true
|
||||
|
|
20
apps/stirling-pdf/config.json
Normal file
20
apps/stirling-pdf/config.json
Normal file
|
@ -0,0 +1,20 @@
|
|||
{
|
||||
"$schema": "../schema.json",
|
||||
"name": "Stirling-PDF",
|
||||
"port": 8234,
|
||||
"available": true,
|
||||
"exposable": true,
|
||||
"id": "stirling-pdf",
|
||||
"tipi_version": 1,
|
||||
"version": "0.13.0",
|
||||
"categories": [
|
||||
"data",
|
||||
"utilities"
|
||||
],
|
||||
"description": "Locally hosted web application that allows you to perform various operations on PDF files.",
|
||||
"short_desc": "Powerful locally hosted web based PDF manipulation tool.",
|
||||
"author": "Frooodle",
|
||||
"source": "https://github.com/Frooodle/Stirling-PDF/",
|
||||
"form_fields": []
|
||||
}
|
||||
|
40
apps/stirling-pdf/docker-compose.yml
Normal file
40
apps/stirling-pdf/docker-compose.yml
Normal file
|
@ -0,0 +1,40 @@
|
|||
version: "3.7"
|
||||
services:
|
||||
stirling-pdf:
|
||||
image: ghcr.io/frooodle/s-pdf:0.13.0
|
||||
restart: unless-stopped
|
||||
container_name: stirling-pdf
|
||||
privileged: true
|
||||
ports:
|
||||
- ${APP_PORT}:8080
|
||||
volumes:
|
||||
- ${APP_DATA_DIR}/datatrainingData:/usr/share/tesseract-ocr/4.00/tessdata #Required for extra OCR languages
|
||||
- ${APP_DATA_DIR}/dataextraConfigs:/configs
|
||||
- ${APP_DATA_DIR}/datacustomFiles:/customFiles/
|
||||
networks:
|
||||
- tipi_main_network
|
||||
labels:
|
||||
# Main
|
||||
traefik.enable: true
|
||||
traefik.http.middlewares.stirling-pdf-web-redirect.redirectscheme.scheme: https
|
||||
traefik.http.services.stirling-pdf.loadbalancer.server.port: 8080
|
||||
# Web
|
||||
traefik.http.routers.stirling-pdf-insecure.rule: Host(`${APP_DOMAIN}`)
|
||||
traefik.http.routers.stirling-pdf-insecure.entrypoints: web
|
||||
traefik.http.routers.stirling-pdf-insecure.service: stirling-pdf
|
||||
traefik.http.routers.stirling-pdf-insecure.middlewares: stirling-pdf-web-redirect
|
||||
# Websecure
|
||||
traefik.http.routers.stirling-pdf.rule: Host(`${APP_DOMAIN}`)
|
||||
traefik.http.routers.stirling-pdf.entrypoints: websecure
|
||||
traefik.http.routers.stirling-pdf.service: stirling-pdf
|
||||
traefik.http.routers.stirling-pdf.tls.certresolver: myresolver
|
||||
# Local domain
|
||||
traefik.http.routers.stirling-pdf-local-insecure.rule: Host(`stirling-pdf.${LOCAL_DOMAIN}`)
|
||||
traefik.http.routers.stirling-pdf-local-insecure.entrypoints: web
|
||||
traefik.http.routers.stirling-pdf-local-insecure.service: stirling-pdf
|
||||
traefik.http.routers.stirling-pdf-local-insecure.middlewares: stirling-pdf-web-redirect
|
||||
# Local domain secure
|
||||
traefik.http.routers.stirling-pdf-local.rule: Host(`stirling-pdf.${LOCAL_DOMAIN}`)
|
||||
traefik.http.routers.stirling-pdf-local.entrypoints: websecure
|
||||
traefik.http.routers.stirling-pdf-local.service: stirling-pdf
|
||||
traefik.http.routers.stirling-pdf-local.tls: true
|
64
apps/stirling-pdf/metadata/description.md
Normal file
64
apps/stirling-pdf/metadata/description.md
Normal file
|
@ -0,0 +1,64 @@
|
|||
<p align="center"><img src="https://raw.githubusercontent.com/Frooodle/Stirling-PDF/main/docs/stirling.png" width="80" ><br><h1 align="center">Stirling-PDF</h1>
|
||||
</p>
|
||||
|
||||
This is a powerful locally hosted web based PDF manipulation tool using docker that allows you to perform various operations on PDF files, such as splitting merging, converting, reorganizing, adding images, rotating, compressing, and more. This locally hosted web application started as a 100% ChatGPT-made application and has evolved to include a wide range of features to handle all your PDF needs.
|
||||
|
||||
Stirling PDF makes no outbound calls for any record keeping or tracking.
|
||||
|
||||
All files and PDFs are either purely client side, in server memory only during the execution of the task or within a temporay file only for execution of the task.
|
||||
Any file which has been downloaded by the user will have already been deleted from the server by that time.
|
||||
|
||||
Feel free to request any features or bug fixes either in github issues or our [Discord](https://discord.gg/Cn8pWhQRxZ)
|
||||
|
||||
## Features
|
||||
- Full interactive GUI for merging/splitting/rotating/moving PDFs and their pages.
|
||||
- Split PDFs into multiple files at specified page numbers or extract all pages as individual files.
|
||||
- Merge multiple PDFs together into a single resultant file
|
||||
- Convert PDFs to and from images
|
||||
- Reorganize PDF pages into different orders.
|
||||
- Add/Generate signatures
|
||||
- Format PDFs into a multi-paged page
|
||||
- Scale page contents size by set %
|
||||
- Adjust Contrast
|
||||
- Crop PDF
|
||||
- Auto Split PDF (With physically scanned page dividers)
|
||||
- Flatten PDFs
|
||||
- Repair PDFs
|
||||
- Detect and remove blank pages
|
||||
- Compare 2 PDFs and show differences in text
|
||||
- Add images to PDFs
|
||||
- Rotating PDFs in 90 degree increments.
|
||||
- Compressing PDFs to decrease their filesize. (Using OCRMyPDF)
|
||||
- Add and remove passwords
|
||||
- Set PDF Permissions
|
||||
- Add watermark(s)
|
||||
- Convert Any common file to PDF (using LibreOffice)
|
||||
- Convert PDF to Word/Powerpoint/Others (using LibreOffice)
|
||||
- Convert HTML to PDF
|
||||
- URL to PDF
|
||||
- Extract images from PDF
|
||||
- Extract images from Scans
|
||||
- Add page numbers
|
||||
- Auto rename file by detecting PDF header text
|
||||
- OCR on PDF (Using OCRMyPDF)
|
||||
- PDF/A conversion (Using OCRMyPDF)
|
||||
- Edit metadata
|
||||
- Dark mode support.
|
||||
- Custom download options (see [here](https://github.com/Frooodle/Stirling-PDF/blob/main/images/settings.png) for example)
|
||||
- Parallel file processing and downloads
|
||||
- API for integration with external scripts
|
||||
|
||||
For a overview of the tasks and the technology each uses please view [groups.md](https://github.com/Frooodle/Stirling-PDF/blob/main/Groups.md)
|
||||
Hosted instance/demo of the app can be seen [here](https://pdf.adminforge.de/) hosted by the team at adminforge.de
|
||||
|
||||
## Technologies used
|
||||
- Spring Boot + Thymeleaf
|
||||
- PDFBox
|
||||
- IText7
|
||||
- [LibreOffice](https://www.libreoffice.org/discover/libreoffice/) for advanced conversions
|
||||
- [OcrMyPdf](https://github.com/ocrmypdf/OCRmyPDF)
|
||||
- HTML, CSS, JavaScript
|
||||
- Docker
|
||||
- PDF.js
|
||||
- PDF-LIB.js
|
||||
|
BIN
apps/stirling-pdf/metadata/logo.jpg
Normal file
BIN
apps/stirling-pdf/metadata/logo.jpg
Normal file
Binary file not shown.
After Width: | Height: | Size: 18 KiB |
|
@ -5,8 +5,8 @@
|
|||
"available": true,
|
||||
"exposable": true,
|
||||
"id": "tandoor",
|
||||
"tipi_version": 2,
|
||||
"version": "1.5.5",
|
||||
"tipi_version": 3,
|
||||
"version": "1.5.6",
|
||||
"categories": [
|
||||
"data"
|
||||
],
|
||||
|
|
|
@ -2,7 +2,7 @@ version: "3.7"
|
|||
services:
|
||||
tandoor:
|
||||
container_name: tandoor
|
||||
image: ghcr.io/tandoorrecipes/recipes:1.5.5
|
||||
image: ghcr.io/tandoorrecipes/recipes:1.5.6
|
||||
volumes:
|
||||
- ${APP_DATA_DIR}/data/staticfiles:/opt/recipes/staticfiles
|
||||
- ${APP_DATA_DIR}/data/mediafiles:/opt/recipes/mediafiles
|
||||
|
|
|
@ -10,8 +10,8 @@
|
|||
]
|
||||
},
|
||||
"id": "transmission",
|
||||
"tipi_version": 7,
|
||||
"version": "4.0.3",
|
||||
"tipi_version": 8,
|
||||
"version": "4.0.4",
|
||||
"categories": [
|
||||
"utilities"
|
||||
],
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
version: "3.7"
|
||||
services:
|
||||
transmission:
|
||||
image: lscr.io/linuxserver/transmission:4.0.3
|
||||
image: lscr.io/linuxserver/transmission:4.0.4
|
||||
container_name: transmission
|
||||
dns:
|
||||
- ${DNS_IP}
|
||||
|
|
16
apps/viewtube/config.json
Normal file
16
apps/viewtube/config.json
Normal file
|
@ -0,0 +1,16 @@
|
|||
{
|
||||
"$schema": "../schema.json",
|
||||
"name": "ViewTube",
|
||||
"port": 8180,
|
||||
"available": true,
|
||||
"exposable": true,
|
||||
"id": "viewtube",
|
||||
"tipi_version": 1,
|
||||
"version": "0.12.2",
|
||||
"categories": ["media"],
|
||||
"description": "The open source, privacy-conscious way to enjoy your favorite YouTube content.",
|
||||
"short_desc": "The open source, privacy-conscious way to enjoy your favorite YouTube content.",
|
||||
"author": "ViewTube",
|
||||
"source": "https://github.com/ViewTube/viewtube",
|
||||
"form_fields": []
|
||||
}
|
66
apps/viewtube/docker-compose.yml
Normal file
66
apps/viewtube/docker-compose.yml
Normal file
|
@ -0,0 +1,66 @@
|
|||
version: '3'
|
||||
|
||||
services:
|
||||
viewtube:
|
||||
restart: unless-stopped
|
||||
container_name: viewtube
|
||||
image: mauriceo/viewtube:0.12.2
|
||||
depends_on:
|
||||
- viewtube-mongodb
|
||||
- viewtube-redis
|
||||
volumes:
|
||||
- ${APP_DATA_DIR}/data/viewtube:/data
|
||||
environment:
|
||||
- VIEWTUBE_DATABASE_HOST=viewtube-mongodb
|
||||
- VIEWTUBE_REDIS_HOST=viewtube-redis
|
||||
- VIEWTUBE_SECURE=true
|
||||
- VIEWTUBE_CORS_ORIGIN=${APP_PROTOCOL:-http}://${APP_DOMAIN}
|
||||
# - VIEWTUBE_YOUTUBE_COOKIE=
|
||||
# - VIEWTUBE_YOUTUBE_IDENTIFIER=
|
||||
ports:
|
||||
- ${APP_PORT}:8066
|
||||
networks:
|
||||
- tipi_main_network
|
||||
labels:
|
||||
# Main
|
||||
traefik.enable: true
|
||||
traefik.http.middlewares.viewtube-web-redirect.redirectscheme.scheme: https
|
||||
traefik.http.services.viewtube.loadbalancer.server.port: 8066
|
||||
# Web
|
||||
traefik.http.routers.viewtube-insecure.rule: Host(`${APP_DOMAIN}`)
|
||||
traefik.http.routers.viewtube-insecure.entrypoints: web
|
||||
traefik.http.routers.viewtube-insecure.service: viewtube
|
||||
traefik.http.routers.viewtube-insecure.middlewares: viewtube-web-redirect
|
||||
# Websecure
|
||||
traefik.http.routers.viewtube.rule: Host(`${APP_DOMAIN}`)
|
||||
traefik.http.routers.viewtube.entrypoints: websecure
|
||||
traefik.http.routers.viewtube.service: viewtube
|
||||
traefik.http.routers.viewtube.tls.certresolver: myresolver
|
||||
# Local domain
|
||||
traefik.http.routers.viewtube-local-insecure.rule: Host(`viewtube.${LOCAL_DOMAIN}`)
|
||||
traefik.http.routers.viewtube-local-insecure.entrypoints: web
|
||||
traefik.http.routers.viewtube-local-insecure.service: viewtube
|
||||
traefik.http.routers.viewtube-local-insecure.middlewares: viewtube-web-redirect
|
||||
# Local domain secure
|
||||
traefik.http.routers.viewtube-local.rule: Host(`viewtube.${LOCAL_DOMAIN}`)
|
||||
traefik.http.routers.viewtube-local.entrypoints: websecure
|
||||
traefik.http.routers.viewtube-local.service: viewtube
|
||||
traefik.http.routers.viewtube-local.tls: true
|
||||
|
||||
viewtube-mongodb:
|
||||
container_name: viewtube-mongodb
|
||||
restart: unless-stopped
|
||||
image: mongo:5
|
||||
networks:
|
||||
- tipi_main_network
|
||||
volumes:
|
||||
- ${APP_DATA_DIR}/data/db:/data/db
|
||||
|
||||
viewtube-redis:
|
||||
container_name: viewtube-redis
|
||||
restart: unless-stopped
|
||||
image: redis:7
|
||||
networks:
|
||||
- tipi_main_network
|
||||
volumes:
|
||||
- ${APP_DATA_DIR}/data/redis:/data
|
44
apps/viewtube/metadata/description.md
Normal file
44
apps/viewtube/metadata/description.md
Normal file
|
@ -0,0 +1,44 @@
|
|||
ViewTube is an alternative YouTube frontend that lets you watch, search and discover YouTube videos without ads or tracking. It's built to be mobile and desktop friendly, with dark and light themes, and a touch-friendly video player with gestures. You can create an account separately from YouTube, read comments, watch playlists, subscribe to channels and receive push notifications for new uploads It's built using [Nuxt](https://nuxt.com/) and [Nest](https://nestjs.com/).
|
||||
|
||||
You can find the documentation at [viewtube.wiki](https://viewtube.wiki)
|
||||
|
||||
## Features
|
||||
|
||||
- Watch videos without ads or tracking
|
||||
- Built from the ground up to be mobile and desktop friendly
|
||||
- Dark and light themes
|
||||
- Touch friendly video player with gestures
|
||||
- Supports loop, speed, autoplay and volume
|
||||
- Create an account separately from Youtube
|
||||
- Read comments
|
||||
- Search for videos
|
||||
- Watch playlists
|
||||
- Subscribe to channels and see their latest uploads
|
||||
- Receive push notifications for subscribed channels
|
||||
- Integrated SponsorBlock support
|
||||
|
||||
## Where does ViewTube get the data from?
|
||||
|
||||
ViewTube does not use the official Youtube API. It instead scrapes the data from the website using a combination of custom built tools and the following open source libraries.
|
||||
|
||||
- [node-ytdl-core](https://github.com/fent/node-ytdl-core)
|
||||
- [node-ytsr](https://github.com/TimeForANinja/node-ytsr)
|
||||
- [node-ytpl](https://github.com/TimeForANinja/node-ytpl)
|
||||
- [yt-comment-scraper](https://github.com/FreeTubeApp/yt-comment-scraper)
|
||||
- [yt-channel-info](https://github.com/FreeTubeApp/yt-channel-info)
|
||||
|
||||
## Screenshots
|
||||
|
||||
### Homepage
|
||||
|
||||
[![Screenshot-Homepage](https://camo.githubusercontent.com/7ca1b34ee39d918f86a7043a3ffae08b574d5630975255eb8840536e7e169248/68747470733a2f2f692e6962622e636f2f476b35744b51372f6c78743179306d6b2e6a7067)](https://camo.githubusercontent.com/7ca1b34ee39d918f86a7043a3ffae08b574d5630975255eb8840536e7e169248/68747470733a2f2f692e6962622e636f2f476b35744b51372f6c78743179306d6b2e6a7067)
|
||||
|
||||
### Video
|
||||
|
||||
[![Screenshot-Video](https://camo.githubusercontent.com/07ecf2f4a9e61eb326d2125375f674020cbf97b1a998defdeb21fd8d1aa6f8f7/68747470733a2f2f692e6962622e636f2f52544c327633662f6732656a663777662e6a7067)](https://camo.githubusercontent.com/07ecf2f4a9e61eb326d2125375f674020cbf97b1a998defdeb21fd8d1aa6f8f7/68747470733a2f2f692e6962622e636f2f52544c327633662f6732656a663777662e6a7067)
|
||||
|
||||
### Channel
|
||||
|
||||
[![Screenshot-Channel](https://camo.githubusercontent.com/b50d3f852326d5436cc32507eb2ee48d036092ae1cba3bc61485a8a4661d0ffd/68747470733a2f2f692e6962622e636f2f68396d663179642f366a3435616f35722e6a7067)](https://camo.githubusercontent.com/b50d3f852326d5436cc32507eb2ee48d036092ae1cba3bc61485a8a4661d0ffd/68747470733a2f2f692e6962622e636f2f68396d663179642f366a3435616f35722e6a7067)
|
||||
|
||||
|
BIN
apps/viewtube/metadata/logo.jpg
Normal file
BIN
apps/viewtube/metadata/logo.jpg
Normal file
Binary file not shown.
After Width: | Height: | Size: 16 KiB |
37
apps/viewtube/metadata/optional.md
Normal file
37
apps/viewtube/metadata/optional.md
Normal file
|
@ -0,0 +1,37 @@
|
|||
## (Optional) Use cookies from a real account
|
||||
|
||||
You can provide your own cookies to circumvent any Rate Limiting Issue.
|
||||
|
||||
### YouTube cookie
|
||||
|
||||
- Navigate to YouTube in a web browser
|
||||
- Log in, preferrably with a separate account you don't use often
|
||||
- Open up the dev tools console
|
||||
- Type `document.cookie`
|
||||
- Copy the entire response into the `VIEWTUBE_YOUTUBE_COOKIE` environment variable
|
||||
|
||||
### YouTube identifier
|
||||
|
||||
- Navigate to a video
|
||||
- Right click and click "view source"
|
||||
- Press CTRL+F to search for "ID\_TOKEN"
|
||||
- Copy this value into the `VIEWTUBE_YOUTUBE_IDENTIFIER` environment variable
|
||||
|
||||
```
|
||||
"form_fields": [
|
||||
{
|
||||
"type": "text",
|
||||
"label": "Youtube Cookie",
|
||||
"hint": "Optional, Read below",
|
||||
"required": false,
|
||||
"env_variable": "VIEWTUBE_YOUTUBE_COOKIE"
|
||||
},
|
||||
{
|
||||
"type": "text",
|
||||
"label": "Youtube Identifier",
|
||||
"hint": "Optional, Read below",
|
||||
"required": false,
|
||||
"env_variable": "VIEWTUBE_YOUTUBE_IDENTIFIER"
|
||||
}
|
||||
]
|
||||
```
|
|
@ -5,8 +5,8 @@
|
|||
"no_gui": true,
|
||||
"port": 9993,
|
||||
"id": "zerotier",
|
||||
"tipi_version": 3,
|
||||
"version": "1.10.6",
|
||||
"tipi_version": 4,
|
||||
"version": "1.12.1",
|
||||
"categories": [
|
||||
"network",
|
||||
"security"
|
||||
|
|
|
@ -2,7 +2,7 @@ version: "3.7"
|
|||
services:
|
||||
zerotier:
|
||||
container_name: zerotier
|
||||
image: zerotier/zerotier:1.10.6
|
||||
image: zerotier/zerotier:1.12.1
|
||||
restart: on-failure
|
||||
command: "${NETWORK_ID}"
|
||||
cap_add:
|
||||
|
|
|
@ -5,8 +5,8 @@
|
|||
"available": true,
|
||||
"exposable": true,
|
||||
"id": "zipline",
|
||||
"tipi_version": 4,
|
||||
"version": "3.7.3",
|
||||
"tipi_version": 5,
|
||||
"version": "3.7.4",
|
||||
"categories": [
|
||||
"media"
|
||||
],
|
||||
|
|
|
@ -3,7 +3,7 @@ version: '3.7'
|
|||
services:
|
||||
zipline:
|
||||
container_name: zipline
|
||||
image: ghcr.io/diced/zipline:3.7.3
|
||||
image: ghcr.io/diced/zipline:3.7.4
|
||||
ports:
|
||||
- '${APP_PORT}:3000'
|
||||
restart: unless-stopped
|
||||
|
|
Loading…
Reference in New Issue
Block a user