halation 0.1.0 → 0.2.0

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 9308067582bac50fd0f310776ad78c9f39d1acb8
4
- data.tar.gz: 9e3d0d27119569498dc2d18182db25f77d93e446
3
+ metadata.gz: 3f17cbb31bfe6de7fa8a260e962b84443392cccf
4
+ data.tar.gz: 709958a6604ad60526a116c8c4850d70992194cb
5
5
  SHA512:
6
- metadata.gz: f5d8b142c7debffa1e1eea48e436be27dd2c1bf138c2615a3fe9ecfa11e3be5d870ea574b7585d3090bfc0b2fa92f3b0c5e55825e94b03b4a7e82e472cc872f0
7
- data.tar.gz: 4432fc7e1667ec1ad8a848ba1084a6c1ac426ba3bfe343c90c2fb8afebff536a21701fb7ed1382aaea178f818b2296da474b4bc751e6a2255f577023e54da2f7
6
+ metadata.gz: 9bda60501dde8ab1d422326094d559c4a0265ecb51bba5bec00ba5bb1b5944215d083bae11918d4bc550cf2b50a9ab2978e01e4bef2c17a9dacd06de8b106439
7
+ data.tar.gz: 07b54f563fa6186b1d973c1b2d3bc0c7e05bc4fa29f38f98ff2844825b982f065e492e0405fb8c2b24b51580ba67666629ae4ad4982837a32ff020484903d7e3
data/README.md CHANGED
@@ -1,3 +1,214 @@
1
1
  # Halation
2
2
 
