PictShare can be configured using a single file: inc/config.inc.php
In this file you can set the following options. For a simple working example config file check out /inc/example.config.inc.php
Option | value type | What it does |
---|---|---|
URL | string | Sets the URL that will be shown to users for each upload. Must be set and must have tailing slash. eg: http://pictshare.local/ |
LOG_UPLOADER | bool | If set to true, all IP addresses of uploaders will be stored in /data/uploads.csv |
FFMPEG_BINARY | string | If you installed ffmpeg on your machine, you can set the binary path here. This allows devices like the Raspberry Pi to be used with PictShare although I wouldn't recommend it because of the sloooooow conversion speed |
PNG_COMPRESSION | int | 0 (no compression) to 9 (best compression) Note that for PNGs the compression doesn't affect the quality of the image, just the en/decode speed and file size |
JPEG_COMPRESSION | int | 0 (worst quality) to 100 (best quality) |
WEBP_COMPRESSION | int | 0 (worst quality, smallest file) to 100 (best quality, biggest file) |
MASTER_DELETE_CODE | string | If set, this code will be accepted to delete any image by adding "delete_yourmasterdeletecode" to any image |
MASTER_DELETE_IP | IP addr | If set, allows deletion of image no matter what delete code you provided if request is coming from this single IP |
UPLOAD_FORM_LOCATION | string | If set, will only show the upload form if this url is requested. eg if you set it to /secret/upload then you only see the form if you go to http://your.pictshare.server/secret/upload but bare in mind that the uploads via API will still work for anyone |
ALLOWED_SUBNET | IPv4 or IPv6 CIDR | If set, will limit uploads to IPs that match this CIDR |
ALWAYS_WEBP | bool | If set to true , JPGs will always be served as WebP, if the client supports it (if image/webp is in header HTTP_ACCEPT ) |
UPLOAD_CODE | string | If set, all uploads require this code via GET or POST variable "uploadcode" to succeed |
REDIS_SERVER (NOT IMPLEMENTED) | IP | If you define a REDIS server IP here, it will enable you to use the FFMPEG Worker |
UPLOAD_QUOTA (NOT IMPLEMENTED) | int | Size in MB. If set, will only allow uploads if combined size of uploads on Server is smaller than this value. Does not account for ALT_FOLDER data and resized versions of original uploads won't be added to calculation |
MAX_RESIZED_IMAGES (NOT IMPLEMENTED | string | If set, limits count of resized images/videos per file on server |
PictShare is not limited to handling just images. Various content types including txt,mp4 and even url shortenings are supported. By default all of these are enabled but if you only need one or more, you can whitelist them and all others won't be accessible.
Option | value type | What it does |
---|---|---|
CONTENTCONTROLLERS | CSV string | If set, will whitelist content controllers for your instance. Must be uppercase and can be comma separated. Example: Only Pictures: IMAGE , Pictures and Videos: IMAGE,VIDEO |
Available values for the CONTENTCONTROLLERS
setting are:
- IMAGE
- TEXT
- VIDEO
- URL
PictShare has an extention system that allows handling of multiple storage solutions or backends. If a requested file is not found locally, PictShare will ask all configured storage controllers if they have it, then download and serve it to the user.
If you want data on your external storage to be encrypted, you can set the following config setting. En/decryption is done automatically on up/download.
Option | value type | What it does |
---|---|---|
ENCRYPTION_KEY | base64 string | The key used to encrypt/decrypt files stored in storage controllers. See /rtfm/ENCRYPTION.md for setup guide |
The ALT_FOLDER option will copy every uploaded file from PictShare to a local path of your choice. This can be used to allow two instances of PictShare to serve the same data. Eg. you can mount a NFS share on your server and configure the ALT_FOLDER variable to point to that folder. All images are then stored on the NFS as well as your PictShare server.
Option | value type | What it does |
---|---|---|
ALT_FOLDER | string | All uploaded files will be copied to this location. This location can be a mounted network share (eg NFS or FTP, etc). If a file is not found in the normal upload direcotry, ALT_FOLDER will be checked. more info about scaling PictShare |
You can also store all uploaded files on S3 or S3 compatible storage like Minio. This can also be used to scale your PictShare instance and have multiple distributed servers to serve the same files.
Option | value type | What it does |
---|---|---|
S3_BUCKET | string | Name of your S3 bucket |
S3_ACCESS_KEY | string | Access key for your bucket |
S3_SECRET_KEY | string | Secret key for your bucket |
S3_ENDPOINT | URL | Server URL. If you're using S3 compatible software like Minio you can enter the URL here |
S3_REGION | string | Region of your bucket |
Oldschool, insecure and not that fast. But if you use it in combination with Encryption this could be OK I guess. I don't judge. This probably requires the php-ftp package but on some platforms it's included in the php-common package.
Option | value type | What it does |
---|---|---|
FTP_SERVER | string | IP or hostname of your FTP Server |
FTP_PORT | int | Port number of your FTP Server. Defaults to 21 |
FTP_SSL | bool | If your FTP server supports SSL-FTP (note: not sFTP! not the same), set it to true |
FTP_USER | string | FTP Username |
FTP_PASS | string | FTP Password |
FTP_BASEDIR | string | Base path where files will be stored. Must end with / eg /web/pictshare/ |
FTP_PASSIVEMODE | bool | Wether to use passive mode or not. If you have troubles with uploading, switch this setting maybe |
For faster video en/transcoding there is a php script called /tools/ffmpeg_worker.php
which is a CLI application looping every second, checking the REDIS Queue for encoding tasks.
This way the rendering queue is detached from php-fpm since PHP can't have threaded workloads and it will make sure a encoding task like resizing of a video won't block the rest of the site from functioning.
For the FFMPEG Worker to be enabled, the config option REDIS_SERVER
must be set to the IP Address of a redis server.