arthropod_waifu2x 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.gitignore +3 -0
- data/Gemfile +3 -0
- data/Gemfile.lock +64 -0
- data/Procfile +1 -0
- data/README.md +56 -0
- data/arthropod_waifu2x.gemspec +29 -0
- data/bin/arthropod_waifu2x +49 -0
- data/lib/arthropod_waifu2x/scaler.rb +88 -0
- data/lib/arthropod_waifu2x/version.rb +3 -0
- metadata +109 -0
checksums.yaml
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
---
|
|
2
|
+
SHA256:
|
|
3
|
+
metadata.gz: 23719b9d187f57b84a271087e4ef2759b9e525f19c0c6accaa34b2fe16de1b0e
|
|
4
|
+
data.tar.gz: 24774ff0e9b481c61605a90d454867d2440978f49d91c5b1e0046b033843411f
|
|
5
|
+
SHA512:
|
|
6
|
+
metadata.gz: f79f867ff386d339a262af73200657861e22b28bfbbd0e48a7ee6f8a06f742fe6780fa02f46861135dd8192bf68c04db28140122469ee09fa8fca004d605a08e
|
|
7
|
+
data.tar.gz: 726886d15be2186bee299c7e7eaa8ecc30a9848bcfac8e0d9fabec439267385d0385ea109462c04c4e60f1025f4fd7f47231e4144f1f04b5ae871bc876f17e4d
|
data/.gitignore
ADDED
data/Gemfile
ADDED
data/Gemfile.lock
ADDED
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
PATH
|
|
2
|
+
remote: .
|
|
3
|
+
specs:
|
|
4
|
+
arthropod_waifu2x (0.0.1)
|
|
5
|
+
arthropod (= 0.0.2)
|
|
6
|
+
aws-sdk-sqs
|
|
7
|
+
fog-aws
|
|
8
|
+
|
|
9
|
+
GEM
|
|
10
|
+
remote: https://rubygems.org/
|
|
11
|
+
specs:
|
|
12
|
+
arthropod (0.0.2)
|
|
13
|
+
aws-sdk-sqs
|
|
14
|
+
aws-eventstream (1.0.3)
|
|
15
|
+
aws-partitions (1.251.0)
|
|
16
|
+
aws-sdk-core (3.84.0)
|
|
17
|
+
aws-eventstream (~> 1.0, >= 1.0.2)
|
|
18
|
+
aws-partitions (~> 1, >= 1.239.0)
|
|
19
|
+
aws-sigv4 (~> 1.1)
|
|
20
|
+
jmespath (~> 1.0)
|
|
21
|
+
aws-sdk-sqs (1.23.1)
|
|
22
|
+
aws-sdk-core (~> 3, >= 3.71.0)
|
|
23
|
+
aws-sigv4 (~> 1.1)
|
|
24
|
+
aws-sigv4 (1.1.0)
|
|
25
|
+
aws-eventstream (~> 1.0, >= 1.0.2)
|
|
26
|
+
builder (3.2.3)
|
|
27
|
+
byebug (11.0.1)
|
|
28
|
+
excon (0.70.0)
|
|
29
|
+
fog-aws (3.5.2)
|
|
30
|
+
fog-core (~> 2.1)
|
|
31
|
+
fog-json (~> 1.1)
|
|
32
|
+
fog-xml (~> 0.1)
|
|
33
|
+
ipaddress (~> 0.8)
|
|
34
|
+
fog-core (2.1.2)
|
|
35
|
+
builder
|
|
36
|
+
excon (~> 0.58)
|
|
37
|
+
formatador (~> 0.2)
|
|
38
|
+
mime-types
|
|
39
|
+
fog-json (1.2.0)
|
|
40
|
+
fog-core
|
|
41
|
+
multi_json (~> 1.10)
|
|
42
|
+
fog-xml (0.1.3)
|
|
43
|
+
fog-core
|
|
44
|
+
nokogiri (>= 1.5.11, < 2.0.0)
|
|
45
|
+
formatador (0.2.5)
|
|
46
|
+
ipaddress (0.8.3)
|
|
47
|
+
jmespath (1.4.0)
|
|
48
|
+
mime-types (3.3)
|
|
49
|
+
mime-types-data (~> 3.2015)
|
|
50
|
+
mime-types-data (3.2019.1009)
|
|
51
|
+
mini_portile2 (2.4.0)
|
|
52
|
+
multi_json (1.14.1)
|
|
53
|
+
nokogiri (1.10.7)
|
|
54
|
+
mini_portile2 (~> 2.4.0)
|
|
55
|
+
|
|
56
|
+
PLATFORMS
|
|
57
|
+
ruby
|
|
58
|
+
|
|
59
|
+
DEPENDENCIES
|
|
60
|
+
arthropod_waifu2x!
|
|
61
|
+
byebug
|
|
62
|
+
|
|
63
|
+
BUNDLED WITH
|
|
64
|
+
2.0.2
|
data/Procfile
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
worker: bundle exec bin/arthropod_waifu2x
|
data/README.md
ADDED
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
# Arthropod-waifu2x
|
|
2
|
+
|
|
3
|
+
## Installation
|
|
4
|
+
|
|
5
|
+
```
|
|
6
|
+
gem install arthropod_waifu2x
|
|
7
|
+
```
|
|
8
|
+
|
|
9
|
+
## Usage
|
|
10
|
+
|
|
11
|
+
Just run it with the required arguments.
|
|
12
|
+
```shell
|
|
13
|
+
$ arthropod_waifu2x -h
|
|
14
|
+
|
|
15
|
+
Usage: arthropod_waifu2x [options]
|
|
16
|
+
-q, --queue [string] SQS queue name
|
|
17
|
+
-i, --access-key-id [string] AWS access key ID, default to the AWS_ACCESS_KEY_ID environment variable
|
|
18
|
+
-k, --secret-access-key [string] AWS secret access key, default to the AWS_SECRET_ACCESS_KEY environment variable
|
|
19
|
+
-r, --region [string] AWS region, default to the AWS_REGION environment variable
|
|
20
|
+
-w, --waifu [string] Waifu2X install directory, default to /opt/waifu2x
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
Example of client side call:
|
|
24
|
+
```ruby
|
|
25
|
+
result = Arthropod::Client.push(queue_name: "waifu2x", body: {
|
|
26
|
+
image_url: "https://s3-#{ENV['S3_REGION']}.amazonaws.com/#{ENV['S3_BUCKET']}/#{medium.temporary_key}",
|
|
27
|
+
root_dir: Digest::SHA1.hexdigest("#{ENV["SECURE_UPLOADER_KEY"]}#{medium.uuid}").insert(3, '/'),
|
|
28
|
+
aws_access_key_id: ENV['S3_ACCESS_KEY_ID'],
|
|
29
|
+
aws_secret_access_key: ENV['S3_SECRET_ACCESS_KEY'],
|
|
30
|
+
region: ENV['S3_REGION'],
|
|
31
|
+
endpoint: ENV['S3_ENDPOINT'],
|
|
32
|
+
host: ENV['S3_HOST'],
|
|
33
|
+
bucket: ENV['S3_BUCKET'],
|
|
34
|
+
})
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
* `image_url`: the URL of the image you want to scale
|
|
38
|
+
* `root`: the destination directory in your bucket
|
|
39
|
+
* `aws_access_key_id`: an AWS access key to access your bucket
|
|
40
|
+
* `aws_secret_access_key`: an AWS secret access key to access your bucket
|
|
41
|
+
* `region`: the region of your bucket
|
|
42
|
+
* `endpoint`: the endpoint of your S3 instance if you have one (useful for Minio)
|
|
43
|
+
* `host`: the host of your S3 instance if you have one (useful for Minio)
|
|
44
|
+
* `bucket`: your bucket name
|
|
45
|
+
|
|
46
|
+
The result object is a follow.
|
|
47
|
+
|
|
48
|
+
```ruby
|
|
49
|
+
{
|
|
50
|
+
key: "[string]",
|
|
51
|
+
}
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
* `key`: the key the resulting image
|
|
55
|
+
|
|
56
|
+
*Both the input and output are very opiniated and follow my needs*
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
|
2
|
+
|
|
3
|
+
lib = File.expand_path("../lib", __FILE__)
|
|
4
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
|
5
|
+
require "arthropod_waifu2x/version"
|
|
6
|
+
|
|
7
|
+
Gem::Specification.new do |gem|
|
|
8
|
+
gem.name = "arthropod_waifu2x"
|
|
9
|
+
gem.version = ArthropodWaifu2x::VERSION
|
|
10
|
+
gem.authors = ["Victor Goya"]
|
|
11
|
+
gem.email = ["goya.victor@gmail.com"]
|
|
12
|
+
gem.description = "Use Waifu2X remotely Arthropod"
|
|
13
|
+
gem.summary = "Use Waifu2X remotely Arthropod"
|
|
14
|
+
|
|
15
|
+
gem.files = `git ls-files -z`.split("\x0")
|
|
16
|
+
gem.executables = %w(arthropod_waifu2x)
|
|
17
|
+
gem.require_paths = ["lib"]
|
|
18
|
+
gem.bindir = 'bin'
|
|
19
|
+
|
|
20
|
+
gem.licenses = ["MIT"]
|
|
21
|
+
|
|
22
|
+
gem.required_ruby_version = "~> 2.0"
|
|
23
|
+
|
|
24
|
+
gem.add_dependency 'arthropod', '= 0.0.2'
|
|
25
|
+
gem.add_dependency 'aws-sdk-sqs'
|
|
26
|
+
gem.add_dependency 'fog-aws'
|
|
27
|
+
|
|
28
|
+
gem.add_development_dependency "byebug"
|
|
29
|
+
end
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
#!/usr/bin/env ruby
|
|
2
|
+
|
|
3
|
+
require 'optparse'
|
|
4
|
+
require 'aws-sdk-sqs'
|
|
5
|
+
require 'arthropod'
|
|
6
|
+
require 'arthropod_waifu2x/scaler'
|
|
7
|
+
|
|
8
|
+
options = {}
|
|
9
|
+
OptionParser.new do |opts|
|
|
10
|
+
opts.banner = "Usage: #{$PROGRAM_NAME} [options]"
|
|
11
|
+
|
|
12
|
+
opts.on("-q", "--queue [string]", "SQS queue name") do |q|
|
|
13
|
+
options[:queue] = q
|
|
14
|
+
end
|
|
15
|
+
opts.on("-i", "--access-key-id [string]", "AWS access key ID, default to the AWS_ACCESS_KEY_ID environment variable") do |i|
|
|
16
|
+
options[:access_key_id] = i
|
|
17
|
+
end
|
|
18
|
+
opts.on("-k", "--secret-access-key [string]", "AWS secret access key, default to the AWS_SECRET_ACCESS_KEY environment variable") do |k|
|
|
19
|
+
options[:secret_access_key] = k
|
|
20
|
+
end
|
|
21
|
+
opts.on("-r", "--region [string]", "AWS region, default to the AWS_REGION environment variable") do |r|
|
|
22
|
+
options[:region] = r
|
|
23
|
+
end
|
|
24
|
+
opts.on("-w", "--waifu [string]", "Waifu2X install directory, default to WAIFU environment variable or /opt/waifu2x") do |w|
|
|
25
|
+
options[:waifu] = w
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
end.parse!
|
|
29
|
+
|
|
30
|
+
client = Aws::SQS::Client.new({
|
|
31
|
+
access_key_id: options[:access_key_id] || ENV["AWS_ACCESS_KEY_ID"],
|
|
32
|
+
secret_access_key: options[:secret_access_key] || ENV["AWS_SECRET_ACCESS_KEY"],
|
|
33
|
+
region: options[:region] || ENV["AWS_REGION"],
|
|
34
|
+
})
|
|
35
|
+
|
|
36
|
+
loop do
|
|
37
|
+
Arthropod::Server.pull(client: client, queue_name: options[:queue] || ENV["QUEUE_NAME"]) do |request|
|
|
38
|
+
ArthropodWaifu2x::Encoder.new({
|
|
39
|
+
waifu: options[:waifu] || ENV["WAIFU"] || "/opt/waifu2x",
|
|
40
|
+
image_url: request.body["image_url"],
|
|
41
|
+
aws_access_key_id: request.body["aws_access_key_id"],
|
|
42
|
+
aws_secret_access_key: request.body["aws_secret_access_key"],
|
|
43
|
+
region: request.body["region"],
|
|
44
|
+
endpoint: request.body["endpoint"],
|
|
45
|
+
host: request.body["host"],
|
|
46
|
+
bucket: request.body["bucket"],
|
|
47
|
+
}).perform!
|
|
48
|
+
end
|
|
49
|
+
end
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
require 'shellwords'
|
|
2
|
+
require 'json'
|
|
3
|
+
require 'securerandom'
|
|
4
|
+
require 'fog/aws'
|
|
5
|
+
require 'pathname'
|
|
6
|
+
|
|
7
|
+
module ArthropodWaifu2x
|
|
8
|
+
class Scaler
|
|
9
|
+
attr_reader :image_url, :aws_access_key_id, :aws_secret_access_key, :region, :endpoint, :host, :bucket, :root_dir
|
|
10
|
+
|
|
11
|
+
def initialize(image_url:, root_dir:, aws_access_key_id:, aws_secret_access_key:, region:, endpoint:, host:, bucket:, root_dir:, waifu:)
|
|
12
|
+
@image_url = image_url
|
|
13
|
+
@aws_access_key_id = aws_access_key_id
|
|
14
|
+
@aws_secret_access_key = aws_secret_access_key
|
|
15
|
+
@region = region
|
|
16
|
+
@endpoint = endpoint
|
|
17
|
+
@host = host
|
|
18
|
+
@root_dir = root_dir
|
|
19
|
+
@bucket = bucket
|
|
20
|
+
@waifu = waifu
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def perform!
|
|
24
|
+
Dir.mktmpdir do |wdir|
|
|
25
|
+
@wdir = wdir
|
|
26
|
+
|
|
27
|
+
download_input!
|
|
28
|
+
|
|
29
|
+
{
|
|
30
|
+
key: perform_scaling!
|
|
31
|
+
}
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
def download_input!
|
|
36
|
+
unless File.exists? input_path
|
|
37
|
+
call_command("curl #{Shellwords.escape(image_url)} -s -o #{input_path}")
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
def perform_scaling!
|
|
42
|
+
call_command("th #{waifu_bin} -m scale -i #{input_path} -o #{scaled_path}")
|
|
43
|
+
"#{root_dir}/#{SecureRandom.uuid}#{File.extname(image_url)}".tap do |key|
|
|
44
|
+
upload(scaled_path, key)
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
def waifu_bin
|
|
49
|
+
Shellwords.escape(Pathname.new(waifu).join("waifu2x").to_s)
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
def input_path
|
|
53
|
+
Shellwords.escape("#{@wdir}/input#{File.extname(image_url)}")
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
def scaled_path
|
|
57
|
+
Shellwords.escape("#{@wdir}/scaled#{File.extname(image_url)}")
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
def call_command(command)
|
|
61
|
+
system(command, out: File::NULL, err: File::NULL)
|
|
62
|
+
raise if $?.to_i != 0
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
def storage
|
|
66
|
+
@storage ||= Fog::Storage.new({
|
|
67
|
+
provider: 'AWS',
|
|
68
|
+
aws_access_key_id: aws_access_key_id,
|
|
69
|
+
aws_secret_access_key: aws_secret_access_key,
|
|
70
|
+
region: region,
|
|
71
|
+
endpoint: endpoint,
|
|
72
|
+
host: host,
|
|
73
|
+
path_style: true
|
|
74
|
+
})
|
|
75
|
+
@storage.directories.get(bucket)
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
def upload(path, key)
|
|
79
|
+
open(path) do |file|
|
|
80
|
+
storage.files.create({
|
|
81
|
+
key: key,
|
|
82
|
+
body: file,
|
|
83
|
+
public: true
|
|
84
|
+
})
|
|
85
|
+
end.public_url
|
|
86
|
+
end
|
|
87
|
+
end
|
|
88
|
+
end
|
metadata
ADDED
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
|
2
|
+
name: arthropod_waifu2x
|
|
3
|
+
version: !ruby/object:Gem::Version
|
|
4
|
+
version: 0.0.1
|
|
5
|
+
platform: ruby
|
|
6
|
+
authors:
|
|
7
|
+
- Victor Goya
|
|
8
|
+
autorequire:
|
|
9
|
+
bindir: bin
|
|
10
|
+
cert_chain: []
|
|
11
|
+
date: 2019-12-13 00:00:00.000000000 Z
|
|
12
|
+
dependencies:
|
|
13
|
+
- !ruby/object:Gem::Dependency
|
|
14
|
+
name: arthropod
|
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
|
16
|
+
requirements:
|
|
17
|
+
- - '='
|
|
18
|
+
- !ruby/object:Gem::Version
|
|
19
|
+
version: 0.0.2
|
|
20
|
+
type: :runtime
|
|
21
|
+
prerelease: false
|
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
23
|
+
requirements:
|
|
24
|
+
- - '='
|
|
25
|
+
- !ruby/object:Gem::Version
|
|
26
|
+
version: 0.0.2
|
|
27
|
+
- !ruby/object:Gem::Dependency
|
|
28
|
+
name: aws-sdk-sqs
|
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
|
30
|
+
requirements:
|
|
31
|
+
- - ">="
|
|
32
|
+
- !ruby/object:Gem::Version
|
|
33
|
+
version: '0'
|
|
34
|
+
type: :runtime
|
|
35
|
+
prerelease: false
|
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
37
|
+
requirements:
|
|
38
|
+
- - ">="
|
|
39
|
+
- !ruby/object:Gem::Version
|
|
40
|
+
version: '0'
|
|
41
|
+
- !ruby/object:Gem::Dependency
|
|
42
|
+
name: fog-aws
|
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
|
44
|
+
requirements:
|
|
45
|
+
- - ">="
|
|
46
|
+
- !ruby/object:Gem::Version
|
|
47
|
+
version: '0'
|
|
48
|
+
type: :runtime
|
|
49
|
+
prerelease: false
|
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
51
|
+
requirements:
|
|
52
|
+
- - ">="
|
|
53
|
+
- !ruby/object:Gem::Version
|
|
54
|
+
version: '0'
|
|
55
|
+
- !ruby/object:Gem::Dependency
|
|
56
|
+
name: byebug
|
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
|
58
|
+
requirements:
|
|
59
|
+
- - ">="
|
|
60
|
+
- !ruby/object:Gem::Version
|
|
61
|
+
version: '0'
|
|
62
|
+
type: :development
|
|
63
|
+
prerelease: false
|
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
65
|
+
requirements:
|
|
66
|
+
- - ">="
|
|
67
|
+
- !ruby/object:Gem::Version
|
|
68
|
+
version: '0'
|
|
69
|
+
description: Use Waifu2X remotely Arthropod
|
|
70
|
+
email:
|
|
71
|
+
- goya.victor@gmail.com
|
|
72
|
+
executables:
|
|
73
|
+
- arthropod_waifu2x
|
|
74
|
+
extensions: []
|
|
75
|
+
extra_rdoc_files: []
|
|
76
|
+
files:
|
|
77
|
+
- ".gitignore"
|
|
78
|
+
- Gemfile
|
|
79
|
+
- Gemfile.lock
|
|
80
|
+
- Procfile
|
|
81
|
+
- README.md
|
|
82
|
+
- arthropod_waifu2x.gemspec
|
|
83
|
+
- bin/arthropod_waifu2x
|
|
84
|
+
- lib/arthropod_waifu2x/scaler.rb
|
|
85
|
+
- lib/arthropod_waifu2x/version.rb
|
|
86
|
+
homepage:
|
|
87
|
+
licenses:
|
|
88
|
+
- MIT
|
|
89
|
+
metadata: {}
|
|
90
|
+
post_install_message:
|
|
91
|
+
rdoc_options: []
|
|
92
|
+
require_paths:
|
|
93
|
+
- lib
|
|
94
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
|
95
|
+
requirements:
|
|
96
|
+
- - "~>"
|
|
97
|
+
- !ruby/object:Gem::Version
|
|
98
|
+
version: '2.0'
|
|
99
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
100
|
+
requirements:
|
|
101
|
+
- - ">="
|
|
102
|
+
- !ruby/object:Gem::Version
|
|
103
|
+
version: '0'
|
|
104
|
+
requirements: []
|
|
105
|
+
rubygems_version: 3.0.3
|
|
106
|
+
signing_key:
|
|
107
|
+
specification_version: 4
|
|
108
|
+
summary: Use Waifu2X remotely Arthropod
|
|
109
|
+
test_files: []
|