saimn / sigal

yet another simple static gallery generator
http://sigal.saimon.org/
MIT License
891 stars 169 forks source link

Some files have failed to be processed #494

Closed reagle closed 1 year ago

reagle commented 1 year ago

This image -- and another -- generate a "Some files have failed to be processed:" error message. Running with --debug tells me nothing more. I think the JPEG is okay.

❯ jpeginfo --info --check 27-2005-rainbow-boston.jpg
27-2005-rainbow-boston.jpg       3965 x 3067 24bit N Exif,XMP,ICC,IPTC,XMP,Adobe Huffman              4079661 OK

The only thing that has changed is that I do believe I ran pip-review --auto and upgraded my PIP packages before I added these two photos.

27-2005-rainbow-boston

reagle commented 1 year ago

I just copied a previous jpeg that worked fine and it fails too. So I don't think there's anything wrong with the files but perhaps a sigal dependency changed?

saimn commented 1 year ago

I cannot reproduce the error locally. What is you version of pillow ? Can you paste the output of sigal build -fd -n 1 ?

reagle commented 1 year ago
Name: Pillow
Version: 10.0.0
Summary: Python Imaging Library (Fork)
Home-page: https://python-pillow.org
Author: Jeffrey A. Clark (Alex)
Author-email: aclark@aclark.net
License: HPND
Location: /Users/reagle/.pyenv/versions/3.11.3/lib/python3.11/site-packages
Requires: 
Required-by: matplotlib, sigal
❯ sigal build -fd -n 1 | cc
INFO - Reading settings ...
DEBUG - Settings file: sigal.conf.py
DEBUG - Rewrite destination : _build -> /Users/reagle/f/photo/_build
DEBUG - Settings:
{'albums_sort_attr': 'name',
 'albums_sort_reverse': True,
 'autorotate_images': True,
 'colorbox_column_size': 3,
 'copy_exif_data': False,
 'datetime_format': '%c',
 'destination': '/Users/reagle/f/photo/_build',
 'files_to_copy': (('_extras/htaccess-lock-index', '1972-1995/.htaccess'),
                   ('_extras/htaccess-lock-index', '1996-1999/.htaccess'),
                   ('_extras/htaccess-lock-index', '1999/.htaccess'),
                   ('_extras/htaccess-lock-index', '2000/.htaccess'),
                   ('_extras/htaccess-lock-index', '2001/.htaccess'),
                   ('_extras/htaccess-lock-index', '2002/.htaccess'),
                   ('_extras/htaccess-lock-index', '2003/.htaccess'),
                   ('_extras/htaccess-lock-index', '2004/.htaccess'),
                   ('_extras/htaccess-lock-index', '2005/.htaccess')),
 'galleria_theme': 'classic',
 'google_analytics': '',
 'google_tag_manager': '',
 'html_language': 'en',
 'ignore_directories': [],
 'ignore_files': [],
 'img_extensions': ['.jpg', '.jpeg', '.png', '.gif', '.tif', '.tiff', '.webp'],
 'img_format': None,
 'img_processor': 'ResizeToFit',
 'img_size': (1152, 1100),
 'index_in_url': True,
 'jpg_options': {'optimize': True, 'progressive': True, 'quality': 85},
 'keep_orig': False,
 'leaflet_provider': 'OpenStreetMap.Mapnik',
 'links': '',
 'locale': '',
 'make_thumbs': True,
 'map_height': '500px',
 'max_img_pixels': None,
 'medias_sort_attr': 'filename',
 'medias_sort_reverse': False,
 'mp4_options': ['-crf', '27'],
 'mp4_options_second_pass': None,
 'orig_dir': 'original',
 'orig_link': False,
 'output_filename': 'index.html',
 'piwik': {'site_id': 0, 'tracker_url': ''},
 'plugin_paths': [],
 'plugins': [],
 'rel_link': False,
 'show_map': False,
 'site_logo': '',
 'source': '/Users/reagle/f/photo/hires/',
 'theme': '/Users/reagle/f/photo/sigal-themes/photoswipe',
 'thumb_dir': 'thumbs',
 'thumb_fit': True,
 'thumb_fit_centering': (0.5, 0.5),
 'thumb_prefix': '',
 'thumb_size': (280, 210),
 'thumb_suffix': '',
 'thumb_video_delay': '0',
 'title': '',
 'use_orig': False,
 'user_css': '/Users/reagle/data/2web/goatee.net/photo/sigal-photoswipe-goatee.css',
 'video_always_convert': False,
 'video_converter': 'ffmpeg',
 'video_extensions': ['.mov', '.avi', '.mp4', '.webm', '.ogv', '.3gp', '.mkv'],
 'video_format': 'mp4',
 'video_size': (900, 700),
 'watermark': '',
 'webm_options': ['-crf',
                  '10',
                  '-b:v',
                  '885k',
                  '-ab',
                  '127k',
                  '-strict',
                  '-2',
                  '-qmin',
                  '4',
                  '-qmax',
                  '63',
                  'threads',
                  '3',
                  '-cpu-used',
                  '3'],
 'webm_options_second_pass': None,
 'write_html': True,
 'zip_gallery': False,
 'zip_media_format': 'resized'}
