Lipupini is a public domain platform for organizing computer files like images, videos, sounds and writings that you might want to display under your domain on the Internet. Lipupini aims to support RSS and Fediverse protocols.
OTHER License
Lipupini is a public domain platform for organizing and displaying digital art such as images, videos, sounds and writings that you might want to display under your domain on the Internet. Lipupini aims to support RSS and Fediverse protocols.
For displaying a media portfolio or posts on the Internet, despite currently limited ActivityPub support the latest release of Lipupini is considered to be production-ready. The demo site is running the demo
branch which is usually ahead of the latest release.
1.x
, avoid using the demo
branch in production unless you are interested in keeping up with development and have a mechanism for rollbacks..lipupini/files.json
with captions, and delete the example collection.Updating Lipupini can be as simple as running git pull
from your environment depending on the setup.
useFfmpeg
enabled, video thumbnails and audio waveforms can be generated automatically."hidden"
and "unlisted"
options in files.json
.lipupini
folder, making account collections completely portable.system/config/state.php
for the option.system/config/state.php
to bust that cache!Make sure all dependencies are installed first.
cd
into the project rootgit clone https://github.com/lipupini/lipupini.git
cd lipupini
cd module/Lipupini
composer install
cd ../..
cd module/Lukinview/webroot
PHP_CLI_SERVER_WORKERS=2 php -S localhost:4000 index.php
Say you have a folder of awesome photos at /home/sally/Pictures/AwesomePhotos
Your Lipupini installation is at /opt/webapp/lipupini
/home/sally/Pictures/AwesomeCollection
and put them into the collection directory /opt/webapp/lipupini/collection/sally
either by copying them:cp -R /home/sally/Pictures/AwesomeCollection /opt/webapp/lipupini/collection/sally
or symlinking them:
ln -s /home/sally/Pictures/AwesomeCollection /opt/webapp/lipupini/collection/sally
.lipupini
folder for the collectioncd /opt/webapp/lipupini
bin/generate-keys.php sally
bin/create-files-json.php sally
Save a file called avatar.png
at /opt/webapp/lipupini/collection/sally/.lipupini/avatar.png
Edit the file at /opt/webapp/lipupini/collection/sally/.lipupini/files.json
to add captions (this is optional)
Delete the example collection:
rm -r collection/example
In addition to copying or symlinking, see collection/README.md#vision for ideas on other ways to keep these directories in sync.
ActivityPub transactions should occur via HTTPS per spec. https://ngrok.com can be used to get up and running quickly for development.
For example, after starting Lipupini you can run this command:
ngrok http 4000
Continuing with the example above in "Add Your Collection," if your Ngrok URL becomes https://f674-73.ngrok-free.app
, you should then be able to query @[email protected]
from another Fediverse client once the collection is initialized.
Using Ngrok, with an upgraded plan you can setup a fairly restrictive port firewall, configure it to run on startup, and reliably host any domain with HTTPS.
"Lipupini" is a word formed by combining other words (portmanteau), and "lipu pini" in this context translates to "past document" in Toki Pona core. Lipupini is for organizing computer files like images, videos, sounds and writings that you might want to display under your domain on the Internet.
Here is what it can look like so far: https://lipupini-demo.dup.bz/@example
Though ActivityPub implementation is currently limited, the demo is searchable in properly-configured Fediverse clients @[email protected]
NOTE: Please use activitypub.academy Mastondon server for testing, as this is a test server.
The demo is the demo
branch running on Apache2. If you already have Apache2 configured to serve PHP, you can install Composer dependencies and point the virtual host's DocumentRoot
to webroot
and it should "just work."
You are welcome to fork it, change it, add modules! Please don't hesitate to make a PR that includes your own modules - it could be shipped with or integrated into core.
I hope that the module architecture makes for a good workflow, especially being open to merging new modules. In theory, modules could just as easily be Composer packages and not have a module
directory at all. The current architecture can still work seamlessly with the Composer pattern as well.
Email apps [at] dup.bz if you'd like a point of contact or post in discussions! Please reach out if you begin to find any aspect frustrating or feel that it should be done in a different way.
If you want to use Lipupini for your artist portfolio or business website, I will support your effort.
VanJS: https://vanjs.org
Markdown parser: https://parsedown.org
Image processor: https://github.com/php-imagine/Imagine
Arrow icons: https://www.svgrepo.com/author/Pictogrammers
ActivityPub inspiration: @[email protected] & Landrok's ActivityPub library
.lipupini
folderbin/generate-files-json.php
date
files.json
does not exist in collectionffmpeg
interfaces as long as symlinking is supported.readline
support in a custom confirm
routine. If readline
is not available a 10-second timer will be indicated that can be cancelled with CTRL+C.files.json
bin/caption.php <collection> <filename> <caption>
bin/process-media.php
after uploading is a solution.