3
+ [![Gem Version](https://badge.fury.io/rb/halation.svg)](https://badge.fury.io/rb/halation)
4
+ [![Coverage Status](https://coveralls.io/repos/github/amclain/halation/badge.svg?branch=master)](https://coveralls.io/github/amclain/halation?branch=master)
5
+ [![API Documentation](https://img.shields.io/badge/docs-api-blue.svg)](http://www.rubydoc.info/gems/halation)
6
+ [![MIT License](https://img.shields.io/badge/license-MIT-yellowgreen.svg)](https://github.com/amclain/halation/blob/master/LICENSE)
7
+
3
8
  Add Exif metadata to film photographs.
9
+
10
+ ## Issues, Bugs, Feature Requests
11
+
12
+ Any bugs and feature requests should be reported on the GitHub issue tracker:
13
+
14
+ https://github.com/amclain/halation/issues
15
+
16
+
17
+ **Pull requests are preferred via GitHub.**
18
+
19
+ Mercurial users can use [Hg-Git](http://hg-git.github.io/) to interact with
20
+ GitHub repositories.
21
+
22
+ ## Installation
23
+
24
+ Halation is available as a Ruby gem.
25
+
26
+ 1. Install [Ruby](https://www.ruby-lang.org) 2.1 or higher.
27
+ * Windows: Use [RubyInstaller](http://rubyinstaller.org/downloads/).
28
+ * Mac: Use [homebrew](https://www.ruby-lang.org/en/documentation/installation/#homebrew).
29
+ * Linux: Use [rbenv](https://github.com/sstephenson/rbenv#basic-github-checkout).
30
+ * [Additional installation instructions](https://www.ruby-lang.org/en/documentation/installation)
31
+
32
+ 2. Install [ExifTool](http://www.sno.phy.queensu.ca/~phil/exiftool/).
33
+
34
+ 3. Open the [command line](http://www.addictivetips.com/windows-tips/windows-7-elevated-command-prompt-in-context-menu/)
35
+ and type:
36
+
37
+ ```text
38
+ gem install halation
39
+ ```
40
+
41
+ ## Configuration
42
+
43
+ Halation stores its global configuration data in `.halation` in the system's
44
+ user directory. This is typically `~/.halation` on Mac and *nix-based systems,
45
+ or `C:\Users\.halation` on Windows.
46
+
47
+ >Halation uses the [YAML syntax](http://www.yaml.org/spec/1.2/spec.html#Preview)
48
+ for its configuration files.
49
+
50
+ By default Halation uses a global configuration file, `~/.halation/config.yml`.
51
+ This is where your generic settings are stored, like your name, copyright info,
52
+ and information about your cameras.
53
+
54
+ ```yaml
55
+ # Example config.yml
56
+ ---
57
+ artist: "Example User"
58
+ copyright: "2016 Example User"
59
+ cameras:
60
+ - tag: "rz67"
61
+ make: "Mamiya"
62
+ model: "Mamiya RZ67 Pro II"
63
+ lenses:
64
+ - tag: 65
65
+ model: "M65mm f/4L-A"
66
+ focal_length: 65
67
+ - tag: 110
68
+ model: "Z110mm f/2.8W"
69
+ focal_length: 110
70
+ - tag: 180
71
+ model: "Z180mm f/4.5W-N"
72
+ focal_length: 180
73
+ - tag: 250
74
+ model: "M65mm f/4L-A"
75
+ focal_length: 250
76
+ ```
77
+
78
+ ## Tags
79
+
80
+ Tags are user-defined values that serve as a quick and simple way to reference
81
+ complex information.
82
+
83
+ Why is this important? Let's say you shot a roll of ten images with several
84
+ different lenses. It would be cumbersome to have to specify a model number
85
+ like `Z110mm f/2.8W` (and all the other lens information) on each of the frames.
86
+ Even more importantly, if you're processing batches of images over a long period
87
+ of time (months, years), you're bound to make mistakes in the spelling of the
88
+ model number. This is important because any software that catalogs images based
89
+ on Exif data (Lightroom, Flickr) doesn't know how to deal with these
90
+ inconsistencies. This means `Z110mm f/2.8W` and `Z110mm f/2.8 W` will be
91
+ considered two different lenses by the software (did you see the difference?),
92
+ even though we as humans understand they're the same thing. If you try to filter
93
+ by lens in Lightroom, some of the images will be under one spelling and some
94
+ will be under the other, even though they were both shot with the same
95
+ 110mm lens.
96
+
97
+ Tags solve this problem by letting us define all of the complex,
98
+ infrequently-changing data in one place. We can then reference that complex
99
+ data by its `tag`. For example, if we have a 65mm lens and a 110mm lens we can
100
+ define their information once and tag them as `65` and `110` respectively (we
101
+ choose the tag names).
102
+
103
+ ```yaml
104
+ lenses:
105
+ - tag: 65
106
+ model: "M65mm f/4L-A"
107
+ focal_length: 65
108
+ - tag: 110
109
+ model: "Z110mm f/2.8W"
110
+ focal_length: 110
111
+ ```
112
+
113
+ Now when we want to reference which lens was used when capturing a particular
114
+ frame, all we have to do is specify the tag and Halation will fill in the
115
+ correct Exif data for that lens when the image file is processed.
116
+
117
+ ```yaml
118
+ frames:
119
+ - number: 1
120
+ lens: 110
121
+ - number: 2
122
+ lens: 65
123
+ - number: 3
124
+ lens: 110
125
+ ```
126
+
127
+ ## Processing A Roll
128
+
129
+ Halation requires all of the image files for a roll of film to be in the same
130
+ directory. The images should be named in ascending alphabetical order, with the
131
+ first frame of the roll at the start of the list and the last frame at the end.
132
+ This is typically the default when scanners save files. Halation will scan for
133
+ tiff files (`.tif`, `.tiff`), which is the ideal format, as well as jpeg files
134
+ (`.jpg`, `.jpeg`).
135
+
136
+ This directory should also contain a `roll.yml` file, which specifies the data
137
+ for each frame (image file) on the roll of film. A new `roll.yml` file can be
138
+ generated in the current directory with the following command:
139
+
140
+ ```text
141
+ halation --new-roll
142
+ ```
143
+
144
+ The data for the roll can then be entered into the file:
145
+
146
+ ```yaml
147
+ # Example roll.yml
148
+ ---
149
+ date: "2016-01-01"
150
+ camera: "rz67"
151
+ lens: 110
152
+ iso: 100
153
+ frames:
154
+ - number: 1
155
+ shutter: "1/125"
156
+ aperture: 8
157
+ - number: 2
158
+ shutter: "2"
159
+ lens: 65
160
+ aperture: 16
161
+ - number: 3
162
+ lens: 65
163
+ shutter: "0.5"
164
+ aperture: 16
165
+ - number: 4
166
+ lens: 65
167
+ shutter: "0.5"
168
+ aperture: 16
169
+ - number: 5
170
+ shutter: "1/250"
171
+ aperture: 4
172
+ - number: 6
173
+ shutter: "1/125"
174
+ aperture: 8
175
+ - number: 7
176
+ shutter: "1/125"
177
+ aperture: 8
178
+ - number: 8
179
+ shutter: "1/60"
180
+ aperture: 22
181
+ - number: 9
182
+ date: "2016-01-02"
183
+ shutter: "1/400"
184
+ aperture: 8
185
+ flash: yes
186
+ - number: 10
187
+ date: "2016-01-02"
188
+ shutter: "1/400"
189
+ aperture: 8
190
+ flash: yes
191
+ ```
192
+
193
+ Default values can be set at the beginning of the file so that these settings
194
+ don't have to be specified for each frame. For example, the roll of film has
195
+ one ISO speed for all of the frames, so this can be specified at the top instead
196
+ of for each individual frame.
197
+
198
+ Values like the date are a little different, because maybe the whole roll was
199
+ shot during the same day, or maybe it was shot over the course of several days.
200
+ This is where the `roll.yml` file provides flexibility. Specifying `date` at the
201
+ beginning of the file will make it the default date for all of the frames on the
202
+ roll. If not all of the frames were shot on the same day, `date` can then be
203
+ specified for each of the frames that have a different date (`9` and `10` in
204
+ the example above). This concept works for most of the values.
205
+
206
+ >A complete list of keywords are available in the [Halation API documentation](http://www.rubydoc.info/gems/halation),
207
+ as well as in the [sample files](https://github.com/amclain/halation/tree/master/spec/samples).
208
+
209
+ After all of the necessary values are entered into `roll.yml`, the images can
210
+ be processed by running the following command:
211
+
212
+ ```text
213
+ halation
214
+ ```
@@ -1,2 +1,5 @@
1
1
  #! /usr/bin/env ruby
2
- require 'halation'
2
+
3
+ require_relative '../lib/halation'
4
+
5
+ Halation::Script.run
@@ -81,7 +81,7 @@
81
81
  <dl>
82
82
  <dt>Defined in:</dt>
83
83
  <dd>lib/halation.rb<span class="defines">,<br />
84
- lib/halation/version.rb</span>
84
+ lib/halation/roll.rb,<br /> lib/halation/coerce.rb,<br /> lib/halation/config.rb,<br /> lib/halation/engine.rb,<br /> lib/halation/script.rb,<br /> lib/halation/version.rb,<br /> lib/halation/roll/frame.rb,<br /> lib/halation/config/lens.rb,<br /> lib/halation/config/camera.rb,<br /> lib/halation/tools/exif_tool/image.rb</span>
85
85
  </dd>
86
86
  </dl>
87
87
 
@@ -98,7 +98,17 @@
98
98
  <div class="tags">
99
99
 
100
100
 
101
- </div>
101
+ </div><h2>Defined Under Namespace</h2>
102
+ <p class="children">
103
+
104
+
105
+
106
+
107
+ <strong class="classes">Classes:</strong> <span class='object_link'><a href="Halation/Coerce.html" title="Halation::Coerce (class)">Coerce</a></span>, <span class='object_link'><a href="Halation/Config.html" title="Halation::Config (class)">Config</a></span>, <span class='object_link'><a href="Halation/Engine.html" title="Halation::Engine (class)">Engine</a></span>, <span class='object_link'><a href="Halation/ExifToolImage.html" title="Halation::ExifToolImage (class)">ExifToolImage</a></span>, <span class='object_link'><a href="Halation/Roll.html" title="Halation::Roll (class)">Roll</a></span>, <span class='object_link'><a href="Halation/Script.html" title="Halation::Script (class)">Script</a></span>
108
+
109
+
110
+ </p>
111
+
102
112
  <h2>Constant Summary</h2>
103
113
 
104
114
  <dl class="constants">
@@ -117,7 +127,7 @@
117
127
 
118
128
  </div>
119
129
  </dt>
120
- <dd><pre class="code"><span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>0.1.0</span><span class='tstring_end'>&quot;</span></span></pre></dd>
130
+ <dd><pre class="code"><span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>0.2.0</span><span class='tstring_end'>&quot;</span></span></pre></dd>
121
131
 
122
132
  </dl>
123
133
 
@@ -133,7 +143,7 @@
133
143
  </div>
134
144
 
135
145
  <div id="footer">
136
- Generated on Wed May 4 22:46:35 2016 by
146
+ Generated on Sat May 28 22:28:56 2016 by
137
147
  <a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
138
148
  0.8.7.6 (ruby-2.1.7).
139
149
  </div>
@@ -0,0 +1,288 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <meta charset="utf-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
+ <title>
7
+ Module: Halation::AttrHelpers
8
+
9
+ &mdash; Documentation by YARD 0.8.7.6
10
+
11
+ </title>
12
+
13
+ <link rel="stylesheet" href="../css/style.css" type="text/css" charset="utf-8" />
14
+
15
+ <link rel="stylesheet" href="../css/common.css" type="text/css" charset="utf-8" />
16
+
17
+ <script type="text/javascript" charset="utf-8">
18
+ pathId = "Halation::AttrHelpers";
19
+ relpath = '../';
20
+ </script>
21
+
22
+
23
+ <script type="text/javascript" charset="utf-8" src="../js/jquery.js"></script>
24
+
25
+ <script type="text/javascript" charset="utf-8" src="../js/app.js"></script>
26
+
27
+
28
+ </head>
29
+ <body>
30
+ <div class="nav_wrap">
31
+ <iframe id="nav" src="../class_list.html"></iframe>
32
+ <div id="resizer"></div>
33
+ </div>
34
+
35
+ <div id="main" tabindex="-1">
36
+ <div id="header">
37
+ <div id="menu">
38
+
39
+ <a href="../_index.html">Index (A)</a> &raquo;
40
+ <span class='title'><span class='object_link'><a href="../Halation.html" title="Halation (module)">Halation</a></span></span>
41
+ &raquo;
42
+ <span class="title">AttrHelpers</span>
43
+
44
+ </div>
45
+
46
+ <div id="search">
47
+
48
+ <a class="full_list_link" id="class_list_link"
49
+ href="../class_list.html">
50
+
51
+ <svg width="24" height="24">
52
+ <rect x="0" y="4" width="24" height="4" rx="1" ry="1"></rect>
53
+ <rect x="0" y="12" width="24" height="4" rx="1" ry="1"></rect>
54
+ <rect x="0" y="20" width="24" height="4" rx="1" ry="1"></rect>
55
+ </svg>
56
+ </a>
57
+
58
+ </div>
59
+ <div class="clear"></div>
60
+ </div>
61
+
62
+ <iframe id="search_frame" src="../class_list.html"></iframe>
63
+
64
+ <div id="content"><h1>Module: Halation::AttrHelpers
65
+
66
+
67
+
68
+ </h1>
69
+ <div class="box_info">
70
+
71
+
72
+
73
+
74
+
75
+
76
+
77
+
78
+
79
+ <dl>
80
+ <dt>Included in:</dt>
81
+ <dd><span class='object_link'><a href="Config/Camera.html" title="Halation::Config::Camera (class)">Config::Camera</a></span>, <span class='object_link'><a href="Config/Lens.html" title="Halation::Config::Lens (class)">Config::Lens</a></span></dd>
82
+ </dl>
83
+
84
+
85
+
86
+ <dl>
87
+ <dt>Defined in:</dt>
88
+ <dd>lib/halation/attr_helpers.rb</dd>
89
+ </dl>
90
+
91
+ </div>
92
+
93
+ <h2>Overview</h2><div class="docstring">
94
+ <div class="discussion">
95
+
96
+ <p>Class attr helpers. Extend this module to opt-in to its functionality.</p>
97
+
98
+
99
+ </div>
100
+ </div>
101
+ <div class="tags">
102
+
103
+
104
+ </div>
105
+
106
+
107
+
108
+
109
+
110
+
111
+
112
+ <h2>
113
+ Instance Method Summary
114
+ <small><a href="#" class="summary_toggle">collapse</a></small>
115
+ </h2>
116
+
117
+ <ul class="summary">
118
+
119
+ <li class="public ">
120
+ <span class="summary_signature">
121
+
122
+ <a href="#attr_reader_int_or_nil-instance_method" title="#attr_reader_int_or_nil (instance method)">#<strong>attr_reader_int_or_nil</strong>(*sym) &#x21d2; Integer<sup>?</sup> </a>
123
+
124
+
125
+
126
+ </span>
127
+
128
+
129
+
130
+
131
+
132
+
133
+
134
+
135
+
136
+ <span class="summary_desc"><div class='inline'></div></span>
137
+
138
+ </li>
139
+
140
+
141
+ <li class="public ">
142
+ <span class="summary_signature">
143
+
144
+ <a href="#attr_reader_str_or_nil-instance_method" title="#attr_reader_str_or_nil (instance method)">#<strong>attr_reader_str_or_nil</strong>(*sym) &#x21d2; String<sup>?</sup> </a>
145
+
146
+
147
+
148
+ </span>
149
+
150
+
151
+
152
+
153
+
154
+
155
+
156
+
157
+
158
+ <span class="summary_desc"><div class='inline'></div></span>
159
+
160
+ </li>
161
+
162
+
163
+ </ul>
164
+
165
+
166
+
167
+
168
+ <div id="instance_method_details" class="method_details_list">
169
+ <h2>Instance Method Details</h2>
170
+
171
+
172
+ <div class="method_details first">
173
+ <h3 class="signature first" id="attr_reader_int_or_nil-instance_method">
174
+
175
+ #<strong>attr_reader_int_or_nil</strong>(*sym) &#x21d2; <tt>Integer</tt><sup>?</sup>
176
+
177
+
178
+
179
+
180
+
181
+ </h3><div class="docstring">
182
+ <div class="discussion">
183
+
184
+
185
+ </div>
186
+ </div>
187
+ <div class="tags">
188
+
189
+ <p class="tag_title">Returns:</p>
190
+ <ul class="return">
191
+
192
+ <li>
193
+
194
+
195
+ <span class='type'>(<tt>Integer</tt>, <tt>nil</tt>)</span>
196
+
197
+
198
+
199
+ </li>
200
+
201
+ </ul>
202
+
203
+ </div><table class="source_code">
204
+ <tr>
205
+ <td>
206
+ <pre class="lines">
207
+
208
+
209
+ 11
210
+ 12
211
+ 13</pre>
212
+ </td>
213
+ <td>
214
+ <pre class="code"><span class="info file"># File 'lib/halation/attr_helpers.rb', line 11</span>
215
+
216
+ <span class='kw'>def</span> <span class='id identifier rubyid_attr_reader_int_or_nil'>attr_reader_int_or_nil</span><span class='lparen'>(</span><span class='op'>*</span><span class='id identifier rubyid_sym'>sym</span><span class='rparen'>)</span>
217
+ <span class='id identifier rubyid_with_instance_variables'>with_instance_variables</span><span class='lparen'>(</span><span class='op'>*</span><span class='id identifier rubyid_sym'>sym</span><span class='rparen'>)</span> <span class='lbrace'>{</span> <span class='op'>|</span><span class='id identifier rubyid_value'>value</span><span class='op'>|</span> <span class='id identifier rubyid_value'>value</span> <span class='op'>&amp;&amp;=</span> <span class='id identifier rubyid_value'>value</span><span class='period'>.</span><span class='id identifier rubyid_to_i'>to_i</span> <span class='rbrace'>}</span>
218
+ <span class='kw'>end</span></pre>
219
+ </td>
220
+ </tr>
221
+ </table>
222
+ </div>
223
+
224
+ <div class="method_details ">
225
+ <h3 class="signature " id="attr_reader_str_or_nil-instance_method">
226
+
227
+ #<strong>attr_reader_str_or_nil</strong>(*sym) &#x21d2; <tt>String</tt><sup>?</sup>
228
+
229
+
230
+
231
+
232
+
233
+ </h3><div class="docstring">
234
+ <div class="discussion">
235
+
236
+
237
+ </div>
238
+ </div>
239
+ <div class="tags">
240
+
241
+ <p class="tag_title">Returns:</p>
242
+ <ul class="return">
243
+
244
+ <li>
245
+
246
+
247
+ <span class='type'>(<tt>String</tt>, <tt>nil</tt>)</span>
248
+
249
+
250
+
251
+ </li>
252
+
253
+ </ul>
254
+
255
+ </div><table class="source_code">
256
+ <tr>
257
+ <td>
258
+ <pre class="lines">
259
+
260
+
261
+ 6
262
+ 7
263
+ 8</pre>
264
+ </td>
265
+ <td>
266
+ <pre class="code"><span class="info file"># File 'lib/halation/attr_helpers.rb', line 6</span>
267
+
268
+ <span class='kw'>def</span> <span class='id identifier rubyid_attr_reader_str_or_nil'>attr_reader_str_or_nil</span><span class='lparen'>(</span><span class='op'>*</span><span class='id identifier rubyid_sym'>sym</span><span class='rparen'>)</span>
269
+ <span class='id identifier rubyid_with_instance_variables'>with_instance_variables</span><span class='lparen'>(</span><span class='op'>*</span><span class='id identifier rubyid_sym'>sym</span><span class='rparen'>)</span> <span class='lbrace'>{</span> <span class='op'>|</span><span class='id identifier rubyid_value'>value</span><span class='op'>|</span> <span class='id identifier rubyid_value'>value</span> <span class='op'>&amp;&amp;=</span> <span class='id identifier rubyid_value'>value</span><span class='period'>.</span><span class='id identifier rubyid_to_s'>to_s</span> <span class='rbrace'>}</span>
270
+ <span class='kw'>end</span></pre>
271
+ </td>
272
+ </tr>
273
+ </table>
274
+ </div>
275
+
276
+ </div>
277
+
278
+ </div>
279
+
280
+ <div id="footer">
281
+ Generated on Thu May 5 23:51:49 2016 by
282
+ <a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
283
+ 0.8.7.6 (ruby-2.1.7).
284
+ </div>
285
+
286
+ </div>
287
+ </body>
288
+ </html>