commit 778cae07b95c7d25a87fb9a5663c0f41b71cad94
parent 2ca66ed4001fb53bca9f03187a6e4d5833bc6e89
Author: David Eisinger <[email protected]>
Date: Wed, 8 Apr 2026 23:02:20 -0400
Make dither server more efficient
Diffstat:
| M | bin/dither/dither.rb | | | 74 | ++++++++++++++++++++++++++++++++++++++++++++------------------------------ |
1 file changed, 44 insertions(+), 30 deletions(-)
diff --git a/bin/dither/dither.rb b/bin/dither/dither.rb
@@ -1,5 +1,6 @@
require "sinatra"
require "mini_magick"
+require "tempfile"
MiniMagick.logger.level = Logger::DEBUG
@@ -16,37 +17,50 @@ get "/*" do |path|
geometry = params["geo"] unless params["geo"] == ""
geometry.gsub!(/\d+/) { |n| n.to_i * 2 } if geometry && !DITHER
- decrypted = %x(
- openssl \
- aes-256-cbc \
- -d \
- -in #{ROOT}/#{path}.enc \
- -pass file:#{KEY} \
- -iter 1000000
- )
-
- convert = MiniMagick::Tool::Convert.new
- convert.stdin
- convert.background("white")
- convert.layers("flatten")
- convert.strip
- convert.auto_orient
-
- if geometry
- if geometry.match?(/^\d+x\d+$/)
- convert.resize "#{geometry}^"
- convert.gravity "center"
- convert.extent geometry
- else
- convert.resize geometry
+ decrypted = Tempfile.new(["dither", File.extname(path)])
+ decrypted.binmode
+ decrypted.close
+
+ begin
+ openssl_ok = system(
+ "openssl",
+ "aes-256-cbc",
+ "-d",
+ "-in", "#{ROOT}/#{path}.enc",
+ "-out", decrypted.path,
+ "-pass", "file:#{KEY}",
+ "-iter", "1000000"
+ )
+ halt 500, {"Content-Type" => "text/plain"}, "decrypt failed" unless openssl_ok
+
+ convert = MiniMagick::Tool::Convert.new
+ convert.limit("memory", "128MiB")
+ convert.limit("map", "256MiB")
+ convert.limit("disk", "1GiB")
+ convert << decrypted.path
+ convert.background("white")
+ convert.layers("flatten")
+ convert.strip
+ convert.auto_orient
+
+ if geometry
+ if geometry.match?(/^\d+x\d+$/)
+ convert.resize "#{geometry}^"
+ convert.gravity "center"
+ convert.extent geometry
+ else
+ convert.resize geometry
+ end
end
- end
- if DITHER
- convert.ordered_dither "o8x8"
- convert.monochrome
- end
+ if DITHER
+ convert.ordered_dither "o8x8"
+ convert.monochrome
+ end
- convert << "#{FORMAT.upcase}:-"
- convert.call(stdin: decrypted)
+ convert << "#{FORMAT.upcase}:-"
+ convert.call
+ ensure
+ decrypted.unlink
+ end
end