This is a new web-based photo management application. Run it on your home server and it will let you find the right photo from your collection on any device. Smart filtering is made possible by object recognition, location awareness, color analysis and other ML algorithms.

Overview

Photonix Photo Manager

This is a photo management application based on web technologies. Run it on your home server and it will let you find what you want from your photo collection using any device. Smart filtering is made possible automatically by object recognition, location awareness, color analysis and other algorithms.

Screenshot of photo list view

This project is currently in development and not feature complete for a version 1.0 yet. If you don't mind putting up with broken parts or want to help out, run the Docker image and give it a go. I'd love for other contributors to get involved.

Community and Social

Please join in the discussion and help us gain visibility by following us on social media. Much appreciated :)

Installing & Running

The easiest way to run it is with Docker Compose using the pre-built image following these steps.

Create a new directory to run inside and download the example Docker Compose file.

mkdir photonix
cd photonix
curl https://raw.githubusercontent.com/damianmoore/photonix/master/docker/docker-compose.example.yml > docker-compose.yml

Make volume directories for data stored outside the container.

mkdir -p  data/photos

Bring up Docker Compose which will pull and run the required Docker images.

docker-compose up

A few seconds after starting you should be able to go to http://localhost:8888/ in your browser.

You'll need to create a username, password and library. Right now this needs to be done on the command-line so run this in a new terminal window. Replace USERNAME with your own username.

docker-compose run photonix python photonix/manage.py createsuperuser --username USERNAME --email [email protected]
docker-compose run photonix python photonix/manage.py create_library USERNAME "My Library"

You can move some photos into the folder data/photos and they should get detected and imported immediately. Once you have finished trying out the system you can edit the volume in the docker-compose.yml file where it says ./data/photos to mount wherever you usually keep photos. System database, thumbnails and other cache data is stored separately from the photos so shouldn't pollute the area. You are responsible for keeping your own backups in case of error.

Upgrading

If you are using the pre-built Docker image you can use kill, pull and bring back up using the following:

# Ctrl-C to kill
docker-compose pull
docker-compose up

Developing

There is a Makefile and separate Docker Compose file docker-compose.dev.yml that you should use if you want to work on the project. Check out the repo and this setup will build the image, mount the code as volumes, hot-reload JS changes to the browser and reload the Python server for most changes.

git clone [email protected]:damianmoore/photonix.git
cd photonix
mkdir -p  data/photos
make build
make start

If you get errors such as Error starting userland proxy: listen tcp 0.0.0.0:5432: bind: address alerady in use then you probably have an existing server such as Postgres listening on the standard port. You can change Photonix's services to use alternative port numbers by editing docker/docker-compose.dev.yml and setting '5432:5432' to be '5433:5432' for example. This is for Postgres but is it a similar solution for Redis or the webserver ports.

If you want to access the Bash or Python shells for development, you can use the following command.

make shell

Testing

PyTest is used as a test runner and for creating fixtures. The easiest way to run the tests is within the Docker container like this:

