qttk 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (61) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +2 -0
  3. data/Gemfile +6 -0
  4. data/Gemfile.lock +36 -0
  5. data/README.markdown +131 -0
  6. data/Rakefile +17 -0
  7. data/TODO.markdown +236 -0
  8. data/bin/qt +7 -0
  9. data/etc/gutenprint/gp-tool.rb +56 -0
  10. data/etc/gutenprint/gutenprint-filter.c +400 -0
  11. data/etc/gutenprint/gutenprint.rb +86 -0
  12. data/etc/gutenprint/stp-test +326 -0
  13. data/etc/images/3551599565_db282cf840_o.jpg +0 -0
  14. data/etc/images/4843122063_d582c569e9_o.jpg +0 -0
  15. data/etc/images/4843128953_83c1770907_o.jpg +0 -0
  16. data/lib/quadtone.rb +56 -0
  17. data/lib/quadtone/cgats.rb +137 -0
  18. data/lib/quadtone/cluster_calculator.rb +81 -0
  19. data/lib/quadtone/color.rb +83 -0
  20. data/lib/quadtone/color/cmyk.rb +112 -0
  21. data/lib/quadtone/color/device_n.rb +23 -0
  22. data/lib/quadtone/color/gray.rb +46 -0
  23. data/lib/quadtone/color/lab.rb +150 -0
  24. data/lib/quadtone/color/qtr.rb +71 -0
  25. data/lib/quadtone/color/rgb.rb +71 -0
  26. data/lib/quadtone/color/xyz.rb +80 -0
  27. data/lib/quadtone/curve.rb +138 -0
  28. data/lib/quadtone/curve_set.rb +196 -0
  29. data/lib/quadtone/descendants.rb +9 -0
  30. data/lib/quadtone/environment.rb +5 -0
  31. data/lib/quadtone/extensions/math.rb +11 -0
  32. data/lib/quadtone/extensions/pathname3.rb +11 -0
  33. data/lib/quadtone/printer.rb +106 -0
  34. data/lib/quadtone/profile.rb +217 -0
  35. data/lib/quadtone/quad_file.rb +59 -0
  36. data/lib/quadtone/renderer.rb +139 -0
  37. data/lib/quadtone/run.rb +10 -0
  38. data/lib/quadtone/sample.rb +32 -0
  39. data/lib/quadtone/separator.rb +36 -0
  40. data/lib/quadtone/target.rb +277 -0
  41. data/lib/quadtone/tool.rb +61 -0
  42. data/lib/quadtone/tools/add_printer.rb +73 -0
  43. data/lib/quadtone/tools/characterize.rb +43 -0
  44. data/lib/quadtone/tools/chart.rb +31 -0
  45. data/lib/quadtone/tools/check.rb +16 -0
  46. data/lib/quadtone/tools/dir.rb +15 -0
  47. data/lib/quadtone/tools/edit.rb +23 -0
  48. data/lib/quadtone/tools/init.rb +82 -0
  49. data/lib/quadtone/tools/install.rb +15 -0
  50. data/lib/quadtone/tools/linearize.rb +28 -0
  51. data/lib/quadtone/tools/list.rb +19 -0
  52. data/lib/quadtone/tools/print.rb +38 -0
  53. data/lib/quadtone/tools/printer_options.rb +40 -0
  54. data/lib/quadtone/tools/rename.rb +17 -0
  55. data/lib/quadtone/tools/render.rb +43 -0
  56. data/lib/quadtone/tools/rewrite.rb +15 -0
  57. data/lib/quadtone/tools/separate.rb +71 -0
  58. data/lib/quadtone/tools/show.rb +15 -0
  59. data/lib/quadtone/tools/test.rb +26 -0
  60. data/qttk.gemspec +34 -0
  61. metadata +215 -0
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: fbc33230e89c5c92e9a6b609c0eea867988aa9b0c05a6943c5a2b0248e5bc1f5
4
+ data.tar.gz: 9a788b807af82292448b41513133f46895f13502b00de382087dbbc1d4492f04
5
+ SHA512:
6
+ metadata.gz: e1df416f2c8704ab15cdfb4f841fe63ab44bf1e3f231fec6d9e1b052d2fed8b22650205dbc54b908f5be4f03df65113df27cd41e3b2ffcfeda6ec484f2ed97ef
7
+ data.tar.gz: 657245b02b29fea510973e769825e8e86b9540aada9ba795771c9ac97d619bfee8ad949bf0cb717a9a5c9bb5e669545f5f818e7e619483755c83db78a16fd059
@@ -0,0 +1,2 @@
1
+ .DS_Store
2
+ *.gem
data/Gemfile ADDED
@@ -0,0 +1,6 @@
1
+ source 'http://rubygems.org'
2
+
3
+ gem 'rake'
4
+
5
+ # See .gemspec file for dependencies
6
+ gemspec
@@ -0,0 +1,36 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ qttk (0.1.0)
5
+ builder
6
+ cupsffi
7
+ descriptive_statistics
8
+ ffi
9
+ hashstruct
10
+ pathname3
11
+ rmagick
12
+ spliner
13
+
14
+ GEM
15
+ remote: http://rubygems.org/
16
+ specs:
17
+ builder (3.2.3)
18
+ cupsffi (0.1.7)
19
+ ffi
20
+ descriptive_statistics (2.5.1)
21
+ ffi (1.9.22)
22
+ hashstruct (1.3.1)
23
+ pathname3 (1.2.5)
24
+ rake (12.3.0)
25
+ rmagick (2.16.0)
26
+ spliner (1.0.6)
27
+
28
+ PLATFORMS
29
+ ruby
30
+
31
+ DEPENDENCIES
32
+ qttk!
33
+ rake
34
+
35
+ BUNDLED WITH
36
+ 1.16.1
@@ -0,0 +1,131 @@
1
+ # Quadtone Toolkit (QTTK)
2
+
3
+ ## NOTE: This README is out of date relative to the current code. Apologies.
4
+
5
+ QTTK provides a set of tools for printmakers who use the quadtone inkjet printing process. It works in conjunction with the [QuadtoneRIP](http://www.quadtonerip.com) (QTR) grayscale printing system.
6
+
7
+ At the moment, the software consists largely of libraries of code (written in the [Ruby](http://ruby-lang.org) programming language) and a single command-line tool. Hence, it is probably not interesting to most printmakers unless they are either programmers or people comfortable with the Unix command line. Additionally, printmakers who are happy with Epson's 'automatic black and white' mode, the default QTR profiles, or the [Piezography](http://piezography.com) system can probably feel comfortable in staying with the process they currently use.
8
+
9
+ However, if you are interested in printing on obscure papers, hand-mixing your own inks, or otherwise want more control and knowledge over the printmaking process, these tools may help. I originally wrote them because I was dissatisfied with the perception of the quadtone process being 'black magic,' inaccessible, or unscientific. It is my hope that tools like QTTK will increase the understanding and acceptance of the quadtone inkjet process.
10
+
11
+ At some point, given sufficient interest and motivation, I may write a graphical interface (GUI) to the underlying code. In the meantime, please enjoy the art and craft of the [Unix command line](http://en.wikipedia.org/wiki/Command-line_interface).
12
+
13
+
14
+ ## Capabilities
15
+
16
+ QTTK enables you to:
17
+
18
+ - Generate profiling targets to be printed and analyzed. Many parameters can be set, including paper size, color mode (either QTR calibration or grayscale), ink channels, ink limits, and patch oversampling rates. In addition to an image file (TIFF), a reference data file is also generated, which can be used by MeasureTool or other color profiling systems.
19
+
20
+ - Analyze measurements of printed reference targets. Individual ink channels are detected, as well as tonal response curves, maximum-density points, and other data. Grayscale ink separations can be easily calculated, as well as linearization curves for grayscale targets.
21
+
22
+ - Create visual charts and graphs of analyzed information, including response curves and density scales.
23
+
24
+ - Build and install QTR profiles, based on measured data, avoiding complex and error-prone manual calculations.
25
+
26
+ - Preview how images will print through particular QTR profiles, actually separating a grayscale image into the ink channels as represented in the the QTR curve files.
27
+
28
+ QTTK intentionally makes few assumptions about equipment and materials. This allows for flexibility, as well as dealing with 'worst case' scenarios. Say you've obtained an old printer with a broken magenta channel, and a yellow channel that refuses to unclog. You've mixed your own inks by hand (using, say, Paul Roark's C6 base; see below for details) at some approximate dilutions. And you are using an exotic paper, not even designed for inkjet. QTTK's tools will allow you to make that a workable scenario.
29
+
30
+
31
+ ## Philosophy
32
+
33
+ The development of these tools came out of a over a decade's work with the quadtone process, and a great deal of thinking about how these tools fit into the printmaking process. From my experience, I came up with a short list of guiding principles (inspired by Christopher Alexander's *Pattern Language*) to serve as a basis for developing this software.
34
+
35
+ - Make tools, not products: Any craftsman has a set of tools which are optimized for specific uses, yet work together to solve a wide variety of problems. Having access to the right tools allows the printmaker to attain the same results as prepackaged, point-and-click software, or to indeed rise above those results. Therefore, design a decent set of tools that can be used in many ways. Further, design tools so they can be augmented or modified as needed.
36
+
37
+ - Encourage understanding of process: Much of the modern digital printing process is hidden beneath layers of abstraction and automation. This often denies the possibility of understanding how things really work. True craftsmanship relies on an understanding of materials, processes, and tools. Therefore, as much as possible, show the workings of the process, so they can be both understood and expanded.
38
+
39
+ - Apply scientific principles: Most digital printmakers use materials and equipment that are extraordinarily accurate (printers, computers, ink, paper), with results that are repeatable and measurable. Yet existing printmaking tools either discourage measurement at all (presuming that all situations are identical) or go about it using repetitive, error-prone manual methods. Therefore, encourage measurement and analysis (along with understanding of that analysis) at all points of the process.
40
+
41
+ - Allow craft & expressiveness: Art lies partly in vision, and partly in process. An artist must be able to work symbiotically with a process, experimenting with materials and observing reactions, and adjusting to those observations. A process that discourages experimentation or adjustments, or whose tedium results in an artist giving up on experimentation, will result in poorer art. Therefore, provide tools for experimentation, measurement, analysis, and production which encourage the highest level of craft.
42
+
43
+
44
+ ## Example usage
45
+
46
+ There is a single binary command installed, called **qt**. This binary has several subcommands, referred to here as 'tools'. Here are a few examples:
47
+
48
+ # Add a new printer
49
+ qt add-printer Quad4000-C6
50
+
51
+ # Examine the printer's options
52
+ qt printer-options
53
+
54
+ # Make a directory for a new profile
55
+ mkdir GenericMatte
56
+ cd GenericMatte
57
+
58
+ # Initialize a new profile for a given printer, specific inks, and a particular resolution
59
+ qt init --printer Quad4000-C6 --inks K,C,M,LC,LM,Y --resolution XXX
60
+
61
+ # Create characterization and linearization target files (both data & images)
62
+ qt target
63
+
64
+ # Print the characterization target
65
+ qt print --calibrate characterization.reference.tif
66
+
67
+ # Measure the printed characterization target
68
+ # (measure using MeasureTool, save as 'characterization.measured.txt')
69
+
70
+ # Characterize the profile based on the measured data; also install as QTR curve
71
+ qt profile
72
+
73
+ # Print the linearization target
74
+ qt print linearization.reference.tif
75
+
76
+ # Measure the printed linearization target
77
+ # (measure using MeasureTool, save as 'linearization.measured.txt')
78
+
79
+ # Generate SVG chart for measured linearization target (open with SVG-aware browser)
80
+ qt chart linearization.measured.txt
81
+
82
+ # Generate SVG charts for profile (both characterization & linearization) (open with SVG-aware browser)
83
+ qt chart
84
+
85
+ # Read image.jpg and create grayscale channel separations, based on existing curve (outputs montaged separations to image.tif)
86
+ qt separate /Library/Printers/QTR/quadtone/Quad4000-C6/GenericMatte.quad --montage image.jpg
87
+
88
+
89
+ ## Printing a target
90
+
91
+ It is essential that you can print a target without its values being modified by the application that's printing it. I have had little luck with Lightroom, and Photoshop has been classically tricky to get right, especially on a Mac. OS X's Preview application seems to do fine, as does Adobe Color Printer Utility.
92
+
93
+
94
+ ## Measuring a printed target
95
+
96
+ First, let the profile dry completely at room temperature, or use a hair dryer, microwave oven, or other heater to dry more quickly.
97
+
98
+ Place several (2-3) sheets of paper of the same type as the printed target on your workspace, with the printed target on top. (This ensures that the workspace color will not affect the readings.)
99
+
100
+ When using a strip-reading spectrophotometer, move the instrument slowly across the strip being read. If a row continues to have errors, you may need to read the patches spot by spot, instead of by strip.
101
+
102
+
103
+ ## Installation
104
+
105
+ Prerequisites:
106
+
107
+ - Mac OS X (10.6 or later)
108
+ - Ruby (1.9.2 or later)
109
+ - Various Ruby modules (see `qttk.gemspec` for latest requirements, but generally these will be installed automatically)
110
+ - [ImageMagick](http://www.imagemagick.org) (6.7 or later)
111
+ - [ArgyllCMS](argyllcms.com) (1.3.6 or later)
112
+ - [QuadtoneRIP](http://www.quadtonerip.com), Roy Harrington's [QuadtoneRIP](http://www.quadtonerip.com) shareware ($50) grayscale RIP system. For Windows, it is a standalone application; for OS X, it is installed as a set of printer drivers and supporting profiles and other resources.
113
+ - an inkjet printer supported by QTR (see [QTR requirements](http://www.quadtonerip.com/html/QTRrequire.html)), loaded with several gray shades of ink
114
+ - an EyeOne (i1) spectrophotometer (other devices, perhaps including flatbed scanners, to be supported in the future)
115
+
116
+ I highly suggest that you install Ruby using [RVM](https://rvm.beginrescueend.com/), ImageMagick using [Brew](https://github.com/mxcl/homebrew), and ArgyllCMS and QuadtoneRIP using their respective binary package installers.
117
+
118
+ Once the above packages are present, install QTTR by typing:
119
+
120
+ $ gem install quadtone
121
+
122
+ QTTK has been developed and tested under Mac OS X Lion (10.7). While it is in the development phase, QTTK is not designed or guaranteed to be usable on any other versions of OS X, or indeed any other systems.
123
+
124
+
125
+ ## Further information and resources
126
+
127
+ - Paul Roark has an extremely useful library of [Digital Black & White Printing Information](http://www.paulroark.com/BW-Info/). His work on 'homebrewed' carbon inkjet inks (see <http://www.paulroark.com/BW-Info/Ink-Mixing.pdf>) is particularly valuable to me, and will be for any aspiring printmaker.
128
+
129
+ - Jon Cone and his associates have been pioneers in quadtone inkjet printing. Their [Piezography](http://piezography.com) system has gone through several incarnations, and was where I started quadtone printing with the now-antique Epson 1160. Although they now utilize QTR as their software, they use a proprietary method of generating much smoother curves. They also sell their own quadtone inks, in a variety of tones and channels.
130
+
131
+ - [MIS](http://www.inksupply.com/bwpage.cfm) (aka InkSupply.com) is one of the primarily distributors of quadtone-capable inks. They sell a variety of inks in both pre-packaged cartridges for many Epson printers, as well as bulk bottles so you can refill or mix your own. The black pure-carbon pigment product [Eboni-6 (K)](http://www.inksupply.com/product-details.cfm?pn=UT-HEXPT-K) is the usual starting point for most homebrewing printmakers. With that, plus the ingredients for Paul Roark's C6 base, you'll be making your own inks and, hopefully, profiling them with QTTK.
@@ -0,0 +1,17 @@
1
+ begin
2
+ require 'bundler/gem_tasks'
3
+ rescue LoadError
4
+ warn 'You must `gem install bundler` and `bundle install` to run rake tasks'
5
+ exit(1)
6
+ end
7
+
8
+ require 'rake/clean'
9
+ require 'rake/testtask'
10
+
11
+ spec = Gem::Specification.load(FileList['*.gemspec'].first)
12
+
13
+ task :default => [:test, :install]
14
+
15
+ Rake::TestTask.new do |t|
16
+ t.test_files = spec.test_files
17
+ end
@@ -0,0 +1,236 @@
1
+ # TODO
2
+
3
+ - move target data/logic from CurveSet to Target
4
+
5
+ - add <xml> tag to SVG-only output
6
+
7
+ - build linearization as strip chart
8
+ - compare quality against spot chart
9
+
10
+ - for each new characterization/linearization, add 'session'
11
+ - each in dated directory
12
+ - for 'process', each characterization/linearization is averaged
13
+ - can delete specific -zation
14
+
15
+ - improve Color class
16
+ - allow instantiation by different methods:
17
+ - color: color object that responds to #to_<color> (eg: Color::CMYK.new(Color::RGB.new(0,0,0)))
18
+ - use natural scale for each subclass:
19
+ - RGB: scalar (255 / 65535)
20
+ - implement basic math
21
+ - add, subtract, divide, multiply
22
+ - add tests
23
+ - creation/serialization/deserialization
24
+ - equality/comparison
25
+ - math
26
+ - move to separate gem
27
+
28
+ - simplify spline curves?
29
+ http://stackoverflow.com/questions/5525665/smoothing-a-hand-drawn-curve
30
+ http://www.codeproject.com/Articles/18936/A-Csharp-Implementation-of-Douglas-Peucker-Line-Ap
31
+
32
+ - add 'check' tool to check attributes & values of profile
33
+
34
+ - better command-line option parsing:
35
+ - tool should just declare attributes, setters
36
+ - options can come at beginning or end
37
+
38
+ - implement actual subclasses of CurveSet for colors, instead of using @color_class
39
+
40
+ - split main 'qt' tool into separate binaries:
41
+ - qtprofile: manage profiles
42
+ - qtprinter: manage printers
43
+ - qtpaper: manage paper types
44
+ - qtprint: print images
45
+
46
+ - test linearization
47
+ - print grayscale target image with QTR curve, then measure target
48
+ - analyze measured target
49
+ - build grayscale curve from samples
50
+ - test for linear response
51
+ - show dMin/dMax, Lab curve
52
+ - store each test with timestamp
53
+ - chart scale over time (with multiple tests)
54
+ - graph differences between values
55
+ - graph average dE
56
+ - see: http://cias.rit.edu/~gravure/tt/pdf/pc/TT5_Fred01.pdf (p. 34)
57
+
58
+
59
+ Target specs:
60
+
61
+ width of page 11"
62
+ width of strip <= 9.5" (24.13cm)
63
+ patch size (scan direction) >= 10mm (28pt)
64
+ patch size (perpendicular) 8mm (23pt)
65
+ gap size in scan direction 0.5mm - 1.0mm (2pt)
66
+ optimum patches per strip 21
67
+
68
+
69
+ ***
70
+
71
+ new process (* = user action)
72
+
73
+ 1. initialize
74
+
75
+ - get profile name from current directory
76
+ - get printer name from argument, or use default
77
+ - get PPD/etc. for printer
78
+ - get inks for printer
79
+ - modify inks from arguments
80
+
81
+ % qt init [--printer=Quad-C6] [--inks=-M]
82
+
83
+ 2. characterize
84
+
85
+ a. print characterization target
86
+
87
+ - generate characterization target for selected printer's ink channels
88
+ - one curve per channel, value on 0..1 scale
89
+ - one column per channel
90
+ - for each row:
91
+ - solid patch of given value (for spot reading)
92
+ - patch with small rectangle of given value inside larger rectangle of maximum value (like current ink limits chart)
93
+ - solid patch of given value, with thin white lines
94
+
95
+ - print characterization target
96
+ - in calibration mode
97
+
98
+ % qt characterize
99
+ % qt print ...
100
+
101
+ b. user examines printed target
102
+
103
+ - looks for overall ink quality
104
+ - finds patches with maximum density
105
+ - ignores unneeded channels
106
+
107
+ c. measure characterization target
108
+
109
+ - map patch IDs from arguments to patches
110
+ - measure spots (using 'spotread')
111
+ - map patches to per-channel ink-limit value
112
+ - channels with no patches specified are disabled
113
+ - save ink limits as L*a*b
114
+ - calculate ink order
115
+ - create curveset for enabled channels
116
+ - apply ink-limits
117
+
118
+ % qt characterize <patch-1> <patch-2> ...
119
+
120
+ 3. profile
121
+
122
+ - generate QTR profile
123
+ - install QTR profile
124
+
125
+ 4. linearize (either per channel or composite grayscale)
126
+
127
+ a. print linearization target
128
+
129
+ - generate linearization target
130
+ - create curveset for color model
131
+ - if per-channel:
132
+ - apply ink limits
133
+ - generate .tiX files for chartread
134
+ - generate target image
135
+
136
+ % qt linearize { --raw | --composite> }
137
+ % qt print [--calibrate] <target-file>
138
+
139
+ b. measure linearization target
140
+
141
+ 5. test
142
+
143
+ a. print test target
144
+
145
+ b. measure test target
146
+
147
+ - save test results
148
+
149
+ 6. visualize
150
+
151
+ - ink order, color
152
+ - ink limits
153
+ - overall linearization (color, error)
154
+ - density range
155
+ - QTR curves
156
+ - channel separations for a given image
157
+
158
+ ***
159
+
160
+ - Improve profile initialization:
161
+ - Use CupsFFI instead of 'lpadmin' to determine default printer.
162
+ - Add initial ink-limit to profile/target.
163
+ - To allow for more accurate results on papers known to be very absorbent.
164
+ - From posting on DigitalBW: "Find the limit of the full black ink by watching for
165
+ slight puddling and or printing a pattern with some 1 pixel spaced white lines
166
+ surrounded by much larger areas of solid black. When the edges of those 1 pixel
167
+ lines start to get fuzzy, you have too much ink.
168
+ - Allow negation of inks (eg, '-LLK').
169
+ - Find good printer defaults:
170
+ - Medium/high resolution (1440/2880).
171
+ - Unidirectional ("lospeed").
172
+ - Dithering mode ("Ordered")
173
+ - Save curves to profile so they are only generated once (when profiled).
174
+
175
+ - Improve target generation:
176
+ - Add info banner to target:
177
+ - Mode (characterization, linearization, etc.)
178
+ - Date
179
+ - Profile info (printer, paper, inks)
180
+
181
+ - Improve analysis:
182
+ - Experiment with whether more steps or over-sampling is better.
183
+ - Determine optimum delta-E for ink detection (& make configurable).
184
+ - Detect & remove bad ink:
185
+ - Too much deviation in samples.
186
+ - Calculate dot gain.
187
+ - http://www.brucelindbloom.com/index.html?Eqn_DotGain.html
188
+ - Verify limiting/separation algorithms.
189
+ - Generate sample data.
190
+ - Write tests to verify operations.
191
+ - Scale gray values in profile by ink limits?
192
+ http://lists.apple.com/archives/colorsync-users/2007/Jan/msg00379.html
193
+ http://www.colorforums.com/viewtopic.php?t=80
194
+ http://www.onyxtalk.com/thread-understanding-ink-limits
195
+ - Generate our own QTR curves.
196
+ - Pre-linearize of individual channels.
197
+ - Create smoother curves (using bsplines?).
198
+ - Use L* profiling?
199
+ - http://tech.groups.yahoo.com/group/QuadtoneRIP/message/9691
200
+
201
+ - Improve charting:
202
+ - Optionally normalize curves in charts.
203
+ - Represent a/b for measured (L*a*b) colors.
204
+ - Parameterize error threshold.
205
+ - Show individual sample points.
206
+ - Display densities using log scale?
207
+ - Use Jones diagrams for showing data <http://en.wikipedia.org/wiki/Jones_diagram>.
208
+
209
+ - Add confirmation/testing step to profiling:
210
+ - To test ink settling, sample fading, etc.
211
+ - Show actual tonal response curve.
212
+ - Show Lab curve (eg, ink color).
213
+ - Show charts for final curves.
214
+ - If multiple test results exist:
215
+ - Graph change of linearization, density range, color, etc.
216
+
217
+ - Build web interface.
218
+ - Create account.
219
+ - Create new profile.
220
+ - Generate reference/target files.
221
+ - Download as ZIP archive.
222
+ - Upload measured files.
223
+ - Analyze/visualize measurements.
224
+ - Generate QTR profile.
225
+ - Download QTR profile.
226
+ - Maybe small raw-printing utility, in MacRuby?
227
+ - Eventually, curve-builder and installer?
228
+
229
+ - Test/rewrite 'add-printer':
230
+ - Use CupsFFI instead of shelling out to 'lpadmin', etc.?
231
+
232
+ - Create guide for process (on wiki).
233
+
234
+ - Use Gutenprint to generate DeviceN or ESC/P2 files?
235
+
236
+ - Document classes & methods.
data/bin/qt ADDED
@@ -0,0 +1,7 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ $LOAD_PATH.unshift(File.join(File.realpath(File.dirname($0)), '..', 'lib'))
4
+
5
+ require 'quadtone'
6
+
7
+ Quadtone::Tool.process_args(ARGV)