INFO -       Source : /Users/reagle/f/photo/hires/
INFO -  Destination : /Users/reagle/f/photo/_build
INFO -        Theme : /Users/reagle/f/photo/sigal-themes/photoswipe
DEBUG - Plugin paths: []
INFO - Using 1 cores
INFO - Skip empty album: <Album>(path='_extras', title='_extras')
DEBUG - Albums:
dict_values([<Album>(path='2013/03', title='03'), <Album>(path='2013/04', title='04'), <Album>(path='2013/05', title='05'), <Album>(path='2013/02', title='02'), <Album>(path='2013/11', title='11'), <Album>(path='2013/07', title='07'), <Album>(path='2013/09', title='09'), <Album>(path='2013/08', title='08'), <Album>(path='2013/01', title='01'), <Album>(path='2013/06', title='06'), <Album>(path='2013/12', title='12'), <Album>(path='2013', title='2013'), <Album>(path='2014/03', title='03'), <Album>(path='2014/04', title='04'), <Album>(path='2014/05', title='05'), <Album>(path='2014/02', title='02'), <Album>(path='2014/11', title='11'), <Album>(path='2014/10', title='10'), <Album>(path='2014/07', title='07'), <Album>(path='2014/09', title='09'), <Album>(path='2014/08', title='08'), <Album>(path='2014/01', title='01'), <Album>(path='2014/06', title='06'), <Album>(path='2014/12', title='12'), <Album>(path='2014', title='2014'), <Album>(path='2022/03', title='03'), <Album>(path='2022/05', title='05'), <Album>(path='2022/02', title='02'), <Album>(path='2022/11', title='11'), <Album>(path='2022/10', title='10'), <Album>(path='2022/07', title='07'), <Album>(path='2022/09', title='09'), <Album>(path='2022/08', title='08'), <Album>(path='2022/01', title='01'), <Album>(path='2022/06', title='06'), <Album>(path='2022/12', title='12'), <Album>(path='2022', title='2022'), <Album>(path='1972-1995/00', title='00'), <Album>(path='1972-1995', title='1972-1995'), <Album>(path='2023/03', title='03'), <Album>(path='2023/04', title='04'), <Album>(path='2023/05', title='05'), <Album>(path='2023/02', title='02'), <Album>(path='2023/07', title='07'), <Album>(path='2023/06', title='06'), <Album>(path='2023', title='2023'), <Album>(path='2015/03', title='03'), <Album>(path='2015/04', title='04'), <Album>(path='2015/05', title='05'), <Album>(path='2015/02', title='02'), <Album>(path='2015/11', title='11'), <Album>(path='2015/10', title='10'), <Album>(path='2015/07', title='07'), <Album>(path='2015/09', title='09'), <Album>(path='2015/08', title='08'), <Album>(path='2015/01', title='01'), <Album>(path='2015/06', title='06'), <Album>(path='2015/05-neu', title='05-neu'), <Album>(path='2015/12', title='12'), <Album>(path='2015', title='2015'), <Album>(path='2012/03', title='03'), <Album>(path='2012/04', title='04'), <Album>(path='2012/05', title='05'), <Album>(path='2012/02', title='02'), <Album>(path='2012/11', title='11'), <Album>(path='2012/10', title='10'), <Album>(path='2012/07', title='07'), <Album>(path='2012/09', title='09'), <Album>(path='2012/08', title='08'), <Album>(path='2012/01', title='01'), <Album>(path='2012/06', title='06'), <Album>(path='2012/05-wedding', title='05-wedding'), <Album>(path='2012/12', title='12'), <Album>(path='2012', title='2012'), <Album>(path='2008/03', title='03'), <Album>(path='2008/04', title='04'), <Album>(path='2008/05', title='05'), <Album>(path='2008/02', title='02'), <Album>(path='2008/11', title='11'), <Album>(path='2008/10', title='10'), <Album>(path='2008/07', title='07'), <Album>(path='2008/09', title='09'), <Album>(path='2008/08', title='08'), <Album>(path='2008/01', title='01'), <Album>(path='2008/06', title='06'), <Album>(path='2008/06-by-nora', title='06-by-nora'), <Album>(path='2008/12', title='12'), <Album>(path='2008', title='2008'), <Album>(path='2001/03', title='03'), <Album>(path='2001/04', title='04'), <Album>(path='2001/05', title='05'), <Album>(path='2001/02', title='02'), <Album>(path='2001/11', title='11'), <Album>(path='2001/10', title='10'), <Album>(path='2001/07', title='07'), <Album>(path='2001/09', title='09'), <Album>(path='2001/08', title='08'), <Album>(path='2001/01', title='01'), <Album>(path='2001/06', title='06'), <Album>(path='2001/12', title='12'), <Album>(path='2001', title='2001'), <Album>(path='2006/03', title='03'), <Album>(path='2006/04', title='04'), <Album>(path='2006/05', title='05'), <Album>(path='2006/02', title='02'), <Album>(path='2006/10', title='10'), <Album>(path='2006/07', title='07'), <Album>(path='2006/01', title='01'), <Album>(path='2006/06', title='06'), <Album>(path='2006', title='2006'), <Album>(path='2007/03', title='03'), <Album>(path='2007/04', title='04'), <Album>(path='2007/05', title='05'), <Album>(path='2007/11', title='11'), <Album>(path='2007/10', title='10'), <Album>(path='2007/07', title='07'), <Album>(path='2007/09', title='09'), <Album>(path='2007/08', title='08'), <Album>(path='2007/06', title='06'), <Album>(path='2007/12', title='12'), <Album>(path='2007', title='2007'), <Album>(path='2000/03', title='03'), <Album>(path='2000/04', title='04'), <Album>(path='2000/05', title='05'), <Album>(path='2000/02', title='02'), <Album>(path='2000/11', title='11'), <Album>(path='2000/10', title='10'), <Album>(path='2000/07', title='07'), <Album>(path='2000/08', title='08'), <Album>(path='2000/01', title='01'), <Album>(path='2000/06', title='06'), <Album>(path='2000/12', title='12'), <Album>(path='2000', title='2000'), <Album>(path='2009/03', title='03'), <Album>(path='2009/04', title='04'), <Album>(path='2009/05', title='05'), <Album>(path='2009/02', title='02'), <Album>(path='2009/11', title='11'), <Album>(path='2009/10', title='10'), <Album>(path='2009/07', title='07'), <Album>(path='2009/09', title='09'), <Album>(path='2009/08', title='08'), <Album>(path='2009/01', title='01'), <Album>(path='2009/06', title='06'), <Album>(path='2009/12', title='12'), <Album>(path='2009', title='2009'), <Album>(path='2017/04', title='04'), <Album>(path='2017/05', title='05'), <Album>(path='2017/02', title='02'), <Album>(path='2017/11', title='11'), <Album>(path='2017/10', title='10'), <Album>(path='2017/07', title='07'), <Album>(path='2017/09', title='09'), <Album>(path='2017/08', title='08'), <Album>(path='2017/01', title='01'), <Album>(path='2017/06', title='06'), <Album>(path='2017/12', title='12'), <Album>(path='2017', title='2017'), <Album>(path='2010/03', title='03'), <Album>(path='2010/04', title='04'), <Album>(path='2010/05', title='05'), <Album>(path='2010/02', title='02'), <Album>(path='2010/07-brooklyn-apt', title='07-brooklyn-apt'), <Album>(path='2010/11', title='11'), <Album>(path='2010/10', title='10'), <Album>(path='2010/07', title='07'), <Album>(path='2010/09', title='09'), <Album>(path='2010/08', title='08'), <Album>(path='2010/01', title='01'), <Album>(path='2010/12', title='12'), <Album>(path='2010', title='2010'), <Album>(path='2019/03', title='03'), <Album>(path='2019/04', title='04'), <Album>(path='2019/05', title='05'), <Album>(path='2019/11', title='11'), <Album>(path='2019/10', title='10'), <Album>(path='2019/07', title='07'), <Album>(path='2019/08', title='08'), <Album>(path='2019/01', title='01'), <Album>(path='2019/06', title='06'), <Album>(path='2019/12', title='12'), <Album>(path='2019', title='2019'), <Album>(path='2021/03', title='03'), <Album>(path='2021/04', title='04'), <Album>(path='2021/05', title='05'), <Album>(path='2021/11', title='11'), <Album>(path='2021/10', title='10'), <Album>(path='2021/07', title='07'), <Album>(path='2021/09', title='09'), <Album>(path='2021/08', title='08'), <Album>(path='2021/01', title='01'), <Album>(path='2021/06', title='06'), <Album>(path='2021/12', title='12'), <Album>(path='2021', title='2021'), <Album>(path='2020/03', title='03'), <Album>(path='2020/04', title='04'), <Album>(path='2020/05', title='05'), <Album>(path='2020/02', title='02'), <Album>(path='2020/11', title='11'), <Album>(path='2020/10', title='10'), <Album>(path='2020/07', title='07'), <Album>(path='2020/09', title='09'), <Album>(path='2020/08', title='08'), <Album>(path='2020/01', title='01'), <Album>(path='2020/06', title='06'), <Album>(path='2020/12', title='12'), <Album>(path='2020', title='2020'), <Album>(path='2018/03', title='03'), <Album>(path='2018/04', title='04'), <Album>(path='2018/05', title='05'), <Album>(path='2018/02', title='02'), <Album>(path='2018/11', title='11'), <Album>(path='2018/10', title='10'), <Album>(path='2018/07', title='07'), <Album>(path='2018/09', title='09'), <Album>(path='2018/08', title='08'), <Album>(path='2018/01', title='01'), <Album>(path='2018/06', title='06'), <Album>(path='2018/12', title='12'), <Album>(path='2018', title='2018'), <Album>(path='2011/04', title='04'), <Album>(path='2011/05', title='05'), <Album>(path='2011/02', title='02'), <Album>(path='2011/11', title='11'), <Album>(path='2011/10', title='10'), <Album>(path='2011/07', title='07'), <Album>(path='2011/09', title='09'), <Album>(path='2011/08', title='08'), <Album>(path='2011/06', title='06'), <Album>(path='2011/dan-lisa-abbygracephotography', title='dan-lisa-abbygracephotography'), <Album>(path='2011/12', title='12'), <Album>(path='2011', title='2011'), <Album>(path='2016/03', title='03'), <Album>(path='2016/04', title='04'), <Album>(path='2016/05', title='05'), <Album>(path='2016/02', title='02'), <Album>(path='2016/10', title='10'), <Album>(path='2016/07', title='07'), <Album>(path='2016/09', title='09'), <Album>(path='2016/08', title='08'), <Album>(path='2016/01', title='01'), <Album>(path='2016/06', title='06'), <Album>(path='2016/12', title='12'), <Album>(path='2016', title='2016'), <Album>(path='1999/11', title='11'), <Album>(path='1999/11-shower-hires', title='11-shower-hires'), <Album>(path='1999/12', title='12'), <Album>(path='1999', title='1999'), <Album>(path='2005/04', title='04'), <Album>(path='2005/05', title='05'), <Album>(path='2005/02', title='02'), <Album>(path='2005/10', title='10'), <Album>(path='2005/07', title='07'), <Album>(path='2005/09', title='09'), <Album>(path='2005/08', title='08'), <Album>(path='2005/01', title='01'), <Album>(path='2005/06', title='06'), <Album>(path='2005', title='2005'), <Album>(path='2002/03', title='03'), <Album>(path='2002/04', title='04'), <Album>(path='2002/05', title='05'), <Album>(path='2002/02', title='02'), <Album>(path='2002/11', title='11'), <Album>(path='2002/09-ai', title='09-ai'), <Album>(path='2002/10', title='10'), <Album>(path='2002/07', title='07'), <Album>(path='2002/09', title='09'), <Album>(path='2002/08', title='08'), <Album>(path='2002/01', title='01'), <Album>(path='2002/12', title='12'), <Album>(path='2002', title='2002'), <Album>(path='1996-1999/00', title='00'), <Album>(path='1996-1999', title='1996-1999'), <Album>(path='2003/02-ai', title='02-ai'), <Album>(path='2003/03', title='03'), <Album>(path='2003/04', title='04'), <Album>(path='2003/05', title='05'), <Album>(path='2003/02', title='02'), <Album>(path='2003/08-media-appearances', title='08-media-appearances'), <Album>(path='2003/11', title='11'), <Album>(path='2003/10', title='10'), <Album>(path='2003/07', title='07'), <Album>(path='2003/09', title='09'), <Album>(path='2003/08', title='08'), <Album>(path='2003/01', title='01'), <Album>(path='2003/06', title='06'), <Album>(path='2003/08-moving-in', title='08-moving-in'), <Album>(path='2003/08-family', title='08-family'), <Album>(path='2003/12', title='12'), <Album>(path='2003', title='2003'), <Album>(path='2004/03', title='03'), <Album>(path='2004/04', title='04'), <Album>(path='2004/05', title='05'), <Album>(path='2004/02', title='02'), <Album>(path='2004/11', title='11'), <Album>(path='2004/10', title='10'), <Album>(path='2004/posture-study', title='posture-study'), <Album>(path='2004/07', title='07'), <Album>(path='2004/09', title='09'), <Album>(path='2004/08', title='08'), <Album>(path='2004/01', title='01'), <Album>(path='2004/06', title='06'), <Album>(path='2004/schaddelees', title='schaddelees'), <Album>(path='2004/12', title='12'), <Album>(path='2004', title='2004'), <Album>(path='.', title='Stolen Souls')])
INFO - Processing /Users/reagle/f/photo/hires/2013/03/03-1320-pets.jpg
DEBUG - Processor: ResizeToFit
INFO - Failed to process: AttributeError("module 'PIL.Image' has no attribute 'ANTIALIAS'")
╭────────────────────────────── Traceback (most recent call last) ───────────────────────────────╮
│ /Users/reagle/.pyenv/versions/3.11.3/bin/sigal:8 in <module>                                   │
│                                                                                                │
│   5 from sigal import main                                                                     │
│   6 if __name__ == '__main__':                                                                 │
│   7 │   sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])                       │
│ ❱ 8 │   sys.exit(main())                                                                       │
│   9                                                                                            │
│                                                                                                │
│ ╭────────────────────────────────────────── locals ──────────────────────────────────────────╮ │
│ │ main = <Group main>                                                                        │ │
│ │   re = <module 're' from                                                                   │ │
│ │        '/Users/reagle/.pyenv/versions/3.11.3/lib/python3.11/re/__init__.py'>               │ │
│ │  sys = <module 'sys' (built-in)>                                                           │ │
│ ╰────────────────────────────────────────────────────────────────────────────────────────────╯ │
│                                                                                                │
│ /Users/reagle/.pyenv/versions/3.11.3/lib/python3.11/site-packages/click/core.py:1157 in        │
│ __call__                                                                                       │
│                                                                                                │
│   1154 │                                                                                       │
│   1155 │   def __call__(self, *args: t.Any, **kwargs: t.Any) -> t.Any:                         │
│   1156 │   │   """Alias for :meth:`main`."""                                                   │
│ ❱ 1157 │   │   return self.main(*args, **kwargs)                                               │
│   1158                                                                                         │
│   1159                                                                                         │
│   1160 class Command(BaseCommand):                                                             │
│                                                                                                │
│ ╭─────── locals ────────╮                                                                      │
│ │   args = ()           │                                                                      │
│ │ kwargs = {}           │                                                                      │
│ │   self = <Group main> │                                                                      │
│ ╰───────────────────────╯                                                                      │
│                                                                                                │
│ /Users/reagle/.pyenv/versions/3.11.3/lib/python3.11/site-packages/click/core.py:1078 in main   │
│                                                                                                │
│   1075 │   │   try:                                                                            │
│   1076 │   │   │   try:                                                                        │
│   1077 │   │   │   │   with self.make_context(prog_name, args, **extra) as ctx:                │
│ ❱ 1078 │   │   │   │   │   rv = self.invoke(ctx)                                               │
│   1079 │   │   │   │   │   if not standalone_mode:                                             │
│   1080 │   │   │   │   │   │   return rv                                                       │
│   1081 │   │   │   │   │   # it's not safe to `ctx.exit(rv)` here!                             │
│                                                                                                │
│ ╭───────────────────────────── locals ─────────────────────────────╮                           │
│ │                args = ['build', '-fd', '-n', '1']                │                           │
│ │        complete_var = None                                       │                           │
│ │                 ctx = <click.core.Context object at 0x10086e790> │                           │
│ │               extra = {}                                         │                           │
│ │           prog_name = 'sigal'                                    │                           │
│ │                self = <Group main>                               │                           │
│ │     standalone_mode = True                                       │                           │
│ │ windows_expand_args = True                                       │                           │
│ ╰──────────────────────────────────────────────────────────────────╯                           │
│                                                                                                │
│ /Users/reagle/.pyenv/versions/3.11.3/lib/python3.11/site-packages/click/core.py:1688 in invoke │
│                                                                                                │
│   1685 │   │   │   │   super().invoke(ctx)                                                     │
│   1686 │   │   │   │   sub_ctx = cmd.make_context(cmd_name, args, parent=ctx)                  │
│   1687 │   │   │   │   with sub_ctx:                                                           │
│ ❱ 1688 │   │   │   │   │   return _process_result(sub_ctx.command.invoke(sub_ctx))             │
│   1689 │   │                                                                                   │
│   1690 │   │   # In chain mode we create the contexts step by step, but after the              │
│   1691 │   │   # base command has been invoked.  Because at that point we do not               │
│                                                                                                │
│ ╭───────────────────────────────────────── locals ─────────────────────────────────────────╮   │
│ │ _process_result = <function MultiCommand.invoke.<locals>._process_result at 0x101525da0> │   │
│ │            args = []                                                                     │   │
│ │             cmd = <Command build>                                                        │   │
│ │        cmd_name = 'build'                                                                │   │
│ │             ctx = <click.core.Context object at 0x10086e790>                             │   │
│ │            self = <Group main>                                                           │   │
│ │         sub_ctx = <click.core.Context object at 0x101533050>                             │   │
│ ╰──────────────────────────────────────────────────────────────────────────────────────────╯   │
│                                                                                                │
│ /Users/reagle/.pyenv/versions/3.11.3/lib/python3.11/site-packages/click/core.py:1434 in invoke │
│                                                                                                │
│   1431 │   │   │   echo(style(message, fg="red"), err=True)                                    │
│   1432 │   │                                                                                   │
│   1433 │   │   if self.callback is not None:                                                   │
│ ❱ 1434 │   │   │   return ctx.invoke(self.callback, **ctx.params)                              │
│   1435 │                                                                                       │
│   1436 │   def shell_complete(self, ctx: Context, incomplete: str) -> t.List["CompletionItem"] │
│   1437 │   │   """Return a list of completions for the incomplete value. Looks                 │
│                                                                                                │
│ ╭───────────────────── locals ──────────────────────╮                                          │
│ │  ctx = <click.core.Context object at 0x101533050> │                                          │
│ │ self = <Command build>                            │                                          │
│ ╰───────────────────────────────────────────────────╯                                          │
│                                                                                                │
│ /Users/reagle/.pyenv/versions/3.11.3/lib/python3.11/site-packages/click/core.py:783 in invoke  │
│                                                                                                │
│    780 │   │                                                                                   │
│    781 │   │   with augment_usage_errors(__self):                                              │
│    782 │   │   │   with ctx:                                                                   │
│ ❱  783 │   │   │   │   return __callback(*args, **kwargs)                                      │
│    784 │                                                                                       │
│    785 │   def forward(                                                                        │
│    786 │   │   __self, __cmd: "Command", *args: t.Any, **kwargs: t.Any  # noqa: B902           │
│                                                                                                │
│ ╭──────────────────────────── locals ─────────────────────────────╮                            │
│ │ _Context__callback = <function build at 0x102752020>            │                            │
│ │     _Context__self = <click.core.Context object at 0x101533050> │                            │
│ │               args = ()                                         │                            │
│ │                ctx = <click.core.Context object at 0x101533050> │                            │
│ │             kwargs = {                                          │                            │
│ │                      │   'force': True,                         │                            │
│ │                      │   'debug': True,                         │                            │
│ │                      │   'ncpu': '1',                           │                            │
│ │                      │   'source': None,                        │                            │
│ │                      │   'destination': None,                   │                            │
│ │                      │   'verbose': False,                      │                            │
│ │                      │   'quiet': False,                        │                            │
│ │                      │   'config': 'sigal.conf.py',             │                            │
│ │                      │   'theme': None,                         │                            │
│ │                      │   'title': None                          │                            │
│ │                      }                                          │                            │
│ ╰─────────────────────────────────────────────────────────────────╯                            │
│                                                                                                │
│ /Users/reagle/.pyenv/versions/3.11.3/lib/python3.11/site-packages/sigal/__init__.py:174 in     │
│ build                                                                                          │
│                                                                                                │
│   171 │   init_plugins(settings)                                                               │
│   172 │                                                                                        │
│   173 │   gal = Gallery(settings, ncpu=ncpu, quiet=quiet)                                      │
│ ❱ 174 │   gal.build(force=force)                                                               │
│   175 │                                                                                        │
│   176 │   # copy extra files                                                                   │
│   177 │   for src, dst in settings['files_to_copy']:                                           │
│                                                                                                │
│ ╭───────────────────────────────────── locals ─────────────────────────────────────╮           │
│ │            arg = None                                                            │           │
│ │         config = 'sigal.conf.py'                                                 │           │
│ │          debug = True                                                            │           │
│ │    destination = None                                                            │           │
│ │          force = True                                                            │           │
│ │            gal = <sigal.gallery.Gallery object at 0x10266ea50>                   │           │
│ │            key = 'theme'                                                         │           │
│ │          level = 10                                                              │           │
│ │         logger = <Logger sigal (DEBUG)>                                          │           │
│ │           ncpu = '1'                                                             │           │
│ │          quiet = False                                                           │           │
│ │ relative_check = True                                                            │           │
│ │       settings = {                                                               │           │
│ │                  │   'albums_sort_attr': 'name',                                 │           │
│ │                  │   'albums_sort_reverse': True,                                │           │
│ │                  │   'autorotate_images': True,                                  │           │
│ │                  │   'colorbox_column_size': 3,                                  │           │
│ │                  │   'copy_exif_data': False,                                    │           │
│ │                  │   'datetime_format': '%c',                                    │           │
│ │                  │   'destination': '/Users/reagle/f/photo/_build',              │           │
│ │                  │   'files_to_copy': (                                          │           │
│ │                  │   │   (                                                       │           │
│ │                  │   │   │   '_extras/htaccess-lock-index',                      │           │
│ │                  │   │   │   '1972-1995/.htaccess'                               │           │
│ │                  │   │   ),                                                      │           │
│ │                  │   │   (                                                       │           │
│ │                  │   │   │   '_extras/htaccess-lock-index',                      │           │
│ │                  │   │   │   '1996-1999/.htaccess'                               │           │
│ │                  │   │   ),                                                      │           │
│ │                  │   │   ('_extras/htaccess-lock-index', '1999/.htaccess'),      │           │
│ │                  │   │   ('_extras/htaccess-lock-index', '2000/.htaccess'),      │           │
│ │                  │   │   ('_extras/htaccess-lock-index', '2001/.htaccess'),      │           │
│ │                  │   │   ('_extras/htaccess-lock-index', '2002/.htaccess'),      │           │
│ │                  │   │   ('_extras/htaccess-lock-index', '2003/.htaccess'),      │           │
│ │                  │   │   ('_extras/htaccess-lock-index', '2004/.htaccess'),      │           │
│ │                  │   │   ('_extras/htaccess-lock-index', '2005/.htaccess')       │           │
│ │                  │   ),                                                          │           │
│ │                  │   'galleria_theme': 'classic',                                │           │
│ │                  │   'google_analytics': '',                                     │           │
│ │                  │   ... +53                                                     │           │
│ │                  }                                                               │           │
│ │         source = None                                                            │           │
│ │     start_time = 1690805882.13594                                                │           │
│ │          theme = None                                                            │           │
│ │          title = None                                                            │           │
│ │        verbose = False                                                           │           │
│ ╰──────────────────────────────────────────────────────────────────────────────────╯           │
│                                                                                                │
│ /Users/reagle/.pyenv/versions/3.11.3/lib/python3.11/site-packages/sigal/gallery.py:871 in      │
│ build                                                                                          │
│                                                                                                │
│   868 │   │   │   │   self.pool.join()                                                         │
│   869 │   │   else:                                                                            │
│   870 │   │   │   with progressbar(media_list, **bar_opt) as medias:                           │
│ ❱ 871 │   │   │   │   result = [process_file(media_item) for media_item in medias]             │
│   872 │   │                                                                                    │
│   873 │   │   if any(result):                                                                  │
│   874 │   │   │   failed_files = [                                                             │
│                                                                                                │
│ ╭──────────────────────────────── locals ────────────────────────────────╮                     │
│ │     albums = <click._termui_impl.ProgressBar object at 0x102b2e750>    │                     │
│ │    bar_opt = {                                                         │                     │
│ │              │   'label': 'Processing files',                          │                     │
│ │              │   'show_pos': True,                                     │                     │
│ │              │   'file': <sigal.utils.Devnull object at 0x10275fbd0>   │                     │
│ │              }                                                         │                     │
│ │      force = True                                                      │                     │
│ │   log_func = <function Gallery.build.<locals>.log_func at 0x102b50680> │                     │
│ │ media_list = [                                                         │                     │
│ │              │   <Image>('2013/03/03-1320-pets.jpg'),                  │                     │
│ │              │   <Image>('2013/03/03-1355-tree.jpg'),                  │                     │
│ │              │   <Image>('2013/03/04-0915-building.jpg'),              │                     │
│ │              │   <Image>('2013/03/04-0918-building.jpg'),              │                     │
│ │              │   <Image>('2013/03/16-1243-casper.jpg'),                │                     │
│ │              │   <Image>('2013/03/23-1227-maggie.jpg'),                │                     │
│ │              │   <Image>('2013/03/23-1238-casper-maggie.jpg'),         │                     │
│ │              │   <Image>('2013/03/23-1244-maggie.jpg'),                │                     │
│ │              │   <Image>('2013/03/31-1113-casper.jpg'),                │                     │
│ │              │   <Video>('2013/03/31-casper-play-dog-chew.mp4'),       │                     │
│ │              │   ... +5962                                             │                     │
│ │              ]                                                         │                     │
│ │     medias = <click._termui_impl.ProgressBar object at 0x10274ecd0>    │                     │
│ │       self = <sigal.gallery.Gallery object at 0x10266ea50>             │                     │
│ ╰────────────────────────────────────────────────────────────────────────╯                     │
│                                                                                                │
│ /Users/reagle/.pyenv/versions/3.11.3/lib/python3.11/site-packages/sigal/gallery.py:871 in      │
│ <listcomp>                                                                                     │
│                                                                                                │
│   868 │   │   │   │   self.pool.join()                                                         │
│   869 │   │   else:                                                                            │
│   870 │   │   │   with progressbar(media_list, **bar_opt) as medias:                           │
│ ❱ 871 │   │   │   │   result = [process_file(media_item) for media_item in medias]             │
│   872 │   │                                                                                    │
│   873 │   │   if any(result):                                                                  │
│   874 │   │   │   failed_files = [                                                             │
│                                                                                                │
│ ╭─────────────────────────────── locals ───────────────────────────────╮                       │
│ │         .0 = <generator object ProgressBar.generator at 0x1026ee7a0> │                       │
│ │ media_item = <Image>('2013/03/03-1320-pets.jpg')                     │                       │
│ ╰──────────────────────────────────────────────────────────────────────╯                       │
│                                                                                                │
│ /Users/reagle/.pyenv/versions/3.11.3/lib/python3.11/site-packages/sigal/gallery.py:953 in      │
│ process_file                                                                                   │
│                                                                                                │
│   950 │   │   │   processor = ret                                                              │
│   951 │                                                                                        │
│   952 │   if processor:                                                                        │
│ ❱ 953 │   │   return processor(media)                                                          │
│   954 │   else:                                                                                │
│   955 │   │   logging.warning('Processor not found for media %s', media.path)                  │
│   956 │   │   return Status.FAILURE                                                            │
│                                                                                                │
│ ╭────────────────────── locals ───────────────────────╮                                        │
│ │     media = <Image>('2013/03/03-1320-pets.jpg')     │                                        │
│ │ processor = <function process_image at 0x102613ec0> │                                        │
│ │    result = []                                      │                                        │
│ ╰─────────────────────────────────────────────────────╯                                        │
│                                                                                                │
│ /Users/reagle/.pyenv/versions/3.11.3/lib/python3.11/site-packages/sigal/image.py:188 in        │
│ process_image                                                                                  │
│                                                                                                │
│   185 │   │   options = {}                                                                     │
│   186 │                                                                                        │
│   187 │   try:                                                                                 │
│ ❱ 188 │   │   generate_image(media.src_path, media.dst_path, media.settings, options=options)  │
│   189 │   │                                                                                    │
│   190 │   │   if media.settings['make_thumbs']:                                                │
│   191 │   │   │   generate_thumbnail(                                                          │
│                                                                                                │
│ ╭───────────────────────────── locals ─────────────────────────────╮                           │
│ │  logger = <Logger sigal.image (DEBUG)>                           │                           │
│ │   media = <Image>('2013/03/03-1320-pets.jpg')                    │                           │
│ │ options = {'quality': 85, 'optimize': True, 'progressive': True} │                           │
│ ╰──────────────────────────────────────────────────────────────────╯                           │
│                                                                                                │
│ /Users/reagle/.pyenv/versions/3.11.3/lib/python3.11/site-packages/sigal/image.py:139 in        │
│ generate_image                                                                                 │
│                                                                                                │
│   136 │   │   │   height, width = width, height                                                │
│   137 │   │                                                                                    │
│   138 │   │   processor = processor_cls(width, height, upscale=False)                          │
│ ❱ 139 │   │   img = processor.process(img)                                                     │
│   140 │                                                                                        │
│   141 │   # signal.send() does not work here as plugins can modify the image, so we            │
│   142 │   # iterate other the receivers to call them with the image.                           │
│                                                                                                │
│ ╭────────────────────────────────────────── locals ──────────────────────────────────────────╮ │
│ │          height = 1100                                                                     │ │
│ │             img = <PIL.JpegImagePlugin.JpegImageFile image mode=RGB size=2598x1948 at      │ │
│ │                   0x102CC4090>                                                             │ │
│ │          logger = <Logger sigal.image (DEBUG)>                                             │ │
│ │         options = {'quality': 85, 'optimize': True, 'progressive': True}                   │ │
│ │ original_format = 'JPEG'                                                                   │ │
│ │         outname = '/Users/reagle/f/photo/_build/2013/03/03-1320-pets.jpg'                  │ │
│ │       processor = <pilkit.processors.resize.ResizeToFit object at 0x10249cfd0>             │ │
│ │   processor_cls = <class 'pilkit.processors.resize.ResizeToFit'>                           │ │
│ │        settings = {                                                                        │ │
│ │                   │   'albums_sort_attr': 'name',                                          │ │
│ │                   │   'albums_sort_reverse': True,                                         │ │
│ │                   │   'autorotate_images': True,                                           │ │
│ │                   │   'colorbox_column_size': 3,                                           │ │
│ │                   │   'copy_exif_data': False,                                             │ │
│ │                   │   'datetime_format': '%c',                                             │ │
│ │                   │   'destination': '/Users/reagle/f/photo/_build',                       │ │
│ │                   │   'files_to_copy': (                                                   │ │
│ │                   │   │   ('_extras/htaccess-lock-index', '1972-1995/.htaccess'),          │ │
│ │                   │   │   ('_extras/htaccess-lock-index', '1996-1999/.htaccess'),          │ │
│ │                   │   │   ('_extras/htaccess-lock-index', '1999/.htaccess'),               │ │
│ │                   │   │   ('_extras/htaccess-lock-index', '2000/.htaccess'),               │ │
│ │                   │   │   ('_extras/htaccess-lock-index', '2001/.htaccess'),               │ │
│ │                   │   │   ('_extras/htaccess-lock-index', '2002/.htaccess'),               │ │
│ │                   │   │   ('_extras/htaccess-lock-index', '2003/.htaccess'),               │ │
│ │                   │   │   ('_extras/htaccess-lock-index', '2004/.htaccess'),               │ │
│ │                   │   │   ('_extras/htaccess-lock-index', '2005/.htaccess')                │ │
│ │                   │   ),                                                                   │ │
│ │                   │   'galleria_theme': 'classic',                                         │ │
│ │                   │   'google_analytics': '',                                              │ │
│ │                   │   ... +53                                                              │ │
│ │                   }                                                                        │ │
│ │          source = '/Users/reagle/f/photo/hires/2013/03/03-1320-pets.jpg'                   │ │
│ │           width = 1152                                                                     │ │
│ ╰────────────────────────────────────────────────────────────────────────────────────────────╯ │
│                                                                                                │
│ /Users/reagle/.pyenv/versions/3.11.3/lib/python3.11/site-packages/pilkit/processors/resize.py: │
│ 227 in process                                                                                 │
│                                                                                                │
│   224 │   │   │   │   ratio = float(self.width) / cur_width                                    │
│   225 │   │   new_dimensions = (int(round(cur_width * ratio)),                                 │
│   226 │   │   │   │   │   │     int(round(cur_height * ratio)))                                │
│ ❱ 227 │   │   img = Resize(new_dimensions[0], new_dimensions[1], upscale=self.upscale).process │
│   228 │   │   if self.mat_color is not None:                                                   │
│   229 │   │   │   img = ResizeCanvas(self.width, self.height, self.mat_color, anchor=self.anch │
│   230 │   │   return img                                                                       │
│                                                                                                │
│ ╭────────────────────────────────────────── locals ──────────────────────────────────────────╮ │
│ │     cur_height = 1948                                                                      │ │
│ │      cur_width = 2598                                                                      │ │
│ │            img = <PIL.JpegImagePlugin.JpegImageFile image mode=RGB size=2598x1948 at       │ │
│ │                  0x102CC4090>                                                              │ │
│ │ new_dimensions = (1152, 864)                                                               │ │
│ │          ratio = 0.44341801385681295                                                       │ │
│ │           self = <pilkit.processors.resize.ResizeToFit object at 0x10249cfd0>              │ │
│ ╰────────────────────────────────────────────────────────────────────────────────────────────╯ │
│                                                                                                │
│ /Users/reagle/.pyenv/versions/3.11.3/lib/python3.11/site-packages/pilkit/processors/resize.py: │
│ 24 in process                                                                                  │
│                                                                                                │
│    21 │   def process(self, img):                                                              │
│    22 │   │   if self.upscale or (self.width < img.size[0] and self.height < img.size[1]):     │
│    23 │   │   │   img = img.convert('RGBA')                                                    │
│ ❱  24 │   │   │   img = img.resize((self.width, self.height), Image.ANTIALIAS)                 │
│    25 │   │   return img                                                                       │
│    26                                                                                          │
│    27                                                                                          │
│                                                                                                │
│ ╭──────────────────────────────── locals ────────────────────────────────╮                     │
│ │  img = <PIL.Image.Image image mode=RGBA size=2598x1948 at 0x102764650> │                     │
│ │ self = <pilkit.processors.resize.Resize object at 0x10262a150>         │                     │
│ ╰────────────────────────────────────────────────────────────────────────╯                     │
╰────────────────────────────────────────────────────────────────────────────────────────────────╯
AttributeError: module 'PIL.Image' has no attribute 'ANTIALIAS'
saimn commented 1 year ago

Pillow 10.0 isn't supported by pilkit (another dependency of sigal) currently (#493), so you should use Pillow<10.

reagle commented 1 year ago

Okay, that seems to be easily fixed: pip install Pillow==9.5.0. Is it a mistake to run pip-review --auto; did it override a specified dependency or pin?