This repository has been archived by the owner on Nov 1, 2024. It is now read-only.
forked from thumbor/thumbor
-
Notifications
You must be signed in to change notification settings - Fork 4
/
CHANGELOG
792 lines (559 loc) · 33.7 KB
/
CHANGELOG
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
6.3.2 (6.3.2)
Fixes a gif to video conversion (gifv) bug for mp4s. See https://github.com/thumbor/thumbor/pull/904 and https://github.com/thumbor/thumbor/issues/903 for more details.
Release 6.3.1 (6.3.1)
## Features:
- Raises error only when gifsicle returns empty result, logs any gifsicle errors/warnings
[Diff to previous release](https://github.com/thumbor/thumbor/compare/6.3.0...6.3.1)
Release 6.3.0 (6.3.0)
## Features
* New [`background_color`][background_color] filter (thanks @hermanmaritz – #875)
* Enable [`xheaders`][xheaders] for Tornado, allowing discovery of the true client IP at the Thumbor level when behind a proxy (thanks @gi11es – #847)
* Allow specifying [`validate_cert`][validate_cert] to Tornado via the new `HTTP_LOADER_VALIDATE_CERTS` config variable (default is `None`) (thanks @kkopachev – #751)
* Allow specifying PNG [compression level][compression_level] by means of the `PNG_COMPRESSION_LEVEL` config variable (default is `6`) (thanks @dkhabarov – #825)
## Fixes / Improvements
* Fix reorientation when no Exif information is available (thanks @seffenberg-naspers – #849)
* Fix a quality loss issue by removing the `draft` option so PNGs get colorspace converted before resizing operations (thanks @okor – #858)
* Convert 1bit PNGs before resizing (thanks @kevin1024 – #859)
* Make `Transformer.smart_detect()` a coroutine and fix issues with S3 storage (thanks @mpilar and @decebal – #859, #721 and #722)
* Improve SVG detection and conversion
* Improve the [`distributed_collage`][distributed_collage] filter
* Fix unhandled `'NoneType' object has no attribute 'mode'` detector exceptions (thanks @mvdklip – #841)
* Return `400 - Bad Request` on [watermark][watermark] errors (thanks @noamsml and @nerdrew – #854)
* Convert indexed color images back to their original mode after resizing (thanks @okor – #873)
* Do not hang request on `Engine.read()` exceptions (thanks @Savar – #871)
* Do not hang request on `Storage.get()` exceptions
## Docs
* Add docs for new [metrics plugin `Prometheus`][metrics] (thanks @Savar – #869)
* Replace copyrighted images with copylefted ones
* Improve [`filling`][filling] documentation
* Improve [`fit-in`][fit-in] usage (thanks @Savar – #870)
[Diff to previous release][diff-release]
[pypi release][pypi-release]
[background_color]: http://thumbor.readthedocs.io/en/latest/background_color.html
[xheaders]: http://www.tornadoweb.org/en/branch4.4/httpserver.html?highlight=httpserver#http-server
[validate_cert]: http://www.tornadoweb.org/en/branch4.4/httpclient.html#tornado.httpclient.HTTPRequest
[compression_level]: http://pillow.readthedocs.io/en/3.4.x/handbook/image-file-formats.html?highlight=compression_level#png
[distributed_collage]: https://github.com/thumbor/thumbor/blob/master/thumbor/filters/distributed_collage.py
[metrics]: http://thumbor.readthedocs.io/en/latest/plugins.html#metrics
[watermark]: http://thumbor.readthedocs.io/en/latest/watermark.html
[filling]: http://thumbor.readthedocs.io/en/latest/filling.html
[fit-in]: http://thumbor.readthedocs.io/en/latest/usage.html#fit-in
[diff-release]: https://github.com/thumbor/thumbor/compare/6.1.4...6.3.0
[pypi-release]: https://pypi.python.org/pypi/thumbor/6.3.0
Release 6.1.4 (6.1.4)
## Features:
- Fix: Catching exception in ThreadPool to force callback to be executed
- Raises error when gitsicle returns error in GifEngine
[Diff to previous release](https://github.com/thumbor/thumbor/compare/6.1.3...6.1.4)
[pypi release](https://pypi.python.org/pypi/thumbor/6.1.4)
Release 6.1.3 (6.1.3)
## Features:
- Fix: #781 Added some log when Image.DecompressionBombWarning happens, thanks @phoet
[Diff to previous release](https://github.com/thumbor/thumbor/compare/6.1.2...6.1.3)
[pypi release](https://pypi.python.org/pypi/thumbor/6.1.3)
Release 6.1.2 (6.1.2)
## Features:
- Fix: #757 Ignore sentry package parsing error, thanks @kkopachev
[Diff to previous release](https://github.com/thumbor/thumbor/compare/6.1.2...6.1.3)
[pypi release](https://pypi.python.org/pypi/thumbor/6.1.3)
Release 6.1.1 (6.1.1)
## Features:
- Fix: #782 Check if context.request has engine
- Set engine.extension when reading image with PIL engine
[Diff to previous release](https://github.com/thumbor/thumbor/compare/6.1.0...6.1.1)
[pypi release](https://pypi.python.org/pypi/thumbor/6.1.1)
Release 6.1.0 (6.1.0)
## Features:
- Added some response metrics
- Make app_class definable in config, thanks @gi11es
[Diff to previous release](https://github.com/thumbor/thumbor/compare/6.0.2...6.1.0)
[pypi release](https://pypi.python.org/pypi/thumbor/6.1.0)
Release 6.0.2 (6.0.2)
## Features:
- no_storage for result_storages #669, thanks @cerber717
- Add new loader, that implements a http loader fallback if image file loading failed #710, thanks @werfux
- Add ability for engines to do cleanup on shutdown #719, thanks @gi11es
## BUGFIXES
- Images above MAX_PIXELS result in HTTP 400
- Fix path to documentation #694,thanks @mpdude
- Fix upload URL to be /image instead of /upload #706, thanks @cweiske
- Doc fixes #707, thanks @cweiske
- Remove unused simplejson dependency #717, thanks @gi11es
- Dependencies clean up #724 #742 #741 #743, thanks @gi11es
- Use pyssim instead of scikit-image for SSIM calculation #732, thanks @gi11es
- Unused dependencies removed #734 #735 #736 #737, thanks @gi11es
- Image rotation fixed
- Always set Vary header if AUTO_WEBP is True
[Diff to previous release](https://github.com/thumbor/thumbor/compare/6.0.1...6.0.2)
[pypi release](https://pypi.python.org/pypi/thumbor/6.0.2)
Release 6.0.1 (6.0.1)
## Features:
- Allowing regex pattern as ALLOWED_SOURCES
## BUGFIXES
- Fix utf-8 urls encoding
- Fix setuptools 20.3+ compatibility, thanks @gi11es #692
[Diff to previous release](https://github.com/thumbor/thumbor/compare/6.0.0...6.0.1)
[pypi release](https://pypi.python.org/pypi/thumbor/6.0.1)
Release 6.0.0 (6.0.0)
### THIS RELEASE HAS BREAKING CHANGES
## Features:
- Face detection speed improved and using cv2 interface
- Legay upload API removed
- Redis storage removed from core, now on [tc_redis](https://github.com/thumbor-community/redis)
- Memcached storage removed from core, now on [thumbor-memcached](https://github.com/thumbor-community/thumbor-memcached)
- MongoDB storage removed from core, now on [tc_mongodb](https://github.com/thumbor-community/mongodb), thanks @masom #591
- Better Pillow JPEG options, thanks @seichner #578
- Watermark centering on filter, thanks @adeboisanger #545
- Re-read storage value to allow for override, thanks @gi11es #632
- Focal point filter, thanks @okor #664
- Focal point filter [docs](http://thumbor.readthedocs.org/en/latest/focal.html), thanks @okor #665
- Add Metadata extraction and make this and the target size available for filters, thanks @sbaechler #661
- SVG support #648, thanks @rodrigolourenco
- Add SVG_DPI configuration directive #676 thanks @znerol
- Improve detection of SVG images #677 thanks @znerol
- Updated to Pillow 3
## BUGFIXES
- More accurate result storage metrics, thanks @masom #590
- CDN cache on loader timeout fixed, thanks @andrew-a-dev #595
- last-modified now in UTC, thanks @Bladrak #600
- Pixel count limit protection, thanks @gi11es #614
- Error treatment inside Engine.load, thanks @gi11es #626
- MAX_AGE=False docs, thanks @Bertg #621
- Repository url fixed on files, thanks @jordi12100 #627
- Subprocess running without shell=True, thanks @gi11es #639
- get_orientation now won't change the original image, thanks @sbaechler #643
- Fixing http_loader behavior with url already generated by thumbor
- Fixed a file descriptor leak.
- Fixed JPEG CMYK with quality='keep' error
[Diff to previous release](https://github.com/thumbor/thumbor/compare/5.2.1...6.0.0)
[pypi release](https://pypi.python.org/pypi/thumbor/6.0.0)
Release 6.0.0b5 (6.0.0b5)
## Features:
- Add SVG_DPI configuration directive #676 thanks @znerol
- Improve detection of SVG images #677 thanks @znerol
- Updated to Pillow 3
[Diff to previous release](https://github.com/thumbor/thumbor/compare/6.0.0b4...6.0.0b5)
[pypi release](https://pypi.python.org/pypi/thumbor/6.0.0b5)
Release 6.0.0b4 (6.0.0b4)
## Features:
- SVG support #648, thanks @rodrigolourenco
## BUGFIXES
- Fixed JPEG CMYK with quality='keep' error
[Diff to previous release](https://github.com/thumbor/thumbor/compare/6.0.0b3...6.0.0b4)
[pypi release](https://pypi.python.org/pypi/thumbor/6.0.0b4)
Release 6.0.0b3 (6.0.0b3)
## Features:
- Focal point filter, thanks @okor #664
- Focal point filter [docs](http://thumbor.readthedocs.org/en/latest/focal.html), thanks @okor #665
- Add Metadata extraction and make this and the target size available for filters, thanks @sbaechler #661
## BUGFIXES
- Fixed a file descriptor leak.
[Diff to previous release](https://github.com/thumbor/thumbor/compare/6.0.0b2...6.0.0b3)
[pypi release](https://pypi.python.org/pypi/thumbor/6.0.0b3)
Release 6.0.0b2 (6.0.0b2)
### THIS RELEASE HAS BREAKING CHANGES
## BUGFIXES
- Fixing http_loader behavior with url already generated by thumbor
[Diff to previous release](https://github.com/thumbor/thumbor/compare/6.0.0b1...6.0.0b2)
[pypi release](https://pypi.python.org/pypi/thumbor/6.0.0b2)
Release 6.0.0b1 (6.0.0b1)
## Features:
- Face detection speed improved and using cv2 interface
- Legay upload API removed
- Redis storage removed from core, now on [tc_redis](https://github.com/thumbor-community/redis)
- Memcached storage removed from core, now on [thumbor-memcached](https://github.com/thumbor-community/thumbor-memcached)
- MongoDB storage removed from core, now on [tc_mongodb](https://github.com/thumbor-community/mongodb), thanks @masom #591
- Better Pillow JPEG options, thanks @seichner #578
- Watermark centering on filter, thanks @adeboisanger #545
- Re-read storage value to allow for override, thanks @gi11es #632
## BUGFIXES
- More accurate result storage metrics, thanks @masom #590
- CDN cache on loader timeout fixed, thanks @andrew-a-dev #595
- last-modified now in UTC, thanks @Bladrak #600
- Pixel count limit protection, thanks @gi11es #614
- Error treatment inside Engine.load, thanks @gi11es #626
- MAX_AGE=False docs, thanks @Bertg #621
- Repository url fixed on files, thanks @jordi12100 #627
- Subprocess running without shell=True, thanks @gi11es #639
- get_orientation now won't change the original image, thanks @sbaechler #643
[Diff to previous release](https://github.com/thumbor/thumbor/compare/5.2.1...6.0.0b1)
[pypi release](https://pypi.python.org/pypi/thumbor/6.0.0b1)
Release 5.2.1 (5.2.1)
## Bug fix:
- Fixed meta handler
[Diff to previous release](https://github.com/thumbor/thumbor/compare/5.2.0...5.2.1)
[pypi release](https://pypi.python.org/pypi/thumbor/5.2.1)
Release 5.2.0 (5.2.0)
## Features:
- LoaderResult object #554 thanks @masom
- qtable/subsampling configurable #563 thanks @seichner
- Adds the jp2 aka jpeg2000 MIME type #572 thanks @okor
- Allow result_storages to be asynchronous #573 thanks @masom
- Implemented ResultStorageResult class #575 thanks @Bladrak
## Bug fix:
- Fixed PEP8 issues
- $ encode fixed #571 thanks @ryanio
- Set content type based on mime #569 thanks @okor
- Fixed async result storage with last modified header #574 thanks @Bladrak
[Diff to previous release](https://github.com/thumbor/thumbor/compare/5.1.0...5.2.0)
[pypi release](https://pypi.python.org/pypi/thumbor/5.2.0)
Release 5.1.0 (5.1.0)
## Features:
- allow to specify jpg-subsampling for Pillow #519 Thanks @seichner
- pluggable metrics backend #521 Thanks @phoet
- Modular url signer #524 Thanks @masom
## Bug Fix:
- Pallete mode fixed on WebP #520
- Handle invalid images and return a 400 or 500 depending on the cause #541 Thanks @masom
- Cache poisoning on timeout fixed #529
[Diff to previous release](https://github.com/thumbor/thumbor/compare/5.0.6...5.1.0)
[pypi release](https://pypi.python.org/pypi/thumbor/5.1.0)
Release 5.0.6 (5.0.6)
- fix segfault in round corners filter.
- CHANGELOG replaces stale History.md. #511 Thanks @pda
[Diff to previous release](https://github.com/thumbor/thumbor/compare/5.0.5...5.0.6)
[pypi release](https://pypi.python.org/pypi/thumbor/5.0.6)
Release 5.0.5 (5.0.5)
- Using MIME to define extension
- fix webp with max_bytes filter and there's no quality defined. #506 Thanks @lfalcao
- STORAGE_EXPIRATION_SECONDS ignored when it's None or 0
[Diff to previous release](https://github.com/thumbor/thumbor/compare/5.0.4...5.0.5)
[pypi release](https://pypi.python.org/pypi/thumbor/5.0.5)
Release 5.0.4 (5.0.4)
- Fix image extension with query string #499 Thanks @dhardy92 and @kuhess
[Diff to previous release](https://github.com/thumbor/thumbor/compare/5.0.3...5.0.4)
[pypi release](https://pypi.python.org/pypi/thumbor/5.0.4)
Release 5.0.3 (5.0.3)
- Fixing filters on thumbor-url #482
[Diff to previous release](https://github.com/thumbor/thumbor/compare/5.0.2...5.0.3)
[pypi release](https://pypi.python.org/pypi/thumbor/5.0.3)
Release 5.0.2 (5.0.2)
- Fixing filters on thumbor-url
[Diff to previous release](https://github.com/thumbor/thumbor/compare/5.0.1...5.0.2)
[pypi release](https://pypi.python.org/pypi/thumbor/5.0.2)
Release 5.0.1 (5.0.1)
- Fixing adaptive and full fit-in on thumbor-url
[Diff to previous release](https://github.com/thumbor/thumbor/compare/5.0.0...5.0.1)
[pypi release](https://pypi.python.org/pypi/thumbor/5.0.1)
Release 5.0.0 (5.0.0)
# WHY the major release?
Thumbor's storage and result storage all used synchronous interfaces. That's not an issue per-se, but it's not the proper way to use tornado.
Several users were having issues in production due to timeouts and broken requests.
We were at a cross-roads. Fix the issue in a "broken" way but without any breaking changes, or go with what the community feels is the right way for thumbor to go, while being incompatible with currently developed extensions.
We felt we needed to fix this in a way that felt "right". Hopefully we'll be more aligned with future evolutions of tornado.
With the help of the community we were able to fix this issue and make thumbor more robust, more scalable and more predictable.
Feedback on this is highly encouraged. Feel free to create issues if something is amiss.
# WARNING
> This version contains breaking changes. If you use your own version of a Storage or ResultStorage, all of those are async now and should return a Future. For more info, check the built-in one from thumbor's codebase.
# BREAKING Changes
- Async contract for all of thumbor's imported modules #459. thanks @masom
# Changes
- Tornado updated to 4.1
- Better GifEngine error handling #448. thanks @masom
- Fixing error log on cache miss #453. thanks @dhardy92
- Meta now has frame count #451
- Https loader and strict https loader added #471. thanks @lukaselmer
# Benchmark
## 4.0.0
```
Running 10s test @ http://127.0.0.1:8888/unsafe/300x300/s.glbimg.com/et/nv/f/original/2015/05/01/casamento-raphaeldias.jpg
40 threads and 40 connections
Thread Stats Avg Stdev Max +/- Stdev
Latency 2.42s 748.35ms 2.83s 84.03%
Req/Sec 0.22 0.95 9.00 95.83%
Latency Distribution
50% 2.79s
75% 2.80s
90% 2.81s
99% 2.82s
144 requests in 10.10s, 3.77MB read
Requests/sec: 14.26
Transfer/sec: 382.70KB
```
## 4.12.2
```
Running 10s test @ http://127.0.0.1:8888/unsafe/300x300/s.glbimg.com/et/nv/f/original/2015/05/01/casamento-raphaeldias.jpg
40 threads and 40 connections
Thread Stats Avg Stdev Max +/- Stdev
Latency 2.41s 449.85ms 3.46s 80.42%
Req/Sec 0.01 0.12 1.00 98.60%
Latency Distribution
50% 2.48s
75% 2.65s
90% 2.83s
99% 3.24s
143 requests in 10.07s, 3.75MB read
Requests/sec: 14.21
Transfer/sec: 381.29KB
```
## 5.0.0
```
Running 10s test @ http://127.0.0.1:8888/unsafe/300x300/s.glbimg.com/et/nv/f/original/2015/05/01/casamento-raphaeldias.jpg
40 threads and 40 connections
Thread Stats Avg Stdev Max +/- Stdev
Latency 2.16s 476.70ms 2.72s 83.54%
Req/Sec 0.04 0.20 1.00 95.73%
Latency Distribution
50% 2.30s
75% 2.43s
90% 2.56s
99% 2.70s
164 requests in 10.08s, 4.30MB read
Requests/sec: 16.27
Transfer/sec: 436.80KB
```
[Diff to previous release](https://github.com/thumbor/thumbor/compare/4.12.2...5.0.0)
[pypi release](https://pypi.python.org/pypi/thumbor/5.0.0)
Release 5.0.0rc2 (5.0.0rc2)
- Tornado updated to 4.1
- Async storage #459. thanks @masom
- Better GifEngine error treatment #448. thanks @masom
- Fixing error log on cache miss #453. thanks @dhardy92
- Meta now has frame count #451
[Diff to previous release](https://github.com/thumbor/thumbor/compare/4.12.2...5.0.0rc2)
[pypi release](https://pypi.python.org/pypi/thumbor/5.0.0rc2)
Release 4.12.2 (4.12.2)
- Fixing Redis Storage behavior #437. thanks @masom
[Diff to previous release](https://github.com/thumbor/thumbor/compare/4.12.1...4.12.2)
[pypi release](https://pypi.python.org/pypi/thumbor/4.12.2)
Release 4.12.1 (4.12.1)
- Better WebM encoding.
[Diff to previous release](https://github.com/thumbor/thumbor/compare/4.12.0...4.12.1)
[pypi release](https://pypi.python.org/pypi/thumbor/4.12.1)
Release 4.12.0 (4.12.0)
- Thumbor now using threadpool for image operations #429. Thank you @kevin1024
- Async optimizers and StatsD #436 #435. Thank you @kevin1024
- Config for max clients limit #430. Thank you @kevin1024
[Diff to previous release](https://github.com/thumbor/thumbor/compare/4.11.1...4.12.0)
[pypi release](https://pypi.python.org/pypi/thumbor/4.12.0)
Release 4.11.1 (4.11.1)
* Fixing engine size reference.
[Diff to previous release](https://github.com/thumbor/thumbor/compare/4.11.0...4.11.1)
[pypi release](https://pypi.python.org/pypi/thumbor/4.11.1)
Release 4.11.0 (4.11.0)
* Allows GIF first frame extraction filter:cover() #426. Thanks @kplaube
* Fix MimeType Charset upload #422. Thanks @dhardy92
* Allows configurable GIF engine #432. Thanks @masom
[Diff to previous release](https://github.com/thumbor/thumbor/compare/4.10.3...4.11.0)
[pypi release](https://pypi.python.org/pypi/thumbor/4.11.0)
Release 4.10.3 (4.10.3)
* Allow optimizers to change the format. Thank you, @masom
* Support filling with transparency. Thanks to @evanmo
[Diff to previous release](https://github.com/thumbor/thumbor/compare/4.10.2...4.10.3)
[pypi release](https://pypi.python.org/pypi/thumbor/4.10.3)
Release 4.10.2 (4.10.2)
* Changin the way image format is being checked so that it doesn't conflict #421. Thank you @krynble
* upgrade to release pexif #417. Thank you @dhardy92
[Diff to previous release](https://github.com/thumbor/thumbor/compare/4.10.1...4.10.2)
[pypi release](https://pypi.python.org/pypi/thumbor/4.10.2)
Release 4.10.1 (4.10.1)
* Add some more images to integration tests
[Diff to previous release](https://github.com/thumbor/thumbor/compare/4.10.0...4.10.1)
[pypi release](https://pypi.python.org/pypi/thumbor/4.10.1)
Release 4.10.0 (4.10.0)
* RGB curver filter. #353 Thanks to @gockxml
[Diff to previous release](https://github.com/thumbor/thumbor/compare/4.9.1...4.10.0)
[pypi release](https://pypi.python.org/pypi/thumbor/4.10.0)
Release 4.9.1 (4.9.1)
* Fixing setup.py classifiers.
[Diff to previous release](https://github.com/thumbor/thumbor/compare/4.9.0...4.9.1)
[pypi release](https://pypi.python.org/pypi/thumbor/4.9.1)
Release 4.9.0 (4.9.0)
* Python 2.6 support dropped.
* Fixing custom_optimizers bug #393. Thanks @chentschel, @hltbra and @zkourouma
* id max length option added #414. Thanks @dhardy92
* logging configuration capabilities added #415. Thanks @dhardy92
[Diff to previous release](https://github.com/thumbor/thumbor/compare/4.8.6...4.9.0)
[pypi release](https://pypi.python.org/pypi/thumbor/4.9.0)
Release 4.8.6 (4.8.6)
* Avoiding IOError on PIL when debugging truncated/broken images
[Diff to previous release](https://github.com/thumbor/thumbor/compare/4.8.5...4.8.6)
[pypi release](https://pypi.python.org/pypi/thumbor/4.8.6)
Release 4.8.5 (4.8.5)
* WEBM and MP4 file type detection
[Diff to previous release](https://github.com/thumbor/thumbor/compare/4.8.3...4.8.5)
[pypi release](https://pypi.python.org/pypi/thumbor/4.8.5)
Release 4.8.3 (4.8.3)
* Thumbor is now python 2.6 compatible. Thanks @guilhermef
[Diff to previous release](https://github.com/thumbor/thumbor/compare/4.8.2...4.8.3)
[pypi release](https://pypi.python.org/pypi/thumbor/4.8.3)
Release 4.8.2 (4.8.2)
* Fixing gif loaded from result storage.
[Diff to previous release](https://github.com/thumbor/thumbor/compare/4.8.1...4.8.2)
[pypi release](https://pypi.python.org/pypi/thumbor/4.8.2)
Release 4.8.1 (4.8.1)
* Added WebM support.
[Diff to previous release](https://github.com/thumbor/thumbor/compare/4.8.0...4.8.1)
[pypi release](https://pypi.python.org/pypi/thumbor/4.8.1)
Release 4.8.0 (4.8.0)
* Added support for If-Modified-Since & Last-Updated headers by @Bladrak (Thanks!);
* Max age per image by @wandenberg (Thanks!);
* Better mp4 support;
[Diff to previous release](https://github.com/thumbor/thumbor/compare/4.7.1...4.8.0)
[pypi release](https://pypi.python.org/pypi/thumbor/4.8.0)
Release 4.7.1 (4.7.1)
* Fixed issue with bad merge by @heynemann (sorry guys).
[Diff to previous release](https://github.com/thumbor/thumbor/compare/4.7.0...4.7.1)
[pypi release](https://pypi.python.org/pypi/thumbor/4.7.1)
Release 4.7.0 (4.7.0)
* New [colorize filter](https://github.com/thumbor/thumbor/wiki/Colorize) by @clifff (thanks!);
* New [saturation filter](https://github.com/thumbor/thumbor/wiki/Saturation) filter by @clifff (thanks!);
* New option to disable etags by @kevin1024 (thanks!).
[Diff to previous release](https://github.com/thumbor/thumbor/compare/4.6.0...4.7.0)
[pypi release](https://pypi.python.org/pypi/thumbor/4.7.0)
Release 4.6.0 (4.6.0)
* Thumbor Upstart job for usage with DEB was updated by @CameronNemo (thanks!);
* Thumbor now supports HTTPs contributed by Chris Heisterkamp (bcebe435c45637dcbdc0db822874e43fc841d8ea);
* Thumbor has a new filter/optimizer combo for supporting [GifV](http://imgur.com/blog/2014/10/09/introducing-gifv/). Thanks @guilhermef for the contribution!
* @renaudguerin fixed issues with LA and L pallete images.
[Diff to previous release](https://github.com/thumbor/thumbor/compare/4.5.4...4.6.0)
[pypi release](https://pypi.python.org/pypi/thumbor/4.6.0)
Release 4.5.4 (4.5.4)
* Fix optimizer when requesting meta.
[Diff to previous release](https://github.com/thumbor/thumbor/compare/4.5.3...4.5.4)
[pypi release](https://pypi.python.org/pypi/thumbor/4.5.4)
Release 4.5.3 (4.5.3)
* Fix optimizer infrastructure to close files before reading again.
## WARNING
If you are using optimizers you should upgrade to this release.
[Diff to previous release](https://github.com/thumbor/thumbor/compare/4.5.2...4.5.3)
[pypi release](https://pypi.python.org/pypi/thumbor/4.5.3)
Release 4.5.2 (4.5.2)
This release introduces the possibility to use [optimizers](https://github.com/thumbor/thumbor/wiki/Optimizers). A JPEGTRAN optimizer has been created as a sample optimizer. Other optimizers (pngquant, gifsicle and the like) can be created as contributed libraries by the community.
It also adds the following contributions:
* Now thumbor supports HEAD requests. This was a contribution by @justinribeiro;
* We also feature blacklisting of images. This was a contribution by @clifff.
[Diff to previous release](https://github.com/thumbor/thumbor/compare/4.4.1...4.5.2)
[pypi release](https://pypi.python.org/pypi/thumbor/4.5.2)
Release 4.4.1 (4.4.1)
* Fixed #334 - Now images with unicode names should be working properly.
[Diff to previous release](https://github.com/thumbor/thumbor/compare/4.4.0...4.4.1)
[pypi release](https://pypi.python.org/pypi/thumbor/4.4.1)
Release 4.4.0 (4.4.0)
* Added a no_upscale filter ([docs](https://github.com/thumbor/thumbor/wiki/No-Upscale))
When upgrading, make sure to include this filter in your `FILTERS` configuration if you override it in your thumbor.conf file.
[Diff to previous release](https://github.com/thumbor/thumbor/compare/4.4.0...4.4.1)
[pypi release](https://pypi.python.org/pypi/thumbor/4.4.0)
Release 4.3.0 (4.3.0)
* Fixes #141 - Add rotation support (thanks @guilhermebruzzi and @nopiece).
[Diff to previous release](https://github.com/thumbor/thumbor/compare/4.2.1...4.3.0)
[pypi release](https://pypi.python.org/pypi/thumbor/4.3.0)
Release 4.2.1 (4.2.1)
* Fixes #327 - Issue with auto_webp and result storages.
* Added support to the full-fit-in way of cropping images.
## WARNING
If you've upgraded to the 4.2.0 release it's VERY, VERY recommended that you upgrade to 4.2.1 as soon as possible.
[Diff to previous release](https://github.com/thumbor/thumbor/compare/4.2.0...4.2.1)
[pypi release](https://pypi.python.org/pypi/thumbor/4.2.1)
Release 4.2.0 (4.2.0)
This release adds official support for GIFs and Animated GIFs.
* Fixes #297 - With the new engine, gifs that were once distorted are perfectly valid now.
## Supporting GIFs the new way
If you want to use the new gif engine there are two things you must do:
a) You need to install [gifsicle](http://www.lcdf.org/gifsicle/). Most operating systems have packages for it and in Mac OS it's just `brew install gifsicle`.
b) You must include a configuration in your .conf file that says `USE_GIFSICLE_ENGINE=True`.
## WARNING
With the use of gifsicle engine, no filters will work for the gif images (all the other images will be fine). The same happens with smart cropping.
This release has a bug that was fixed in 4.2.1. If you are using 4.2.0, please upgrade as soon as posssible.
[Diff to previous release](https://github.com/thumbor/thumbor/compare/4.1.3...4.2.0)
[pypi release](https://pypi.python.org/pypi/thumbor/4.2.0)
Release 4.1.3 (4.1.3)
This release fixes an issue that was introduced in #de1d96f614f5798a3d6f3e20e36a9ec061f8e960 in [Release 4.0.0](https://github.com/thumbor/thumbor/releases/tag/4.0.0).
If your current release is greater than 4.0.0, be advised you must upgrade as soon as possible. If your release is lesser than 4.0.0, please consider upgrading for better support.
* Fixes #305 - This is a **critical** bug. Images will be served with Exif data, meaning they can potentially be many times heavier than they should be.
[Diff to previous release](https://github.com/thumbor/thumbor/compare/4.1.2...4.1.3)
[pypi release](https://pypi.python.org/pypi/thumbor/4.1.3)
Release 4.1.2 (4.1.2)
* Improved support for file descriptors. Now the --fd argument supports both the number of the file descriptor or the path in the file system. Fixes #300.
[Diff to previous release](https://github.com/thumbor/thumbor/compare/4.1.1...4.1.2)
[pypi release](https://pypi.python.org/pypi/thumbor/4.1.2)
Release 4.1.1 (4.1.1)
* Thumbor does not convert CMYK unless needed now;
* New merge option in the composite filter infrastructure.
[Diff to previous release](https://github.com/thumbor/thumbor/compare/4.1.0...4.1.1)
[pypi release](https://pypi.python.org/pypi/thumbor/4.1.1)
Release 4.1.0 (4.1.0)
* New filter: [Extract Focal Points](https://github.com/thumbor/thumbor/wiki/Extract-Focal-Points)
* Infrastructure for filters on different phases during the image processing lifecycle. Right now PHASE_POST_TRANSFORM and PHASE_PRE_LOAD are supported. All existing filters default to PHASE_POST_TRANSFORM
[Diff to previous release](https://github.com/thumbor/thumbor/compare/4.0.4...4.1.0)
[pypi release](https://pypi.python.org/pypi/thumbor/4.1.0)
Release 4.0.4 (4.0.4)
* Fixed issue with blur filter when used with more than 150 of radius (by @heynemann);
* Fixed issue with format filter when used in conjunction with auto_webp (by @cezarsa).
[Diff to previous release](https://github.com/thumbor/thumbor/compare/4.0.3...4.0.4)
[pypi release](https://pypi.python.org/pypi/thumbor/4.0.4)
Release 4.0.3 (4.0.3)
* Fix in all engines to return both image data and image mode together, instead of one or the other. If you implement your own engine, you need to create a new method called `image_data_as_rgb` that returns the image mode and the image bytes;
* Thumbor Application class now has a `get_handlers` method that can be overwritten to specify new handlers.
Release can be found at https://pypi.python.org/pypi/thumbor/4.0.3
Release 4.0.2 (4.0.2)
* Fixed issue with WebP request path by [Frank Du](https://github.com/frankdu);
* Fixed issue with Upstart Script Log Level by [Matt Robenolt](https://github.com/mattrobenolt);
* Fixed issue with folder not existing before storing security details by [Cícero Verneck Corrêa](https://github.com/cicerocomp);
* Fixed #272 - Thumbor works properly with newer tornado.
Release 4.0.1 (4.0.1)
* Fixed issue #289 - Now URLs with '~' should work properly.
Release 4.0.0 (4.0.0)
# WARNING
> This version contains breaking changes. Both GraphicsMagick and OpenCV engines were removed from the built-in imaging engines and can be found in the [thumbor organization](http://github.com/thumbor) now. For more information on using each of them check the respective project documentation.
# BREAKING Changes
* Removed thumbor.engines.opencv in favor of the new [opencv-engine](https://github.com/thumbor/opencv-engine) project. That's where we'll maintain the OpenCV engine.
* Removed thumbor.engines.graphicsmagick in favor of the new [graphicsmagick-engine](https://github.com/thumbor/graphicsmagick-engine) project. That's where we'll maintain the GraphicsMagick engine.
# Fixed Issues
* Partitioning the FileStorage Result Storage into more folders by [Martin Sarsale](https://github.com/runa);
* Json File Error Handler by [Damien Hardy](https://github.com/dhardy92);
* Support binding socket to file descriptor instead of port by [John MacKenzie](https://github.com/198d);
* HEAD queries to thumbor's healthcheck returning 200 status code by [Damien Hardy](https://github.com/dhardy92);
* Fixed bug when parsing urls with filters of an original with filters by [Cezar Sá](https://github.com/cezarsa);
* Support different default quality for WebP images by [Bernardo Heynemann](https://github.com/heynemann);
* Keep transparency when saving transparent gif by [Igor Sobreira](https://github.com/igorsobreira);
* Don't save PNG files as CMYK by [Igor Sobreira](https://github.com/igorsobreira);
* Upstart now uses ip var defined on ubuntu default file by [Paulo Sousa](https://github.com/morpheu);
* Fixed images cropped with width 1px and height 0px by [Bernardo Heynemann](https://github.com/heynemann);
* Fixed #236 - IndexError: list index out of range by [Bernardo Heynemann](https://github.com/heynemann);
* Fixed #235 - ValueError: Not a valid numbers of quantization tables. Should be between 2 and 4 by [Bernardo Heynemann](https://github.com/heynemann);
* Fixed #228 - Confusing error when using OpenCV by [Bernardo Heynemann](https://github.com/heynemann);
* New options to the fill filter by [prolificphotis](https://github.com/prolificphotis);
* Added FILL_MERGES Configuration to specify whether the fill filter should merge the background by [prolificphotis](https://github.com/prolificphotis);
* Resolved quality config None in graphicsmagick engine by [Marcio Toshio Ide](https://github.com/marciotoshio);
* Preserving EXIF info when storing original images by [Cezar Sá](https://github.com/cezarsa);
* Resetting EXIF orientation after reorienting image by [Cezar Sá](https://github.com/cezarsa);
* Compatibility work for the fill filter across engines by [Cezar Sá](https://github.com/cezarsa);
* Pillow test_requirement match setup.py by [Rob Olson](https://github.com/robolson);
* Fixed issues with graphicsmagick and gif images by [Bernardo Heynemann](https://github.com/heynemann);
* Convert to grayscale working in OpenCV Engine by [Pablo Aguiar](https://github.com/scorphus).
# New features
* New convolution filter by [Cezar Sá](https://github.com/cezarsa);
* New Gaussian Bluer filter by [Cezar Sá](https://github.com/cezarsa);
Release 3.14.7 (3.14.7)
* Bumping tornado version to allow last update.
Release 3.14.6 (3.14.6)
* Result storage disallows requesting files outside the root path.
Release 3.14.5 (3.14.5)
* Not doing vary header or converting to WebP when image is an animated gif or already a WebP.
Improved Auto-WebP support (3.14.4)
* Thumbor now includes a "Vary": "Accept" header to help cache servers to better understand that the image URL can vary by accept header.
Release 3.14.1 (3.14.1)
* A new filter has been introduced: max_bytes. This filter allows users to specify the maximum number of bytes for the image. Thumbor will vary the quality of the image for JPEG and WebP images (png and gif images do not get affected by this filter).
Release 3.14.0 (3.14.0)
This is an unstable release.
Release 3.13.3 (3.13.3)
* Fixed [#193](https://github.com/thumbor/thumbor/issues/193). File storage now uses atomic storage of files, thus avoiding corruption of stored images.
Release 3.13.2 (3.13.2)
* Merged [#202](https://github.com/thumbor/thumbor/pull/202). Proxy support added to default HTTP Loader.
Release 3.13.1 (3.13.1)
* Merged [#197](https://github.com/thumbor/thumbor/pull/197). Healthcheck now replied to HEAD requests.
Release 3.13.0 (3.13.0)
* Fixes [#204](https://github.com/thumbor/thumbor/issues/204). Thumbor now allows users to specify that WebP should be automatically used whenever the request has the proper Accept header (image/webp).
Release 3.12.2 (3.12.2)
Added some extra logging in the finish request stage.
Release 3.12.1 (3.12.1)
* Fixed leak of Redis connections when using queued detectors.
Release 3.11.1 (3.11.1)
* Finished webp support;
* Fixed a bug with webp support that would pass 'None' as format if no format specified;
* Added a configuration `PRESERVE_EXIF_INFO` that when set to True will keep the exif metadata in images intact (including webp resulting images).
Release 3.12.0 (3.12.0)
* Fixed an issue with animated gifs (sigh);
* Add detection support for WEBP format. Merge pull request [#194](https://github.com/thumbor/thumbor/pull/194) from dhardy92:feature_Add_WEBP_Detection;
* Support for the new release of Pillow (2.1.0) and works with Pillow master branch for now.