make test
Comments
  • Nothin append

    Nothin append

    Describe the bug Nothin append after follow : https://github.com/damianmoore/photonix

    Screenshots If applicable, add screenshots to help explain your problem. image

    Desktop (please complete the following information):

    • OS: windows 10 pro
    • Browser : chrome or firefox (latest both)
    • docker windows : latest image

    mention : Isn't photos, only drawing jpg stored in ./data/photos

    opened by jeremybep 20
  • Not all photos being detected

    Not all photos being detected

    I followed the instructions and was able to login with the username created via docker and saw "My Library" but it does not show any of the photos from /data/photos

    bug backend 
    opened by MrColumbo 18
  • Face Detection, Automatic and Manual Face Tagging

    Face Detection, Automatic and Manual Face Tagging

    Looked to lots of photo organizers and saw that none of them are perfect for combining AI tagging, location tagging and face detection. I'd like to search my photos by context, by location and by person (and if possible for animals, pets as well) easily without doing lots of manual tagging.

    I just tested your demo and I believe it is close what I imagine except one important missing piece: face detection and face tagging. It'd be really great if this can be added in similar fashion such as Google Photos or Apple Photos; automatic or manual detection of the face and then manual tagging/give/assign a name.

    Supporting animal/pet detection would be a nice surplus - I believe your current setup can easily detect animals with some mods I guess.

    So do you have any plans adding this as a feature set or would you consider ?

    Thank for the great work

    opened by firstlast0 12
  • Duplicate Key error

    Duplicate Key error

    May 25 08:19:38 nc docker-compose[166603]: photonix | IMPORTED /data/photos/Slides/Batch001-005.jpg May 25 08:19:38 nc docker-compose[166603]: photonix | duplicate key value violates unique constraint "photos_tag_library_id_name_type_source_7da37b6b_uniq" May 25 08:19:38 nc docker-compose[166603]: photonix | DETAIL: Key (library_id, name, type, source)=(a94928fa-3b6a-469a-9878-c2e7f31d7e1c, Color Slide Film, G, ) already exists. May 25 08:19:38 nc docker-compose[166603]: photonix | May 25 08:19:38 nc docker-compose[166603]: photonix | 2021-05-25 13:19:38,237 INFO exited: rescan_photos_periodically (exit status 0; not expected) May 25 08:19:39 nc docker-compose[166603]: photonix | 2021-05-25 13:19:39,238 INFO gave up: rescan_photos_periodically entered FATAL state, too many start retries too quickly

    bug 
    opened by mkrzywonski 9
  • Can't connect to postgres container (Synology)

    Can't connect to postgres container (Synology)

    I'm trying to install Photonix with the following docker-compose.yml:

    version: '3'
    
    services:
      postgres:
        container_name: photonix-postgres
        image: postgres:11.1-alpine
        environment:
          POSTGRES_DB: photonix
          POSTGRES_PASSWORD: password
        volumes:
          - /volume1/docker/photonix/data/db:/var/lib/postgresql/data
    
      redis:
        container_name: photonix-redis
        image: redis:6.2.2
    
      photonix:
        container_name: photonix
        image: photonixapp/photonix:latest
        ports:
          - '8888:80'
        environment:
          ENV: prd
          POSTGRES_HOST: postgres
          POSTGRES_DB: photonix
          POSTGRES_USER: postgres
          POSTGRES_PASSWORD: password
          REDIS_HOST: redis
          ALLOWED_HOSTS: '*'
          ADMIN_USERNAME: user
          ADMIN_PASSWORD: 'password'
          # More configuration options here: https://photonix.org/docs/configuration/
        volumes:
          - /volume1/docker/photonix/data/photos:/data/photos
          - /volume1/docker/photonix/data/raw-photos-processed:/data/raw-photos-processed
          - /volume1/docker/photonix/data/cache:/data/cache
          - /volume1/docker/photonix/data/models:/data/models
        links:
          - postgres
          - redis
    

    All three containers are up, but photonix can't seem to connect to the postgres server. The log says:

    2021-08-18 15:26:58 | stderr | Postgres is unavailable - sleeping
    2021-08-18 15:26:58 | stderr | postgres [172.20.0.2] 5432 (postgresql) : Connection timed out
    

    Very limited info, but any idea what could be the issue?

    opened by mcwieger 8
  • Logo design

    Logo design

    Hi, @damianmoore , I'm a logo designer. I saw your project and seems like it will be a successful project. If you want, I can design a logo for this project. What do you think?

    opened by tebriz159 8
  • Possibility to specify REDIS_PASSWORD in docker-compose

    Possibility to specify REDIS_PASSWORD in docker-compose

    Is your feature request related to a problem? Please describe. My use case: I am trying to set up Photonix with an existing postgres and redis server. The problem is that my current Redis server is configured so that it needs a password (that some apps, Nextcloud for example, specify via REDIS_PASSWORD). Apparently, there are currently no possibilities to specify such password throught Photonix environment variables.

    Describe the solution you'd like Add the possibility to specify Redis password throught the docker-compose.

    Describe alternatives you've considered N/A

    Additional context N/A

    enhancement devops 
    opened by cirdanmiriel 7
  • Face recognition snag list

    Face recognition snag list

    • [x] Allow selecting text of face name input with mouse (swipes to next/previous photo)
    • [x] Pressing Esc when editing a face tag name should cancel the change (currently returns user to thumbnails)
    • [x] While in tag edit mode, clicking anywhere outside the text field should cancel the edit mode (no save).
    • [x] In the filters on the main screen, "People" should be sorted so that the "Unknown person XXXXXX" ones are always at the bottom.
    • [x] Allow hidden face tags (white boxes) to have label assign with an edit button in case they were accidentally removed.
    frontend 
    opened by damianmoore 7
  • Next/Previous photo sometimes fails now we have pagination

    Next/Previous photo sometimes fails now we have pagination

    There is a photos Redux store which contains the photo IDs from the timeline view. This is the basis for determining the next and previous photo to go to from the detail screen. Now that not all photos are contained in the store because of pagination, it's possible the current photo ID is not in the store. This is most apparent when getting to photo detail from the map view. If we came from the map view then next/previous should still get the photo taken before or after.

    The selector ui/src/stores/photos/selector.js should be updated so if the ID cannot be found or there is are no prev or next results it makes a GraphQL query. This query could be the same one that makes the timeline currently. The currently active search filters should still apply to this fetch. As there is an after parameter added for pagination, a before one should be added and these can both have limit set to 1.

    bug frontend backend 
    opened by damianmoore 7
  • Can't Handle Raw CR3 Images

    Can't Handle Raw CR3 Images

    Describe the bug

    When loading in CR3 images from my Canon 90D I'm getting a TypeError.

    TypeError: '<' not supported between instances of 'NoneType' and 'int'

    To Reproduce

    Steps to reproduce the behavior:

    1. Start docker image with basic configuration
    2. Add user and create a library using the default commands from the README.md
    3. Copy in a processed JPG from RawTherapee and it properly renders the thumbnail and identifies it.
    4. Copy in a CR2 from my old Canon T2i and it works.
    5. Copy in a CR3 from my Canon 90D and it throws the following exception.
    photonix    | /data/photos/IMG_0598.CR3 is a Canon EOS 90D image.
    photonix    | Exception in thread Thread-2:
    photonix    | Traceback (most recent call last):
    photonix    |   File "/usr/local/lib/python3.8/threading.py", line 932, in _bootstrap_inner
    photonix    |     self.run()
    photonix    |   File "/usr/local/lib/python3.8/threading.py", line 870, in run
    photonix    |     self._target(*self._args, **self._kwargs)
    photonix    |   File "/srv/photonix/photos/management/commands/raw_processor.py", line 22, in worker
    photonix    |     process_raw_task(task.subject_id, task)
    photonix    |   File "/srv/photonix/photos/utils/raw.py", line 52, in process_raw_task
    photonix    |     output_path, version, process_params, external_version = generate_jpeg(photo_file.path)
    photonix    |   File "/srv/photonix/photos/utils/raw.py", line 149, in generate_jpeg
    photonix    |     if __has_acceptable_dimensions(temp_input_path, temp_output_path):
    photonix    |   File "/srv/photonix/photos/utils/raw.py", line 96, in __has_acceptable_dimensions
    photonix    |     if new_image_dimensions[0] < 512 or new_image_dimensions[1] < 512:
    photonix    | TypeError: '<' not supported between instances of 'NoneType' and 'int'
    
    1. Loading in a JPG processed in Lightroom renders the same image fine (as expected)

    Expected behavior

    It should render a thumbnail and run the algorithm against it successfully. In this case it throws the TypeError and leaves a blank square on the gallery tiles where thumbnail generation failed.

    Screenshots

    1. It properly identifies the EXIF data and shows it as filters.

    image

    1. It creates a placeholder for where the thumbnail should be.

    image

    1. The fourth tile is a JPG of the same image.

    image

    Environment

    I'm browsing on Firefox 86 64-bit on Windows 10 1909 and the docker image was run on a Debian 10 instance under Hyper-V.

    $ neofetch --off
    [email protected]
    ----------------
    OS: Debian GNU/Linux 10 (buster) x86_64
    Host: Virtual Machine 7.0
    Kernel: 4.19.0-14-amd64
    Uptime: 1 hour, 10 mins
    Packages: 496 (dpkg)
    Shell: bash 5.0.3
    Terminal: /dev/pts/1
    CPU: AMD Ryzen 7 2700X (6) @ 3.693GHz
    GPU: Microsoft Corporation Hyper-V virtual VGA
    Memory: 2245MiB / 7978MiB
    
    $ grep PRETTY /etc/*release*
    PRETTY_NAME="Debian GNU/Linux 10 (buster)"
    $ docker --version
    Docker version 20.10.5, build 55c4c88
    $ docker-compose --version
    docker-compose version 1.28.5, build unknown
    

    Desktop (please complete the following information):

    Not Applicable (See Above)

    Smartphone (please complete the following information):

    Not Applicable

    Additional context

    Not Applicable

    opened by TaylorBurnham 6
  • Web interface:

    Web interface: "Error :("

    Describe the bug I just installed photonix on Ubuntu 18.04.3 server, I navigate to the webinterface and I'm greeted with "Error :(". Docker version 19.03.2, build 6a30dfc

    Log:

    Attaching to photonix-postgres, photonix-redis, photonix
    photonix-postgres | The files belonging to this database system will be owned by user "postgres".
    photonix-postgres | This user must also own the server process.
    photonix-postgres | 
    photonix    | DNS fwd/rev mismatch: postgres != photonix-postgres.photonix_default
    photonix    | postgres [172.18.0.2] 5432 (postgresql) : Connection refused
    photonix    | Postgres is unavailable - sleeping
    photonix-redis | 1:C 20 Sep 18:03:59.832 # Warning: no config file specified, using the default config. In order to specify a config file use redis-server /path/to/redis.conf
    photonix-postgres | The database cluster will be initialized with locale "en_US.utf8".
    photonix-postgres | The default database encoding has accordingly been set to "UTF8".
    photonix-postgres | The default text search configuration will be set to "english".
    photonix-postgres | 
    photonix-postgres | Data page checksums are disabled.
    photonix-redis | 1:M 20 Sep 18:03:59.842 # Not listening to IPv6: unsupproted
    photonix-postgres | 
    photonix-redis |                 _._                                                  
    photonix-redis |            _.-``__ ''-._                                             
    photonix-redis |       _.-``    `.  `_.  ''-._           Redis 3.2.8 (00000000/0) 64 bit
    photonix-redis |   .-`` .-```.  ```\/    _.,_ ''-._                                   
    photonix-redis |  (    '      ,       .-`  | `,    )     Running in standalone mode
    photonix-redis |  |`-._`-...-` __...-.``-._|'` _.-'|     Port: 6379
    photonix-redis |  |    `-._   `._    /     _.-'    |     PID: 1
    photonix-redis |   `-._    `-._  `-./  _.-'    _.-'                                   
    photonix-redis |  |`-._`-._    `-.__.-'    _.-'_.-'|                                  
    photonix-redis |  |    `-._`-._        _.-'_.-'    |           http://redis.io        
    photonix-redis |   `-._    `-._`-.__.-'_.-'    _.-'                                   
    photonix-redis |  |`-._`-._    `-.__.-'    _.-'_.-'|                                  
    photonix-redis |  |    `-._`-._        _.-'_.-'    |                                  
    photonix-redis |   `-._    `-._`-.__.-'_.-'    _.-'                                   
    photonix-redis |       `-._    `-.__.-'    _.-'                                       
    photonix-redis |           `-._        _.-'                                           
    photonix-redis |               `-.__.-'                                               
    photonix-redis | 
    photonix-redis | 1:M 20 Sep 18:03:59.843 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.
    photonix-redis | 1:M 20 Sep 18:03:59.843 # Server started, Redis version 3.2.8
    photonix-redis | 1:M 20 Sep 18:03:59.843 # WARNING overcommit_memory is set to 0! Background save may fail under low memory condition. To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or run the command 'sysctl vm.overcommit_memory=1' for this to take effect.
    photonix-redis | 1:M 20 Sep 18:03:59.843 # WARNING you have Transparent Huge Pages (THP) support enabled in your kernel. This will create latency and memory usage issues with Redis. To fix this issue run the command 'echo never > /sys/kernel/mm/transparent_hugepage/enabled' as root, and add it to your /etc/rc.local in order to retain the setting after a reboot. Redis must be restarted after THP is disabled.
    photonix-redis | 1:M 20 Sep 18:03:59.843 * DB loaded from disk: 0.000 seconds
    photonix-redis | 1:M 20 Sep 18:03:59.843 * The server is now ready to accept connections on port 6379
    photonix-postgres | fixing permissions on existing directory /var/lib/postgresql/data ... ok
    photonix-postgres | creating subdirectories ... ok
    photonix-postgres | selecting default max_connections ... 100
    photonix-postgres | selecting default shared_buffers ... 128MB
    photonix-postgres | selecting dynamic shared memory implementation ... posix
    photonix-postgres | creating configuration files ... ok
    photonix-postgres | running bootstrap script ... ok
    photonix-postgres | performing post-bootstrap initialization ... sh: locale: not found
    photonix-postgres | 2019-09-20 18:04:00.179 UTC [26] WARNING:  no usable system locales were found
    photonix-postgres | ok
    photonix-postgres | syncing data to disk ... 
    photonix-postgres | WARNING: enabling "trust" authentication for local connections
    photonix-postgres | You can change this by editing pg_hba.conf or using the option -A, or
    photonix-postgres | --auth-local and --auth-host, the next time you run initdb.
    photonix-postgres | ok
    photonix-postgres | 
    photonix-postgres | Success. You can now start the database server using:
    photonix-postgres | 
    photonix-postgres |     pg_ctl -D /var/lib/postgresql/data -l logfile start
    photonix-postgres | 
    photonix-postgres | waiting for server to start....2019-09-20 18:04:01.307 UTC [30] LOG:  listening on Unix socket "/var/run/postgresql/.s.PGSQL.5432"
    photonix-postgres | 2019-09-20 18:04:01.319 UTC [31] LOG:  database system was shut down at 2019-09-20 18:04:00 UTC
    photonix-postgres | 2019-09-20 18:04:01.321 UTC [30] LOG:  database system is ready to accept connections
    photonix-postgres |  done
    photonix-postgres | server started
    photonix    | DNS fwd/rev mismatch: postgres != photonix-postgres.photonix_default
    photonix    | postgres [172.18.0.2] 5432 (postgresql) : Connection refused
    photonix    | Postgres is unavailable - sleeping
    photonix    | DNS fwd/rev mismatch: postgres != photonix-postgres.photonix_default
    photonix    | postgres [172.18.0.2] 5432 (postgresql) : Connection refused
    photonix    | Postgres is unavailable - sleeping
    photonix    | DNS fwd/rev mismatch: postgres != photonix-postgres.photonix_default
    photonix    | postgres [172.18.0.2] 5432 (postgresql) : Connection refused
    photonix    | Postgres is unavailable - sleeping
    photonix-postgres | CREATE DATABASE
    photonix-postgres | 
    photonix-postgres | 
    photonix-postgres | /usr/local/bin/docker-entrypoint.sh: ignoring /docker-entrypoint-initdb.d/*
    photonix-postgres | 
    photonix-postgres | waiting for server to shut down....2019-09-20 18:04:03.679 UTC [30] LOG:  received fast shutdown request
    photonix-postgres | 2019-09-20 18:04:03.712 UTC [30] LOG:  aborting any active transactions
    photonix-postgres | 2019-09-20 18:04:03.713 UTC [30] LOG:  background worker "logical replication launcher" (PID 37) exited with exit code 1
    photonix-postgres | 2019-09-20 18:04:03.714 UTC [32] LOG:  shutting down
    photonix-postgres | 2019-09-20 18:04:03.920 UTC [30] LOG:  database system is shut down
    photonix-postgres |  done
    photonix-postgres | server stopped
    photonix-postgres | 
    photonix-postgres | PostgreSQL init process complete; ready for start up.
    photonix-postgres | 
    photonix-postgres | 2019-09-20 18:04:04.025 UTC [1] LOG:  listening on IPv4 address "0.0.0.0", port 5432
    photonix-postgres | 2019-09-20 18:04:04.028 UTC [1] LOG:  could not create IPv6 socket for address "::": Address family not supported by protocol
    photonix-postgres | 2019-09-20 18:04:04.063 UTC [1] LOG:  listening on Unix socket "/var/run/postgresql/.s.PGSQL.5432"
    photonix-postgres | 2019-09-20 18:04:04.180 UTC [41] LOG:  database system was shut down at 2019-09-20 18:04:03 UTC
    photonix-postgres | 2019-09-20 18:04:04.215 UTC [1] LOG:  database system is ready to accept connections
    photonix    | DNS fwd/rev mismatch: postgres != photonix-postgres.photonix_default
    photonix    | postgres [172.18.0.2] 5432 (postgresql) open
    photonix    | Postgres is up
    photonix    | Running migrations
    photonix-postgres | 2019-09-20 18:04:04.420 UTC [48] LOG:  incomplete startup packet
    photonix    | Operations to perform:
    photonix    |   Apply all migrations: admin, auth, contenttypes, photos, sessions
    photonix    | Running migrations:
    photonix    |   Applying contenttypes.0001_initial... OK
    photonix    |   Applying auth.0001_initial... OK
    photonix    |   Applying admin.0001_initial... OK
    photonix    |   Applying admin.0002_logentry_remove_auto_add... OK
    photonix    |   Applying contenttypes.0002_remove_content_type_name... OK
    photonix    |   Applying auth.0002_alter_permission_name_max_length... OK
    photonix    |   Applying auth.0003_alter_user_email_max_length... OK
    photonix    |   Applying auth.0004_alter_user_username_opts... OK
    photonix    |   Applying auth.0005_alter_user_last_login_null... OK
    photonix    |   Applying auth.0006_require_contenttypes_0002... OK
    photonix    |   Applying auth.0007_alter_validators_add_error_messages... OK
    photonix    |   Applying auth.0008_alter_user_username_max_length... OK
    photonix    |   Applying photos.0001_initial... OK
    photonix    |   Applying photos.0002_auto_20190224_2119... OK
    photonix    |   Applying photos.0003_auto_20190225_0647... OK
    photonix    |   Applying photos.0004_auto_20190225_2147... OK
    photonix    |   Applying photos.0005_auto_20190305_1837... OK
    photonix    |   Applying photos.0006_auto_20190306_1827... OK
    photonix    |   Applying photos.0007_auto_20190507_1655... OK
    photonix    |   Applying sessions.0001_initial... OK
    photonix    | Resetting Redis lock
    photonix    | RESET_ALL_SCRIPT not cached.
    photonix    | DELETE_ALL_SIGNAL_KEYS_SCRIPT not cached.
    photonix    | Starting supervisor
    photonix    | 2019-09-20 18:04:10,450 CRIT Supervisor running as root (no user in config file)
    photonix    | Unlinking stale socket /tmp/supervisor.sock
    photonix    | 2019-09-20 18:04:10,758 INFO RPC interface 'supervisor' initialized
    photonix    | 2019-09-20 18:04:10,758 CRIT Server 'unix_http_server' running without any HTTP authentication checking
    photonix    | 2019-09-20 18:04:10,758 INFO supervisord started with pid 20
    photonix    | 2019-09-20 18:04:11,763 INFO spawned: 'rescan_photos_periodically' with pid 23
    photonix    | 2019-09-20 18:04:11,767 INFO spawned: 'classification_style_processor' with pid 24
    photonix    | 2019-09-20 18:04:11,770 INFO spawned: 'raw_processor' with pid 25
    photonix    | 2019-09-20 18:04:11,771 INFO spawned: 'nginx' with pid 26
    photonix    | 2019-09-20 18:04:11,772 INFO spawned: 'webpack' with pid 27
    photonix    | 2019-09-20 18:04:11,773 INFO spawned: 'classification_color_processor' with pid 28
    photonix    | 2019-09-20 18:04:11,775 INFO spawned: 'classification_object_processor' with pid 31
    photonix    | 2019-09-20 18:04:11,776 INFO spawned: 'classification_scheduler' with pid 32
    photonix    | 2019-09-20 18:04:11,777 INFO spawned: 'thumbnail_scheduler' with pid 34
    photonix    | 2019-09-20 18:04:11,778 INFO spawned: 'watch_photos' with pid 36
    photonix    | 2019-09-20 18:04:11,779 INFO spawned: 'raw_scheduler' with pid 37
    photonix    | 2019-09-20 18:04:11,780 INFO spawned: 'classification_location_processor' with pid 38
    photonix    | 2019-09-20 18:04:11,788 INFO spawned: 'app_server' with pid 48
    photonix    | 2019-09-20 18:04:11,788 INFO exited: webpack (exit status 0; not expected)
    photonix    | Starting Nginx in prd mode
    photonix    | 2019/09/20 18:04:11 [notice] 33#33: using the "epoll" event method
    photonix    | 2019/09/20 18:04:11 [notice] 33#33: nginx/1.10.3
    photonix    | 2019/09/20 18:04:11 [notice] 33#33: OS: Linux 5.0.0-25-generic
    photonix    | 2019/09/20 18:04:11 [notice] 33#33: getrlimit(RLIMIT_NOFILE): 1048576:1048576
    photonix    | 2019/09/20 18:04:11 [notice] 33#33: start worker processes
    photonix    | 2019/09/20 18:04:11 [notice] 33#33: start worker process 41
    photonix    | 2019/09/20 18:04:11 [notice] 33#33: start worker process 42
    photonix    | 2019/09/20 18:04:11 [notice] 33#33: start worker process 43
    photonix    | 2019/09/20 18:04:11 [notice] 33#33: start worker process 44
    photonix    | Starting Gunicorn server as in prd mode
    photonix    | [2019-09-20 18:04:11 +0000] [50] [INFO] Starting gunicorn 19.9.0
    photonix    | [2019-09-20 18:04:11 +0000] [50] [INFO] Listening at: http://0.0.0.0:8000 (50)
    photonix    | [2019-09-20 18:04:11 +0000] [50] [INFO] Using worker: sync
    photonix    | [2019-09-20 18:04:11 +0000] [55] [INFO] Booting worker with pid: 55
    photonix    | 2019-09-20 18:04:13,004 INFO spawned: 'webpack' with pid 58
    photonix    | 2019-09-20 18:04:13,012 INFO exited: webpack (exit status 0; not expected)
    photonix    | 2019-09-20 18:04:15,016 INFO spawned: 'webpack' with pid 59
    photonix    | 2019-09-20 18:04:15,021 INFO exited: webpack (exit status 0; not expected)
    photonix    | 2019-09-20 18:04:17,024 INFO success: nginx entered RUNNING state, process has stayed up for > than 5 seconds (startsecs)
    photonix    | 2019-09-20 18:04:18,026 INFO spawned: 'webpack' with pid 62
    photonix    | 2019-09-20 18:04:18,029 INFO exited: webpack (exit status 0; not expected)
    photonix    | 2019-09-20 18:04:19,031 INFO gave up: webpack entered FATAL state, too many start retries too quickly
    photonix    | 2019-09-20 18:04:22,034 INFO success: watch_photos entered RUNNING state, process has stayed up for > than 10 seconds (startsecs)
    photonix    | UNLOCK_SCRIPT not cached.
    photonix    | 2019-09-20 18:04:27,753 INFO success: raw_processor entered RUNNING state, process has stayed up for > than 15 seconds (startsecs)
    photonix    | 2019-09-20 18:04:27,753 INFO success: raw_scheduler entered RUNNING state, process has stayed up for > than 15 seconds (startsecs)
    photonix    | 2019-09-20 18:04:28,754 INFO success: thumbnail_scheduler entered RUNNING state, process has stayed up for > than 16 seconds (startsecs)
    photonix    | 2019-09-20 18:04:29,756 INFO success: classification_scheduler entered RUNNING state, process has stayed up for > than 17 seconds (startsecs)
    photonix    | 2019-09-20 18:04:30,757 INFO success: classification_color_processor entered RUNNING state, process has stayed up for > than 18 seconds (startsecs)
    photonix    | 2019-09-20 18:04:31,758 INFO success: classification_location_processor entered RUNNING state, process has stayed up for > than 19 seconds (startsecs)
    photonix    | 2019-09-20 18:04:32,760 INFO success: classification_style_processor entered RUNNING state, process has stayed up for > than 20 seconds (startsecs)
    photonix    | 2019-09-20 18:04:33,761 INFO success: classification_object_processor entered RUNNING state, process has stayed up for > than 21 seconds (startsecs)
    photonix    | 2019-09-20 18:04:42,773 INFO success: app_server entered RUNNING state, process has stayed up for > than 30 seconds (startsecs)
    photonix    | 10.0.1.1 - - [20/Sep/2019:18:04:49 +0000] "POST /graphql HTTP/1.1" 400 37 "http://control.hijnn.net:8888/" "Mozilla/5.0 (X11; Linux x86_64; rv:69.0) Gecko/20100101 Firefox/69.0"
    photonix    | 10.0.1.1 - - [20/Sep/2019:18:04:49 +0000] "POST /graphql HTTP/1.1" 400 37 "http://control.hijnn.net:8888/" "Mozilla/5.0 (X11; Linux x86_64; rv:69.0) Gecko/20100101 Firefox/69.0"
    photonix    | 2019-09-20 18:05:13.631243: I tensorflow/core/platform/cpu_feature_guard.cc:141] Your CPU supports instructions that this TensorFlow binary was not compiled to use: SSE4.1 SSE4.2 AVX AVX2 FMA
    photonix    | 10.0.1.1 - - [20/Sep/2019:18:14:03 +0000] "POST /graphql HTTP/1.1" 400 37 "http://control.hijnn.net:8888/" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.108 Safari/537.36"
    photonix    | 10.0.1.1 - - [20/Sep/2019:18:14:04 +0000] "POST /graphql HTTP/1.1" 400 37 "http://control.hijnn.net:8888/" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.108 Safari/537.36"
    
    

    Screenshots If applicable, add screenshots to help explain your problem. image

    Desktop (please complete the following information):

    • OS: Manjaro Linux Juhraya 18.1.0
    • Browser: Firefox 69 and Chromium 74

    If you need more info, please let me know.

    opened by stefanheijnen 6
  • Bump express from 4.17.1 to 4.18.2 in /ui

    Bump express from 4.17.1 to 4.18.2 in /ui

    Bumps express from 4.17.1 to 4.18.2.

    Release notes

    Sourced from express's releases.

    4.18.2

    4.18.1

    • Fix hanging on large stack of sync routes

    4.18.0

    ... (truncated)

    Changelog

    Sourced from express's changelog.

    4.18.2 / 2022-10-08

    4.18.1 / 2022-04-29

    • Fix hanging on large stack of sync routes

    4.18.0 / 2022-04-25

    ... (truncated)

    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself) You can disable automated security fix PRs for this repo from the Security Alerts page.
    dependencies javascript 
    opened by dependabot[bot] 0
  • Bump qs from 6.5.2 to 6.5.3 in /ui

    Bump qs from 6.5.2 to 6.5.3 in /ui

    Bumps qs from 6.5.2 to 6.5.3.

    Changelog

    Sourced from qs's changelog.

    6.5.3

    • [Fix] parse: ignore __proto__ keys (#428)
    • [Fix] utils.merge`: avoid a crash with a null target and a truthy non-array source
    • [Fix] correctly parse nested arrays
    • [Fix] stringify: fix a crash with strictNullHandling and a custom filter/serializeDate (#279)
    • [Fix] utils: merge: fix crash when source is a truthy primitive & no options are provided
    • [Fix] when parseArrays is false, properly handle keys ending in []
    • [Fix] fix for an impossible situation: when the formatter is called with a non-string value
    • [Fix] utils.merge: avoid a crash with a null target and an array source
    • [Refactor] utils: reduce observable [[Get]]s
    • [Refactor] use cached Array.isArray
    • [Refactor] stringify: Avoid arr = arr.concat(...), push to the existing instance (#269)
    • [Refactor] parse: only need to reassign the var once
    • [Robustness] stringify: avoid relying on a global undefined (#427)
    • [readme] remove travis badge; add github actions/codecov badges; update URLs
    • [Docs] Clean up license text so it’s properly detected as BSD-3-Clause
    • [Docs] Clarify the need for "arrayLimit" option
    • [meta] fix README.md (#399)
    • [meta] add FUNDING.yml
    • [actions] backport actions from main
    • [Tests] always use String(x) over x.toString()
    • [Tests] remove nonexistent tape option
    • [Dev Deps] backport from main
    Commits
    • 298bfa5 v6.5.3
    • ed0f5dc [Fix] parse: ignore __proto__ keys (#428)
    • 691e739 [Robustness] stringify: avoid relying on a global undefined (#427)
    • 1072d57 [readme] remove travis badge; add github actions/codecov badges; update URLs
    • 12ac1c4 [meta] fix README.md (#399)
    • 0338716 [actions] backport actions from main
    • 5639c20 Clean up license text so it’s properly detected as BSD-3-Clause
    • 51b8a0b add FUNDING.yml
    • 45f6759 [Fix] fix for an impossible situation: when the formatter is called with a no...
    • f814a7f [Dev Deps] backport from main
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself) You can disable automated security fix PRs for this repo from the Security Alerts page.
    dependencies javascript 
    opened by dependabot[bot] 0
  • Bump decode-uri-component from 0.2.0 to 0.2.2 in /ui

    Bump decode-uri-component from 0.2.0 to 0.2.2 in /ui

    Bumps decode-uri-component from 0.2.0 to 0.2.2.

    Release notes

    Sourced from decode-uri-component's releases.

    v0.2.2

    • Prevent overwriting previously decoded tokens 980e0bf

    https://github.com/SamVerschueren/decode-uri-component/compare/v0.2.1...v0.2.2

    v0.2.1

    • Switch to GitHub workflows 76abc93
    • Fix issue where decode throws - fixes #6 746ca5d
    • Update license (#1) 486d7e2
    • Tidelift tasks a650457
    • Meta tweaks 66e1c28

    https://github.com/SamVerschueren/decode-uri-component/compare/v0.2.0...v0.2.1

    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself) You can disable automated security fix PRs for this repo from the Security Alerts page.
    dependencies javascript 
    opened by dependabot[bot] 0
  • Bump pillow from 9.0.1 to 9.3.0

    Bump pillow from 9.0.1 to 9.3.0

    Bumps pillow from 9.0.1 to 9.3.0.

    Release notes

    Sourced from pillow's releases.

    9.3.0

    https://pillow.readthedocs.io/en/stable/releasenotes/9.3.0.html

    Changes

    ... (truncated)

    Changelog

    Sourced from pillow's changelog.

    9.3.0 (2022-10-29)

    • Limit SAMPLESPERPIXEL to avoid runtime DOS #6700 [wiredfool]

    • Initialize libtiff buffer when saving #6699 [radarhere]

    • Inline fname2char to fix memory leak #6329 [nulano]

    • Fix memory leaks related to text features #6330 [nulano]

    • Use double quotes for version check on old CPython on Windows #6695 [hugovk]

    • Remove backup implementation of Round for Windows platforms #6693 [cgohlke]

    • Fixed set_variation_by_name offset #6445 [radarhere]

    • Fix malloc in _imagingft.c:font_setvaraxes #6690 [cgohlke]

    • Release Python GIL when converting images using matrix operations #6418 [hmaarrfk]

    • Added ExifTags enums #6630 [radarhere]

    • Do not modify previous frame when calculating delta in PNG #6683 [radarhere]

    • Added support for reading BMP images with RLE4 compression #6674 [npjg, radarhere]

    • Decode JPEG compressed BLP1 data in original mode #6678 [radarhere]

    • Added GPS TIFF tag info #6661 [radarhere]

    • Added conversion between RGB/RGBA/RGBX and LAB #6647 [radarhere]

    • Do not attempt normalization if mode is already normal #6644 [radarhere]

    ... (truncated)

    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself) You can disable automated security fix PRs for this repo from the Security Alerts page.
    dependencies python 
    opened by dependabot[bot] 0
  • Bump tensorflow from 2.4.1 to 2.9.3

    Bump tensorflow from 2.4.1 to 2.9.3

    Bumps tensorflow from 2.4.1 to 2.9.3.

    Release notes

    Sourced from tensorflow's releases.

    TensorFlow 2.9.3

    Release 2.9.3

    This release introduces several vulnerability fixes:

    TensorFlow 2.9.2

    Release 2.9.2

    This releases introduces several vulnerability fixes:

    ... (truncated)

    Changelog

    Sourced from tensorflow's changelog.

    Release 2.9.3

    This release introduces several vulnerability fixes:

    Release 2.8.4

    This release introduces several vulnerability fixes:

    ... (truncated)

    Commits
    • a5ed5f3 Merge pull request #58584 from tensorflow/vinila21-patch-2
    • 258f9a1 Update py_func.cc
    • cd27cfb Merge pull request #58580 from tensorflow-jenkins/version-numbers-2.9.3-24474
    • 3e75385 Update version numbers to 2.9.3
    • bc72c39 Merge pull request #58482 from tensorflow-jenkins/relnotes-2.9.3-25695
    • 3506c90 Update RELEASE.md
    • 8dcb48e Update RELEASE.md
    • 4f34ec8 Merge pull request #58576 from pak-laura/c2.99f03a9d3bafe902c1e6beb105b2f2417...
    • 6fc67e4 Replace CHECK with returning an InternalError on failing to create python tuple
    • 5dbe90a Merge pull request #58570 from tensorflow/r2.9-7b174a0f2e4
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself) You can disable automated security fix PRs for this repo from the Security Alerts page.
    dependencies python 
    opened by dependabot[bot] 0
  • Browse & Search By Folders?

    Browse & Search By Folders?

    I'm looking for an open-source alternative to Synology's Photos app; my use case is accessing a photo library hosted on a NAS from an Android device. I gave the Photonix Android app a try with the demo instance, but wasn't able to determine: is there any way to browse the "file structure" layout directly? And likewise, to have "Search" return photos based on terms in their pathname?

    Specifically: Although I realize metadata tags are more versatile, I have a very large existing photo library that's organized via folder names. Thus it's essential to be able to navigate by folder, as well as search for terms that appear in pathnames. I don't think this is currently possible, but just thought I'd ask to be sure :)

    Thanks in advance

    opened by metal450 1
Releases(v0.24.0)
Simple Python / ImageMagick script to package images into WAD3s for use as GoldSrc textures.

WADs Out For [The] Ladies Simple Python / ImageMagick script to package images into WAD3s for use as GoldSrc textures. Development mostly focused on L

5 Apr 09, 2022
A script to generate a profile picture and a banner that show the same image on Discord.

Discord profile picture & banner generator A script to generate a profile picture and a banner that show the same image on Discord. Installation / Upd

Victor B. 9 Nov 27, 2022
Leshycam - Generate Inscryption styled portrait sprites from any image

Leshy's Camera Generate Inscryption styled portrait sprites from any image. Setu

3 Sep 27, 2022
Art directed cropping, useful for responsive images

Art direction sets a focal point and can be used when you need multiple copies of the same Image but also in in different proportions.

Daniel 1 Aug 16, 2022
Computer art based on quadtrees.

Quads Computer art based on quadtrees. The program targets an input image. The input image is split into four quadrants. Each quadrant is assigned an

Michael Fogleman 1.1k Dec 23, 2022
Multi-view 3D reconstruction using neural rendering. Unofficial implementation of UNISURF, VolSDF, NeuS and more.

Multi-view 3D reconstruction using neural rendering. Unofficial implementation of UNISURF, VolSDF, NeuS and more.

Jianfei Guo 683 Jan 04, 2023
clesperanto is a graphical user interface for GPU-accelerated image processing.

clesperanto is a graphical user interface for a multi-platform multi-language framework for GPU-accelerated image processing. It is based on napari and the pyclesperanto-prototype.

1 Jan 02, 2022
Fuzzware is a project for automated, self-configuring fuzzing of firmware images

Fuzzware Fuzzware is a project for automated, self-configuring fuzzing of firmware images. The idea of this project is to configure the memory ranges

190 Dec 21, 2022
The ctypes-based simple ImageMagick binding for Python

Wand Wand is a ctypes-based simple ImageMagick binding for Python, supporting 2.7, 3.3+, and PyPy. All functionalities of MagickWand API are implement

Eric McConville 1.2k Dec 30, 2022
ProsePainter combines direct digital painting with real-time guided machine-learning based image optimization.

ProsePainter Create images by painting with words. ProsePainter combines direct digital painting with real-time guided machine-learning based image op

Morphogen 276 Dec 17, 2022
A Gtk based Image Selector with Preview

gtk-image-selector This is an attempt to restore Gtk Image Chooser "lost functionality": displaying an image preview when selecting images... This is

Spiros Georgaras 2 Sep 28, 2022
starfish is a Python library for processing images of image-based spatial transcriptomics.

starfish: scalable pipelines for image-based transcriptomics starfish is a Python library for processing images of image-based spatial transcriptomics

199 Dec 08, 2022
Computer art based on joining transparent images

Computer Art There is no must in art because art is free. Introduction The following tutorial exaplains how to generate computer art based on a series

Computer Art 12 Jul 30, 2022
A little Python tool to convert a TrueType (ttf/otf) font into a PNG for use in demos.

font2png A little Python tool to convert a TrueType (ttf/otf) font into a PNG for use in demos. To use from command line it expects python3 to be at /

Rich Elmes 3 Dec 22, 2021
kikuchipy is an open-source Python library for processing and analysis of electron backscatter diffraction (EBSD) patterns

kikuchipy is an open-source Python library for processing and analysis of electron backscatter diffraction (EBSD) patterns. The library builds on the

pyxem 53 Dec 29, 2022
Python Image Morpher (PIM) is a program that can take two images and blend them to whatever extent or precision that you like

Python Image Morpher (PIM) is a program that can take two images and blend them to whatever extent or precision that you like! It is designed to emulate some of Python's OpenCV image processing from

David Dowd 108 Dec 19, 2022
Py3D - A 3d rendering engine written entirely in python

Py3D is a 3d rendering engine written entirely in python. It is a simple and eas

1up Community 2 Nov 14, 2022
【萝莉图片算法】高损图像压缩算法!?

【萝莉图片算法】高损图像压缩算法!? 我又发明出新算法了! 这次我发明的是新型高损图像压缩算法——萝莉图片算法!为什么是萝莉图片,这是因为它是使动用法,让图片变小所以是萝莉图片,大家一定要学好语文哦! 压缩效果 太神奇了!压缩率竟然高达99.97%! 与常见压缩算法对比 在图片最终大小为1KB的情况

黄巍 49 Oct 17, 2022
Python implementation of image filters (such as brightness, contrast, saturation, etc.)

PyPhotoshop Python implementation of image filters Use Python to adjust brightness and contrast, add blur, and detect edges! Follow along tutorial: ht

Kylie 87 Dec 15, 2022
This piece of code is a User Welcomer with Image Manipulation using Python and Pillow (PIL).

This piece of code is a User Welcomer with Image Manipulation using Python and Pillow (PIL).

Bero 4 Jan 11, 2022