halation 0.1.0 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +211 -0
- data/bin/halation +4 -1
- data/doc/Halation.html +14 -4
- data/doc/Halation/AttrHelpers.html +288 -0
- data/doc/Halation/Coerce.html +373 -0
- data/doc/Halation/Config.html +732 -0
- data/doc/Halation/Config/Camera.html +628 -0
- data/doc/Halation/Config/Lens.html +540 -0
- data/doc/Halation/Engine.html +928 -0
- data/doc/Halation/ExifToolImage.html +486 -0
- data/doc/Halation/Roll.html +916 -0
- data/doc/Halation/Roll/Frame.html +842 -0
- data/doc/Halation/Script.html +506 -0
- data/doc/_index.html +112 -1
- data/doc/class_list.html +1 -1
- data/doc/file.LICENSE.html +1 -1
- data/doc/file.README.html +211 -1
- data/doc/index.html +211 -1
- data/doc/method_list.html +432 -0
- data/doc/top-level-namespace.html +1 -1
- data/lib/halation.rb +4 -0
- data/lib/halation/coerce.rb +21 -0
- data/lib/halation/config.rb +53 -0
- data/lib/halation/config/camera.rb +42 -0
- data/lib/halation/config/lens.rb +32 -0
- data/lib/halation/engine.rb +91 -0
- data/lib/halation/roll.rb +57 -0
- data/lib/halation/roll/frame.rb +47 -0
- data/lib/halation/script.rb +150 -0
- data/lib/halation/tools/exif_tool/image.rb +33 -0
- data/lib/halation/version.rb +1 -1
- metadata +42 -3
data/doc/_index.html
CHANGED
@@ -81,6 +81,72 @@
|
|
81
81
|
<td valign='top' width="33%">
|
82
82
|
|
83
83
|
|
84
|
+
<ul id="alpha_C" class="alpha">
|
85
|
+
<li class="letter">C</li>
|
86
|
+
<ul>
|
87
|
+
|
88
|
+
<li>
|
89
|
+
<span class='object_link'><a href="Halation/Config/Camera.html" title="Halation::Config::Camera (class)">Camera</a></span>
|
90
|
+
|
91
|
+
<small>(Halation::Config)</small>
|
92
|
+
|
93
|
+
</li>
|
94
|
+
|
95
|
+
<li>
|
96
|
+
<span class='object_link'><a href="Halation/Coerce.html" title="Halation::Coerce (class)">Coerce</a></span>
|
97
|
+
|
98
|
+
<small>(Halation)</small>
|
99
|
+
|
100
|
+
</li>
|
101
|
+
|
102
|
+
<li>
|
103
|
+
<span class='object_link'><a href="Halation/Config.html" title="Halation::Config (class)">Config</a></span>
|
104
|
+
|
105
|
+
<small>(Halation)</small>
|
106
|
+
|
107
|
+
</li>
|
108
|
+
|
109
|
+
</ul>
|
110
|
+
</ul>
|
111
|
+
|
112
|
+
|
113
|
+
<ul id="alpha_E" class="alpha">
|
114
|
+
<li class="letter">E</li>
|
115
|
+
<ul>
|
116
|
+
|
117
|
+
<li>
|
118
|
+
<span class='object_link'><a href="Halation/Engine.html" title="Halation::Engine (class)">Engine</a></span>
|
119
|
+
|
120
|
+
<small>(Halation)</small>
|
121
|
+
|
122
|
+
</li>
|
123
|
+
|
124
|
+
<li>
|
125
|
+
<span class='object_link'><a href="Halation/ExifToolImage.html" title="Halation::ExifToolImage (class)">ExifToolImage</a></span>
|
126
|
+
|
127
|
+
<small>(Halation)</small>
|
128
|
+
|
129
|
+
</li>
|
130
|
+
|
131
|
+
</ul>
|
132
|
+
</ul>
|
133
|
+
|
134
|
+
|
135
|
+
<ul id="alpha_F" class="alpha">
|
136
|
+
<li class="letter">F</li>
|
137
|
+
<ul>
|
138
|
+
|
139
|
+
<li>
|
140
|
+
<span class='object_link'><a href="Halation/Roll/Frame.html" title="Halation::Roll::Frame (class)">Frame</a></span>
|
141
|
+
|
142
|
+
<small>(Halation::Roll)</small>
|
143
|
+
|
144
|
+
</li>
|
145
|
+
|
146
|
+
</ul>
|
147
|
+
</ul>
|
148
|
+
|
149
|
+
|
84
150
|
<ul id="alpha_H" class="alpha">
|
85
151
|
<li class="letter">H</li>
|
86
152
|
<ul>
|
@@ -93,6 +159,51 @@
|
|
93
159
|
</ul>
|
94
160
|
</ul>
|
95
161
|
|
162
|
+
|
163
|
+
<ul id="alpha_L" class="alpha">
|
164
|
+
<li class="letter">L</li>
|
165
|
+
<ul>
|
166
|
+
|
167
|
+
<li>
|
168
|
+
<span class='object_link'><a href="Halation/Config/Lens.html" title="Halation::Config::Lens (class)">Lens</a></span>
|
169
|
+
|
170
|
+
<small>(Halation::Config)</small>
|
171
|
+
|
172
|
+
</li>
|
173
|
+
|
174
|
+
</ul>
|
175
|
+
</ul>
|
176
|
+
|
177
|
+
|
178
|
+
<ul id="alpha_R" class="alpha">
|
179
|
+
<li class="letter">R</li>
|
180
|
+
<ul>
|
181
|
+
|
182
|
+
<li>
|
183
|
+
<span class='object_link'><a href="Halation/Roll.html" title="Halation::Roll (class)">Roll</a></span>
|
184
|
+
|
185
|
+
<small>(Halation)</small>
|
186
|
+
|
187
|
+
</li>
|
188
|
+
|
189
|
+
</ul>
|
190
|
+
</ul>
|
191
|
+
|
192
|
+
|
193
|
+
<ul id="alpha_S" class="alpha">
|
194
|
+
<li class="letter">S</li>
|
195
|
+
<ul>
|
196
|
+
|
197
|
+
<li>
|
198
|
+
<span class='object_link'><a href="Halation/Script.html" title="Halation::Script (class)">Script</a></span>
|
199
|
+
|
200
|
+
<small>(Halation)</small>
|
201
|
+
|
202
|
+
</li>
|
203
|
+
|
204
|
+
</ul>
|
205
|
+
</ul>
|
206
|
+
|
96
207
|
</td>
|
97
208
|
</tr>
|
98
209
|
</table>
|
@@ -102,7 +213,7 @@
|
|
102
213
|
</div>
|
103
214
|
|
104
215
|
<div id="footer">
|
105
|
-
Generated on
|
216
|
+
Generated on Sat May 28 22:28:56 2016 by
|
106
217
|
<a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
|
107
218
|
0.8.7.6 (ruby-2.1.7).
|
108
219
|
</div>
|
data/doc/class_list.html
CHANGED
@@ -43,7 +43,7 @@
|
|
43
43
|
|
44
44
|
<ul id="full_list" class="class">
|
45
45
|
<li id="object_" class="odd"><div class="item" style="padding-left:30px"><span class='object_link'><a href="top-level-namespace.html" title="Top Level Namespace (root)">Top Level Namespace</a></span></div></li>
|
46
|
-
<li id='object_Halation' class='even'><div class='item' style='padding-left:30px'><span class='object_link'><a href="Halation.html" title="Halation (module)">Halation</a></span><small class='search_info'>Top Level Namespace</small></div></li>
|
46
|
+
<li id='object_Halation' class='even'><div class='item' style='padding-left:30px'><a class='toggle'></a> <span class='object_link'><a href="Halation.html" title="Halation (module)">Halation</a></span><small class='search_info'>Top Level Namespace</small></div><ul><li id='object_Halation::Coerce' class='collapsed odd'><div class='item' style='padding-left:45px'><span class='object_link'><a href="Halation/Coerce.html" title="Halation::Coerce (class)">Coerce</a></span> < Object<small class='search_info'>Halation</small></div></li><li id='object_Halation::Config' class='collapsed even'><div class='item' style='padding-left:45px'><a class='toggle'></a> <span class='object_link'><a href="Halation/Config.html" title="Halation::Config (class)">Config</a></span> < Object<small class='search_info'>Halation</small></div><ul><li id='object_Halation::Config::Camera' class='collapsed'><div class='item' style='padding-left:60px'><span class='object_link'><a href="Halation/Config/Camera.html" title="Halation::Config::Camera (class)">Camera</a></span> < Object<small class='search_info'>Halation::Config</small></div></li><li id='object_Halation::Config::Lens' class='collapsed'><div class='item' style='padding-left:60px'><span class='object_link'><a href="Halation/Config/Lens.html" title="Halation::Config::Lens (class)">Lens</a></span> < Object<small class='search_info'>Halation::Config</small></div></li></ul></li><li id='object_Halation::Engine' class='collapsed odd'><div class='item' style='padding-left:45px'><span class='object_link'><a href="Halation/Engine.html" title="Halation::Engine (class)">Engine</a></span> < Object<small class='search_info'>Halation</small></div></li><li id='object_Halation::ExifToolImage' class='collapsed even'><div class='item' style='padding-left:45px'><span class='object_link'><a href="Halation/ExifToolImage.html" title="Halation::ExifToolImage (class)">ExifToolImage</a></span> < Object<small class='search_info'>Halation</small></div></li><li id='object_Halation::Roll' class='collapsed odd'><div class='item' style='padding-left:45px'><a class='toggle'></a> <span class='object_link'><a href="Halation/Roll.html" title="Halation::Roll (class)">Roll</a></span> < Object<small class='search_info'>Halation</small></div><ul><li id='object_Halation::Roll::Frame' class='collapsed'><div class='item' style='padding-left:60px'><span class='object_link'><a href="Halation/Roll/Frame.html" title="Halation::Roll::Frame (class)">Frame</a></span> < Object<small class='search_info'>Halation::Roll</small></div></li></ul></li><li id='object_Halation::Script' class='collapsed even'><div class='item' style='padding-left:45px'><span class='object_link'><a href="Halation/Script.html" title="Halation::Script (class)">Script</a></span> < Object<small class='search_info'>Halation</small></div></li></ul></li>
|
47
47
|
|
48
48
|
</ul>
|
49
49
|
</div>
|
data/doc/file.LICENSE.html
CHANGED
@@ -84,7 +84,7 @@ DEALINGS IN THE SOFTWARE.</p>
|
|
84
84
|
</div></div>
|
85
85
|
|
86
86
|
<div id="footer">
|
87
|
-
Generated on
|
87
|
+
Generated on Sat May 28 22:28:56 2016 by
|
88
88
|
<a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
|
89
89
|
0.8.7.6 (ruby-2.1.7).
|
90
90
|
</div>
|
data/doc/file.README.html
CHANGED
@@ -61,11 +61,221 @@
|
|
61
61
|
|
62
62
|
<div id="content"><div id='filecontents'><h1>Halation</h1>
|
63
63
|
|
64
|
+
<p><a href="https://badge.fury.io/rb/halation"><img src="https://badge.fury.io/rb/halation.svg" alt="Gem Version"></a>
|
65
|
+
<a href="https://coveralls.io/github/amclain/halation?branch=master"><img src="https://coveralls.io/repos/github/amclain/halation/badge.svg?branch=master" alt="Coverage Status"></a>
|
66
|
+
<a href="http://www.rubydoc.info/gems/halation"><img src="https://img.shields.io/badge/docs-api-blue.svg" alt="API Documentation"></a>
|
67
|
+
<a href="https://github.com/amclain/halation/blob/master/LICENSE"><img src="https://img.shields.io/badge/license-MIT-yellowgreen.svg" alt="MIT License"></a></p>
|
68
|
+
|
64
69
|
<p>Add Exif metadata to film photographs.</p>
|
70
|
+
|
71
|
+
<h2>Issues, Bugs, Feature Requests</h2>
|
72
|
+
|
73
|
+
<p>Any bugs and feature requests should be reported on the GitHub issue tracker:</p>
|
74
|
+
|
75
|
+
<p><a href="https://github.com/amclain/halation/issues">https://github.com/amclain/halation/issues</a></p>
|
76
|
+
|
77
|
+
<p><strong>Pull requests are preferred via GitHub.</strong></p>
|
78
|
+
|
79
|
+
<p>Mercurial users can use <a href="http://hg-git.github.io/">Hg-Git</a> to interact with
|
80
|
+
GitHub repositories.</p>
|
81
|
+
|
82
|
+
<h2>Installation</h2>
|
83
|
+
|
84
|
+
<p>Halation is available as a Ruby gem.</p>
|
85
|
+
|
86
|
+
<ol>
|
87
|
+
<li><p>Install <a href="https://www.ruby-lang.org">Ruby</a> 2.1 or higher.</p>
|
88
|
+
|
89
|
+
<ul>
|
90
|
+
<li>Windows: Use <a href="http://rubyinstaller.org/downloads/">RubyInstaller</a>.</li>
|
91
|
+
<li>Mac: Use <a href="https://www.ruby-lang.org/en/documentation/installation/#homebrew">homebrew</a>.</li>
|
92
|
+
<li>Linux: Use <a href="https://github.com/sstephenson/rbenv#basic-github-checkout">rbenv</a>.</li>
|
93
|
+
<li><a href="https://www.ruby-lang.org/en/documentation/installation">Additional installation instructions</a></li>
|
94
|
+
</ul></li>
|
95
|
+
<li><p>Install <a href="http://www.sno.phy.queensu.ca/%7Ephil/exiftool/">ExifTool</a>.</p></li>
|
96
|
+
<li><p>Open the <a href="http://www.addictivetips.com/windows-tips/windows-7-elevated-command-prompt-in-context-menu/">command line</a>
|
97
|
+
and type:</p></li>
|
98
|
+
</ol>
|
99
|
+
|
100
|
+
<pre class="code text"><code class="text"> gem install halation
|
101
|
+
</code></pre>
|
102
|
+
|
103
|
+
<h2>Configuration</h2>
|
104
|
+
|
105
|
+
<p>Halation stores its global configuration data in <code>.halation</code> in the system's
|
106
|
+
user directory. This is typically <code>~/.halation</code> on Mac and *nix-based systems,
|
107
|
+
or <code>C:\Users\.halation</code> on Windows.</p>
|
108
|
+
|
109
|
+
<blockquote>
|
110
|
+
<p>Halation uses the <a href="http://www.yaml.org/spec/1.2/spec.html#Preview">YAML syntax</a>
|
111
|
+
for its configuration files.</p>
|
112
|
+
</blockquote>
|
113
|
+
|
114
|
+
<p>By default Halation uses a global configuration file, <code>~/.halation/config.yml</code>.
|
115
|
+
This is where your generic settings are stored, like your name, copyright info,
|
116
|
+
and information about your cameras.</p>
|
117
|
+
|
118
|
+
<pre class="code yaml"><code class="yaml"># Example config.yml
|
119
|
+
---
|
120
|
+
artist: "Example User"
|
121
|
+
copyright: "2016 Example User"
|
122
|
+
cameras:
|
123
|
+
- tag: "rz67"
|
124
|
+
make: "Mamiya"
|
125
|
+
model: "Mamiya RZ67 Pro II"
|
126
|
+
lenses:
|
127
|
+
- tag: 65
|
128
|
+
model: "M65mm f/4L-A"
|
129
|
+
focal_length: 65
|
130
|
+
- tag: 110
|
131
|
+
model: "Z110mm f/2.8W"
|
132
|
+
focal_length: 110
|
133
|
+
- tag: 180
|
134
|
+
model: "Z180mm f/4.5W-N"
|
135
|
+
focal_length: 180
|
136
|
+
- tag: 250
|
137
|
+
model: "M65mm f/4L-A"
|
138
|
+
focal_length: 250
|
139
|
+
</code></pre>
|
140
|
+
|
141
|
+
<h2>Tags</h2>
|
142
|
+
|
143
|
+
<p>Tags are user-defined values that serve as a quick and simple way to reference
|
144
|
+
complex information.</p>
|
145
|
+
|
146
|
+
<p>Why is this important? Let's say you shot a roll of ten images with several
|
147
|
+
different lenses. It would be cumbersome to have to specify a model number
|
148
|
+
like <code>Z110mm f/2.8W</code> (and all the other lens information) on each of the frames.
|
149
|
+
Even more importantly, if you're processing batches of images over a long period
|
150
|
+
of time (months, years), you're bound to make mistakes in the spelling of the
|
151
|
+
model number. This is important because any software that catalogs images based
|
152
|
+
on Exif data (Lightroom, Flickr) doesn't know how to deal with these
|
153
|
+
inconsistencies. This means <code>Z110mm f/2.8W</code> and <code>Z110mm f/2.8 W</code> will be
|
154
|
+
considered two different lenses by the software (did you see the difference?),
|
155
|
+
even though we as humans understand they're the same thing. If you try to filter
|
156
|
+
by lens in Lightroom, some of the images will be under one spelling and some
|
157
|
+
will be under the other, even though they were both shot with the same
|
158
|
+
110mm lens.</p>
|
159
|
+
|
160
|
+
<p>Tags solve this problem by letting us define all of the complex,
|
161
|
+
infrequently-changing data in one place. We can then reference that complex
|
162
|
+
data by its <code>tag</code>. For example, if we have a 65mm lens and a 110mm lens we can
|
163
|
+
define their information once and tag them as <code>65</code> and <code>110</code> respectively (we
|
164
|
+
choose the tag names).</p>
|
165
|
+
|
166
|
+
<pre class="code yaml"><code class="yaml">lenses:
|
167
|
+
- tag: 65
|
168
|
+
model: "M65mm f/4L-A"
|
169
|
+
focal_length: 65
|
170
|
+
- tag: 110
|
171
|
+
model: "Z110mm f/2.8W"
|
172
|
+
focal_length: 110
|
173
|
+
</code></pre>
|
174
|
+
|
175
|
+
<p>Now when we want to reference which lens was used when capturing a particular
|
176
|
+
frame, all we have to do is specify the tag and Halation will fill in the
|
177
|
+
correct Exif data for that lens when the image file is processed.</p>
|
178
|
+
|
179
|
+
<pre class="code yaml"><code class="yaml">frames:
|
180
|
+
- number: 1
|
181
|
+
lens: 110
|
182
|
+
- number: 2
|
183
|
+
lens: 65
|
184
|
+
- number: 3
|
185
|
+
lens: 110
|
186
|
+
</code></pre>
|
187
|
+
|
188
|
+
<h2>Processing A Roll</h2>
|
189
|
+
|
190
|
+
<p>Halation requires all of the image files for a roll of film to be in the same
|
191
|
+
directory. The images should be named in ascending alphabetical order, with the
|
192
|
+
first frame of the roll at the start of the list and the last frame at the end.
|
193
|
+
This is typically the default when scanners save files. Halation will scan for
|
194
|
+
tiff files (<code>.tif</code>, <code>.tiff</code>), which is the ideal format, as well as jpeg files
|
195
|
+
(<code>.jpg</code>, <code>.jpeg</code>).</p>
|
196
|
+
|
197
|
+
<p>This directory should also contain a <code>roll.yml</code> file, which specifies the data
|
198
|
+
for each frame (image file) on the roll of film. A new <code>roll.yml</code> file can be
|
199
|
+
generated in the current directory with the following command:</p>
|
200
|
+
|
201
|
+
<pre class="code text"><code class="text"> halation --new-roll
|
202
|
+
</code></pre>
|
203
|
+
|
204
|
+
<p>The data for the roll can then be entered into the file:</p>
|
205
|
+
|
206
|
+
<pre class="code yaml"><code class="yaml"># Example roll.yml
|
207
|
+
---
|
208
|
+
date: "2016-01-01"
|
209
|
+
camera: "rz67"
|
210
|
+
lens: 110
|
211
|
+
iso: 100
|
212
|
+
frames:
|
213
|
+
- number: 1
|
214
|
+
shutter: "1/125"
|
215
|
+
aperture: 8
|
216
|
+
- number: 2
|
217
|
+
shutter: "2"
|
218
|
+
lens: 65
|
219
|
+
aperture: 16
|
220
|
+
- number: 3
|
221
|
+
lens: 65
|
222
|
+
shutter: "0.5"
|
223
|
+
aperture: 16
|
224
|
+
- number: 4
|
225
|
+
lens: 65
|
226
|
+
shutter: "0.5"
|
227
|
+
aperture: 16
|
228
|
+
- number: 5
|
229
|
+
shutter: "1/250"
|
230
|
+
aperture: 4
|
231
|
+
- number: 6
|
232
|
+
shutter: "1/125"
|
233
|
+
aperture: 8
|
234
|
+
- number: 7
|
235
|
+
shutter: "1/125"
|
236
|
+
aperture: 8
|
237
|
+
- number: 8
|
238
|
+
shutter: "1/60"
|
239
|
+
aperture: 22
|
240
|
+
- number: 9
|
241
|
+
date: "2016-01-02"
|
242
|
+
shutter: "1/400"
|
243
|
+
aperture: 8
|
244
|
+
flash: yes
|
245
|
+
- number: 10
|
246
|
+
date: "2016-01-02"
|
247
|
+
shutter: "1/400"
|
248
|
+
aperture: 8
|
249
|
+
flash: yes
|
250
|
+
</code></pre>
|
251
|
+
|
252
|
+
<p>Default values can be set at the beginning of the file so that these settings
|
253
|
+
don't have to be specified for each frame. For example, the roll of film has
|
254
|
+
one ISO speed for all of the frames, so this can be specified at the top instead
|
255
|
+
of for each individual frame.</p>
|
256
|
+
|
257
|
+
<p>Values like the date are a little different, because maybe the whole roll was
|
258
|
+
shot during the same day, or maybe it was shot over the course of several days.
|
259
|
+
This is where the <code>roll.yml</code> file provides flexibility. Specifying <code>date</code> at the
|
260
|
+
beginning of the file will make it the default date for all of the frames on the
|
261
|
+
roll. If not all of the frames were shot on the same day, <code>date</code> can then be
|
262
|
+
specified for each of the frames that have a different date (<code>9</code> and <code>10</code> in
|
263
|
+
the example above). This concept works for most of the values.</p>
|
264
|
+
|
265
|
+
<blockquote>
|
266
|
+
<p>A complete list of keywords are available in the <a href="http://www.rubydoc.info/gems/halation">Halation API documentation</a>,
|
267
|
+
as well as in the <a href="https://github.com/amclain/halation/tree/master/spec/samples">sample files</a>.</p>
|
268
|
+
</blockquote>
|
269
|
+
|
270
|
+
<p>After all of the necessary values are entered into <code>roll.yml</code>, the images can
|
271
|
+
be processed by running the following command:</p>
|
272
|
+
|
273
|
+
<pre class="code text"><code class="text"> halation
|
274
|
+
</code></pre>
|
65
275
|
</div></div>
|
66
276
|
|
67
277
|
<div id="footer">
|
68
|
-
Generated on
|
278
|
+
Generated on Sat May 28 22:28:56 2016 by
|
69
279
|
<a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
|
70
280
|
0.8.7.6 (ruby-2.1.7).
|
71
281
|
</div>
|
data/doc/index.html
CHANGED
@@ -61,11 +61,221 @@
|
|
61
61
|
|
62
62
|
<div id="content"><div id='filecontents'><h1>Halation</h1>
|
63
63
|
|
64
|
+
<p><a href="https://badge.fury.io/rb/halation"><img src="https://badge.fury.io/rb/halation.svg" alt="Gem Version"></a>
|
65
|
+
<a href="https://coveralls.io/github/amclain/halation?branch=master"><img src="https://coveralls.io/repos/github/amclain/halation/badge.svg?branch=master" alt="Coverage Status"></a>
|
66
|
+
<a href="http://www.rubydoc.info/gems/halation"><img src="https://img.shields.io/badge/docs-api-blue.svg" alt="API Documentation"></a>
|
67
|
+
<a href="https://github.com/amclain/halation/blob/master/LICENSE"><img src="https://img.shields.io/badge/license-MIT-yellowgreen.svg" alt="MIT License"></a></p>
|
68
|
+
|
64
69
|
<p>Add Exif metadata to film photographs.</p>
|
70
|
+
|
71
|
+
<h2>Issues, Bugs, Feature Requests</h2>
|
72
|
+
|
73
|
+
<p>Any bugs and feature requests should be reported on the GitHub issue tracker:</p>
|
74
|
+
|
75
|
+
<p><a href="https://github.com/amclain/halation/issues">https://github.com/amclain/halation/issues</a></p>
|
76
|
+
|
77
|
+
<p><strong>Pull requests are preferred via GitHub.</strong></p>
|
78
|
+
|
79
|
+
<p>Mercurial users can use <a href="http://hg-git.github.io/">Hg-Git</a> to interact with
|
80
|
+
GitHub repositories.</p>
|
81
|
+
|
82
|
+
<h2>Installation</h2>
|
83
|
+
|
84
|
+
<p>Halation is available as a Ruby gem.</p>
|
85
|
+
|
86
|
+
<ol>
|
87
|
+
<li><p>Install <a href="https://www.ruby-lang.org">Ruby</a> 2.1 or higher.</p>
|
88
|
+
|
89
|
+
<ul>
|
90
|
+
<li>Windows: Use <a href="http://rubyinstaller.org/downloads/">RubyInstaller</a>.</li>
|
91
|
+
<li>Mac: Use <a href="https://www.ruby-lang.org/en/documentation/installation/#homebrew">homebrew</a>.</li>
|
92
|
+
<li>Linux: Use <a href="https://github.com/sstephenson/rbenv#basic-github-checkout">rbenv</a>.</li>
|
93
|
+
<li><a href="https://www.ruby-lang.org/en/documentation/installation">Additional installation instructions</a></li>
|
94
|
+
</ul></li>
|
95
|
+
<li><p>Install <a href="http://www.sno.phy.queensu.ca/%7Ephil/exiftool/">ExifTool</a>.</p></li>
|
96
|
+
<li><p>Open the <a href="http://www.addictivetips.com/windows-tips/windows-7-elevated-command-prompt-in-context-menu/">command line</a>
|
97
|
+
and type:</p></li>
|
98
|
+
</ol>
|
99
|
+
|
100
|
+
<pre class="code text"><code class="text"> gem install halation
|
101
|
+
</code></pre>
|
102
|
+
|
103
|
+
<h2>Configuration</h2>
|
104
|
+
|
105
|
+
<p>Halation stores its global configuration data in <code>.halation</code> in the system's
|
106
|
+
user directory. This is typically <code>~/.halation</code> on Mac and *nix-based systems,
|
107
|
+
or <code>C:\Users\.halation</code> on Windows.</p>
|
108
|
+
|
109
|
+
<blockquote>
|
110
|
+
<p>Halation uses the <a href="http://www.yaml.org/spec/1.2/spec.html#Preview">YAML syntax</a>
|
111
|
+
for its configuration files.</p>
|
112
|
+
</blockquote>
|
113
|
+
|
114
|
+
<p>By default Halation uses a global configuration file, <code>~/.halation/config.yml</code>.
|
115
|
+
This is where your generic settings are stored, like your name, copyright info,
|
116
|
+
and information about your cameras.</p>
|
117
|
+
|
118
|
+
<pre class="code yaml"><code class="yaml"># Example config.yml
|
119
|
+
---
|
120
|
+
artist: "Example User"
|
121
|
+
copyright: "2016 Example User"
|
122
|
+
cameras:
|
123
|
+
- tag: "rz67"
|
124
|
+
make: "Mamiya"
|
125
|
+
model: "Mamiya RZ67 Pro II"
|
126
|
+
lenses:
|
127
|
+
- tag: 65
|
128
|
+
model: "M65mm f/4L-A"
|
129
|
+
focal_length: 65
|
130
|
+
- tag: 110
|
131
|
+
model: "Z110mm f/2.8W"
|
132
|
+
focal_length: 110
|
133
|
+
- tag: 180
|
134
|
+
model: "Z180mm f/4.5W-N"
|
135
|
+
focal_length: 180
|
136
|
+
- tag: 250
|
137
|
+
model: "M65mm f/4L-A"
|
138
|
+
focal_length: 250
|
139
|
+
</code></pre>
|
140
|
+
|
141
|
+
<h2>Tags</h2>
|
142
|
+
|
143
|
+
<p>Tags are user-defined values that serve as a quick and simple way to reference
|
144
|
+
complex information.</p>
|
145
|
+
|
146
|
+
<p>Why is this important? Let's say you shot a roll of ten images with several
|
147
|
+
different lenses. It would be cumbersome to have to specify a model number
|
148
|
+
like <code>Z110mm f/2.8W</code> (and all the other lens information) on each of the frames.
|
149
|
+
Even more importantly, if you're processing batches of images over a long period
|
150
|
+
of time (months, years), you're bound to make mistakes in the spelling of the
|
151
|
+
model number. This is important because any software that catalogs images based
|
152
|
+
on Exif data (Lightroom, Flickr) doesn't know how to deal with these
|
153
|
+
inconsistencies. This means <code>Z110mm f/2.8W</code> and <code>Z110mm f/2.8 W</code> will be
|
154
|
+
considered two different lenses by the software (did you see the difference?),
|
155
|
+
even though we as humans understand they're the same thing. If you try to filter
|
156
|
+
by lens in Lightroom, some of the images will be under one spelling and some
|
157
|
+
will be under the other, even though they were both shot with the same
|
158
|
+
110mm lens.</p>
|
159
|
+
|
160
|
+
<p>Tags solve this problem by letting us define all of the complex,
|
161
|
+
infrequently-changing data in one place. We can then reference that complex
|
162
|
+
data by its <code>tag</code>. For example, if we have a 65mm lens and a 110mm lens we can
|
163
|
+
define their information once and tag them as <code>65</code> and <code>110</code> respectively (we
|
164
|
+
choose the tag names).</p>
|
165
|
+
|
166
|
+
<pre class="code yaml"><code class="yaml">lenses:
|
167
|
+
- tag: 65
|
168
|
+
model: "M65mm f/4L-A"
|
169
|
+
focal_length: 65
|
170
|
+
- tag: 110
|
171
|
+
model: "Z110mm f/2.8W"
|
172
|
+
focal_length: 110
|
173
|
+
</code></pre>
|
174
|
+
|
175
|
+
<p>Now when we want to reference which lens was used when capturing a particular
|
176
|
+
frame, all we have to do is specify the tag and Halation will fill in the
|
177
|
+
correct Exif data for that lens when the image file is processed.</p>
|
178
|
+
|
179
|
+
<pre class="code yaml"><code class="yaml">frames:
|
180
|
+
- number: 1
|
181
|
+
lens: 110
|
182
|
+
- number: 2
|
183
|
+
lens: 65
|
184
|
+
- number: 3
|
185
|
+
lens: 110
|
186
|
+
</code></pre>
|
187
|
+
|
188
|
+
<h2>Processing A Roll</h2>
|
189
|
+
|
190
|
+
<p>Halation requires all of the image files for a roll of film to be in the same
|
191
|
+
directory. The images should be named in ascending alphabetical order, with the
|
192
|
+
first frame of the roll at the start of the list and the last frame at the end.
|
193
|
+
This is typically the default when scanners save files. Halation will scan for
|
194
|
+
tiff files (<code>.tif</code>, <code>.tiff</code>), which is the ideal format, as well as jpeg files
|
195
|
+
(<code>.jpg</code>, <code>.jpeg</code>).</p>
|
196
|
+
|
197
|
+
<p>This directory should also contain a <code>roll.yml</code> file, which specifies the data
|
198
|
+
for each frame (image file) on the roll of film. A new <code>roll.yml</code> file can be
|
199
|
+
generated in the current directory with the following command:</p>
|
200
|
+
|
201
|
+
<pre class="code text"><code class="text"> halation --new-roll
|
202
|
+
</code></pre>
|
203
|
+
|
204
|
+
<p>The data for the roll can then be entered into the file:</p>
|
205
|
+
|
206
|
+
<pre class="code yaml"><code class="yaml"># Example roll.yml
|
207
|
+
---
|
208
|
+
date: "2016-01-01"
|
209
|
+
camera: "rz67"
|
210
|
+
lens: 110
|
211
|
+
iso: 100
|
212
|
+
frames:
|
213
|
+
- number: 1
|
214
|
+
shutter: "1/125"
|
215
|
+
aperture: 8
|
216
|
+
- number: 2
|
217
|
+
shutter: "2"
|
218
|
+
lens: 65
|
219
|
+
aperture: 16
|
220
|
+
- number: 3
|
221
|
+
lens: 65
|
222
|
+
shutter: "0.5"
|
223
|
+
aperture: 16
|
224
|
+
- number: 4
|
225
|
+
lens: 65
|
226
|
+
shutter: "0.5"
|
227
|
+
aperture: 16
|
228
|
+
- number: 5
|
229
|
+
shutter: "1/250"
|
230
|
+
aperture: 4
|
231
|
+
- number: 6
|
232
|
+
shutter: "1/125"
|
233
|
+
aperture: 8
|
234
|
+
- number: 7
|
235
|
+
shutter: "1/125"
|
236
|
+
aperture: 8
|
237
|
+
- number: 8
|
238
|
+
shutter: "1/60"
|
239
|
+
aperture: 22
|
240
|
+
- number: 9
|
241
|
+
date: "2016-01-02"
|
242
|
+
shutter: "1/400"
|
243
|
+
aperture: 8
|
244
|
+
flash: yes
|
245
|
+
- number: 10
|
246
|
+
date: "2016-01-02"
|
247
|
+
shutter: "1/400"
|
248
|
+
aperture: 8
|
249
|
+
flash: yes
|
250
|
+
</code></pre>
|
251
|
+
|
252
|
+
<p>Default values can be set at the beginning of the file so that these settings
|
253
|
+
don't have to be specified for each frame. For example, the roll of film has
|
254
|
+
one ISO speed for all of the frames, so this can be specified at the top instead
|
255
|
+
of for each individual frame.</p>
|
256
|
+
|
257
|
+
<p>Values like the date are a little different, because maybe the whole roll was
|
258
|
+
shot during the same day, or maybe it was shot over the course of several days.
|
259
|
+
This is where the <code>roll.yml</code> file provides flexibility. Specifying <code>date</code> at the
|
260
|
+
beginning of the file will make it the default date for all of the frames on the
|
261
|
+
roll. If not all of the frames were shot on the same day, <code>date</code> can then be
|
262
|
+
specified for each of the frames that have a different date (<code>9</code> and <code>10</code> in
|
263
|
+
the example above). This concept works for most of the values.</p>
|
264
|
+
|
265
|
+
<blockquote>
|
266
|
+
<p>A complete list of keywords are available in the <a href="http://www.rubydoc.info/gems/halation">Halation API documentation</a>,
|
267
|
+
as well as in the <a href="https://github.com/amclain/halation/tree/master/spec/samples">sample files</a>.</p>
|
268
|
+
</blockquote>
|
269
|
+
|
270
|
+
<p>After all of the necessary values are entered into <code>roll.yml</code>, the images can
|
271
|
+
be processed by running the following command:</p>
|
272
|
+
|
273
|
+
<pre class="code text"><code class="text"> halation
|
274
|
+
</code></pre>
|
65
275
|
</div></div>
|
66
276
|
|
67
277
|
<div id="footer">
|
68
|
-
Generated on
|
278
|
+
Generated on Sat May 28 22:28:56 2016 by
|
69
279
|
<a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
|
70
280
|
0.8.7.6 (ruby-2.1.7).
|
71
281
|
</div>
|