Closed reagle closed 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?
I cannot reproduce the error locally.
What is you version of pillow ?
Can you paste the output of sigal build -fd -n 1
?
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'
Pillow 10.0 isn't supported by pilkit (another dependency of sigal) currently (#493), so you should use Pillow<10.
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?
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.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.