AI prompts
base on Self-hosted file converter server Morphos Server
===============
![tests](https://github.com/danvergara/morphos/actions/workflows/test.yml/badge.svg)
[![Release](https://img.shields.io/github/release/danvergara/morphos.svg?label=Release)](https://github.com/danvergara/morphos/releases)
<p align="center">
<img style="float: right;" src="screenshots/morphos.jpg" alt="morphos logo"/ width=200>
</p>
__Self-Hosted file converter server.__
## Table of contents
- [Overview](#overview)
- [Installation](#installation)
- [Docker](#docker)
- [Features](#features)
- [Usage](#usage)
- [Supported Files](#supported-files-and-convert-matrix)
- [Images To Images](#images-x-images)
- [Images To Documents](#images-x-documents)
- [Documents To Images](#documents-x-images)
- [License](#license)
## Overview
Today we are forced to rely on third party services to convert files to other formats. This is a serious threat to our privacy, if we use such services to convert files with highly sensitive personal data. It can be used against us, sooner or later.
Morphos server aims to solve the problem mentioned above, by providing a self-hosted server to convert files privately. The project provides an user-friendly web UI.
For now, Morphos only supports images. Documents will be added soon.
## Installation
### Docker
```
docker run --rm -p 8080:8080 -v /tmp:/tmp ghcr.io/danvergara/morphos-server:latest
```
## Features
- Serves a nice web UI
- Simple installation (distributed as a Docker image)
## Usage
### HTML form
Run the server as mentioned above and open up your favorite browser. You'll see something like this:
<img src="screenshots/morphos.png"/>
Hit the file input section on the form to upload an image.
<img src="screenshots/upload_file_morphos.png"/>
You'll see the filed uploaded in the form.
<img src="screenshots/file_uploaded_morphos.png"/>
Then, you can select from a variety of other formats you can convert the current image to.
<img src="screenshots/select_options_morphos.png"/>
After hitting `Upload` button you will see a view like the one below, asking you to download the converted file.
<img src="screenshots/file_converted_morphos.png"/>
A modal will pop up with a preview of the converted image.
<img src="screenshots/modal_morphos.png"/>
### API
You can consume morphos through an API, so other systems can integrate with it.
##### Endpoints
`GET /api/v1/formats`
This returns a JSON that shows the supported formats at the moment.
e.g.
```
{"documents": ["docx", "xls"], "image": ["png", "jpeg"]}
```
`POST /api/v1/upload`
This is the endpoint that converts files to a desired format. It is basically a multipart form data in a POST request. The API simply writes the converted files to the response body.
e.g.
```
curl -F 'targetFormat=epub' -F 'uploadFile=@/path/to/file/foo.pdf' localhost:8080/api/v1/upload --output foo.epub
```
The form fields are:
* targetFormat: the target format the file will be converted to
* uploadFile: The path to the file that is going to be converted
### Configuration
The configuration is only done by the environment varibles shown below.
* `MORPHOS_PORT` changes the port the server will listen to (default is `8080`)
* `MORPHOS_UPLOAD_PATH` defines the temporary path the files will be stored on disk (default is `/tmp`)
## Supported Files And Convert Matrix
### Images X Images
| | PNG | JPEG | GIF | WEBP | TIFF | BMP | AVIF |
|-------|-------|--------|-------|--------|--------|-------|--------|
| PNG | | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| JPEG | ✅ | | ✅ | ✅ | ✅ | ✅ | ✅ |
| GIF | ✅ | ✅ | | ✅ | ✅ | ✅ | ✅ |
| WEBP | ✅ | ✅ | ✅ | | ✅ | ✅ | ✅ |
| TIFF | ✅ | ✅ | ✅ | ✅ | | ✅ | ✅ |
| BMP | ✅ | ✅ | ✅ | ✅ | ✅ | | ✅ |
| AVIF | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | |
### Images X Documents
| | PDF |
|-------|-------|
| PNG | ✅ |
| JPEG | ✅ |
| GIF | ✅ |
| WEBP | ✅ |
| TIFF | ✅ |
| BMP | ✅ |
| AVIF | |
## Documents X Images
| | PNG | JPEG | GIF | WEBP | TIFF | BMP | AVIF |
| --- | --- | ---- | --- | ---- | ---- | --- | ---- |
| PDF | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | |
## Documents X Documents
| | DOCX | PDF | XLSX | CSV |
| ---- | ---- | --- | ---- | --- |
| PDF | ✅ | | | |
| DOCX | | ✅ | | |
| CSV | | | ✅ | |
| XLSX | | | | ✅ |
## Ebooks X Ebooks
| | MOBI | EPUB |
| ---- | ---- | --- |
| EPUB | ✅ | |
| MOBI | | ✅ |
## Documents X Ebooks
| | EPUB | MOBI |
| ---- | ---- | --- |
| PDF | ✅ | ✅ |
| DOCX | | |
| CSV | | |
| XLSX | | |
## Ebooks X Documents
| | PDF |
| ---- | ---- |
| EPUB | ✅ |
| MOBI | ✅ |
## License
The MIT License (MIT). See [LICENSE](LICENSE) file for more details.
", Assign "at most 3 tags" to the expected json: {"id":"9459","tags":[]} "only from the tags list I provide: [{"id":77,"name":"3d"},{"id":89,"name":"agent"},{"id":17,"name":"ai"},{"id":54,"name":"algorithm"},{"id":24,"name":"api"},{"id":44,"name":"authentication"},{"id":3,"name":"aws"},{"id":27,"name":"backend"},{"id":60,"name":"benchmark"},{"id":72,"name":"best-practices"},{"id":39,"name":"bitcoin"},{"id":37,"name":"blockchain"},{"id":1,"name":"blog"},{"id":45,"name":"bundler"},{"id":58,"name":"cache"},{"id":21,"name":"chat"},{"id":49,"name":"cicd"},{"id":4,"name":"cli"},{"id":64,"name":"cloud-native"},{"id":48,"name":"cms"},{"id":61,"name":"compiler"},{"id":68,"name":"containerization"},{"id":92,"name":"crm"},{"id":34,"name":"data"},{"id":47,"name":"database"},{"id":8,"name":"declarative-gui "},{"id":9,"name":"deploy-tool"},{"id":53,"name":"desktop-app"},{"id":6,"name":"dev-exp-lib"},{"id":59,"name":"dev-tool"},{"id":13,"name":"ecommerce"},{"id":26,"name":"editor"},{"id":66,"name":"emulator"},{"id":62,"name":"filesystem"},{"id":80,"name":"finance"},{"id":15,"name":"firmware"},{"id":73,"name":"for-fun"},{"id":2,"name":"framework"},{"id":11,"name":"frontend"},{"id":22,"name":"game"},{"id":81,"name":"game-engine "},{"id":23,"name":"graphql"},{"id":84,"name":"gui"},{"id":91,"name":"http"},{"id":5,"name":"http-client"},{"id":51,"name":"iac"},{"id":30,"name":"ide"},{"id":78,"name":"iot"},{"id":40,"name":"json"},{"id":83,"name":"julian"},{"id":38,"name":"k8s"},{"id":31,"name":"language"},{"id":10,"name":"learning-resource"},{"id":33,"name":"lib"},{"id":41,"name":"linter"},{"id":28,"name":"lms"},{"id":16,"name":"logging"},{"id":76,"name":"low-code"},{"id":90,"name":"message-queue"},{"id":42,"name":"mobile-app"},{"id":18,"name":"monitoring"},{"id":36,"name":"networking"},{"id":7,"name":"node-version"},{"id":55,"name":"nosql"},{"id":57,"name":"observability"},{"id":46,"name":"orm"},{"id":52,"name":"os"},{"id":14,"name":"parser"},{"id":74,"name":"react"},{"id":82,"name":"real-time"},{"id":56,"name":"robot"},{"id":65,"name":"runtime"},{"id":32,"name":"sdk"},{"id":71,"name":"search"},{"id":63,"name":"secrets"},{"id":25,"name":"security"},{"id":85,"name":"server"},{"id":86,"name":"serverless"},{"id":70,"name":"storage"},{"id":75,"name":"system-design"},{"id":79,"name":"terminal"},{"id":29,"name":"testing"},{"id":12,"name":"ui"},{"id":50,"name":"ux"},{"id":88,"name":"video"},{"id":20,"name":"web-app"},{"id":35,"name":"web-server"},{"id":43,"name":"webassembly"},{"id":69,"name":"workflow"},{"id":87,"name":"yaml"}]" returns me the "expected json"