tracksperanto 2.9.9 → 2.10.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.
data/Gemfile CHANGED
@@ -8,6 +8,7 @@ gem "progressbar", "0.10.0"
8
8
  gem "update_hints", "~> 1.0"
9
9
 
10
10
  group :development do
11
+ gem "approximately"
11
12
  gem "jeweler"
12
13
  gem "rake"
13
14
  gem "flexmock", "~>0.8"
data/History.txt CHANGED
@@ -1,3 +1,7 @@
1
+ === 2.10.0
2
+
3
+ * Nuke importer now supports PlanarTracker nodes and their corner-pin output
4
+
1
5
  === 2.9.9
2
6
 
3
7
  * Add lens distortion middleware. Adds the possibility to remove or add Syntheyes lens distortion to your plates.
data/README.rdoc CHANGED
@@ -55,7 +55,7 @@ converted files already exist <b>they will be overwritten without warning</b>.
55
55
  == Format support
56
56
 
57
57
  Import and export support:
58
- * Nuke v5 script (Tracker3 nodes, also known as Tracker in the UI - this is the node that you track with)
58
+ * Nuke v5 script (Tracker3 nodes, also known as Tracker in the UI - this is the node that you track with, and Reconcile3D)
59
59
  * Shake tracker node export (textfile with many tracks per file)
60
60
  * PFTrack 2dt (version 4 and 5) anf PFMatchit/PFTrack 2011 point track exports
61
61
  * Syntheyes 2D tracking data exports
@@ -74,10 +74,10 @@ Export only:
74
74
  * Ruby (will make calls to Tracksperanto to create trackers/keyframes) - useful if you want to play with trackers as data
75
75
  * Maya locators (animated locators on an image plane)
76
76
 
77
- == Modularity
77
+ == Editing your tracks while converting
78
78
 
79
- Tracksperanto is very modular and can process data passing through it (like
80
- scaling a proxy track up). Consult the --help option to see what is available.
79
+ Tracksperanto has a number of features to scale, move, slip, distort and rename trackers.
80
+ Consult the --help option to see what is available.
81
81
 
82
82
  == Development
83
83
 
data/bin/tracksperanto CHANGED
@@ -68,11 +68,14 @@ op.on("--code PATH_TO_SCRIPT", String, "Load custom Ruby code into tracksperanto
68
68
  end
69
69
  end
70
70
 
71
+ def f(module_list)
72
+ "\n" + module_list.map{|e| "\t\t\t\t\t%s\n" % e }.join
73
+ end
71
74
 
72
- op.on(" -f", "--from TRANSLATOR", String, "Use the specific import translator - #{readers.join(", ")}") { |f| options[:importer] = f }
75
+ op.on(" -f", "--from TRANSLATOR", String, "Use the specific import translator, must be one of: #{f(readers)}") { |f| options[:importer] = f }
73
76
  op.on(" -w", "--width WIDTH_IN_PIXELS", Integer, "Absolute input comp width in pixels (will try to autodetect)") { |w| options[:width] = w }
74
77
  op.on(" -h", "--height HEIGHT_IN_PIXELS", Integer, "Absolute input comp height in pixels (will try to autodetect)") {|w| options[:height] = w }
75
- op.on(" -o", "--only EXPORTER_NAME", String, "Only export the selected format, format must be one of #{writers.join(", ")}") { |f| writer_class_name = f }
78
+ op.on(" -o", "--only EXPORTER_NAME", String, "Only export the selected format, format must be one of: #{f(writers)}") { |f| writer_class_name = f }
76
79
 
77
80
  op.on(" -xs", "--xscale X_SCALING_FACTOR", Float, mwd("Scaler"), &mw("Scaler", :x_factor))
78
81
 
@@ -81,12 +84,12 @@ op.on(" -pad", "--pad PAD_FRACTION_VALUES_COMMA_SEPARATED", String, mwd("Pad"))
81
84
  $middlewares.push(["Pad", {"left_pad" => left, "right_pad"=> right, "top_pad" => top, "bottom_pad" => bottom}])
82
85
  end
83
86
 
84
- op.on(" -u", "--undistort K_AND_KCUBE_COMMA_SEPARATED", String, mwd("LensDisto")) do | coefficients |
87
+ op.on(" -u", "--undistort K_AND_KCUBE_COMMA_SEPARATED", String, "Remove lens distortion using the Syntheyes algorithm") do | coefficients |
85
88
  k, kcube = coefficients.split(",").map{|e| e.to_f }
86
89
  $middlewares.push(["LensDisto", {"k" => k, "kcube"=> kcube, "remove" => true}])
87
90
  end
88
91
 
89
- op.on(" -d", "--distort K_AND_KCUBE_COMMA_SEPARATED", String, mwd("LensDisto")) do | coefficients |
92
+ op.on(" -d", "--distort K_AND_KCUBE_COMMA_SEPARATED", String, "Add lens distortion using the Syntheyes algorithm") do | coefficients |
90
93
  k, kcube = coefficients.split(",").map{|e| e.to_f }
91
94
  $middlewares.push(["LensDisto", {"k" => k, "kcube"=> kcube, "remove" => false}])
92
95
  end
@@ -19,6 +19,8 @@ class Tracksperanto::Import::NukeScript < Tracksperanto::Import::Base
19
19
  scan_tracker_node(io).each(&Proc.new)
20
20
  elsif line =~ RECONCILE_PATTERN
21
21
  scan_reconcile_node(io).each(&Proc.new)
22
+ elsif line =~ PLANAR_PATTERN
23
+ scan_planar_tracker_node(io).each(&Proc.new)
22
24
  end
23
25
  end
24
26
  end
@@ -27,10 +29,11 @@ class Tracksperanto::Import::NukeScript < Tracksperanto::Import::Base
27
29
 
28
30
  TRACKER_3_PATTERN = /^Tracker3 \{/
29
31
  RECONCILE_PATTERN = /^Reconcile3D \{/
32
+ PLANAR_PATTERN = /^PlanarTracker1_0 \{/
30
33
  OUTPUT_PATTERN = /^output \{/
31
34
  TRACK_PATTERN = /^track(\d) \{/
32
35
  NODENAME = /^name ([^\n]+)/
33
-
36
+ PLANAR_CORNERS = %w( outputBottomLeft outputBottomRight outputTopLeft outputTopRight)
34
37
 
35
38
  # Scans a Reconcile3D node and returs it's output
36
39
  def scan_reconcile_node(io)
@@ -46,6 +49,31 @@ class Tracksperanto::Import::NukeScript < Tracksperanto::Import::Base
46
49
  end
47
50
  end
48
51
 
52
+ # Scans a PlanarTracker node and recovers corner pin
53
+ def scan_planar_tracker_node(io)
54
+ trackers, node_name = [], nil
55
+ while line = io.gets_and_strip
56
+ PLANAR_CORNERS.each do | corner_name |
57
+ if line =~ /#{corner_name}/
58
+ t = Tracksperanto::Tracker.new
59
+ t = extract_tracker(line)
60
+ t.name = corner_name
61
+ trackers.push(t.dup)
62
+ elsif line =~ NODENAME
63
+ node_name = $1
64
+ end
65
+ end
66
+
67
+ if node_name && trackers.length == 4
68
+ trackers.each{|t| t.name = "%s_%s" % [node_name, t.name] }
69
+ return trackers
70
+ end
71
+ end
72
+
73
+ # Fail
74
+ return []
75
+ end
76
+
49
77
  # Scans a tracker node and return all tracks within that node (no more than 4)
50
78
  def scan_tracker_node(io)
51
79
  tracks_in_tracker = []
@@ -1,19 +1,7 @@
1
1
  # -*- encoding : utf-8 -*-
2
2
  class Tracksperanto::Middleware::LensDisto < Tracksperanto::Middleware::Base
3
3
  include Tracksperanto::UVCoordinates
4
-
5
- class Vector2 < Struct.new(:x, :y)
6
- end
7
-
8
- class RF < Struct.new(:r, :f)
9
- def inspect
10
- '(%0.3f %0.3f)' % [r, f]
11
- end
12
-
13
- def m
14
- r * f
15
- end
16
- end
4
+
17
5
 
18
6
  parameter :k, :cast => :float, :desc => "Quartic distortion coefficient", :default => 0
19
7
  parameter :kcube, :cast => :float, :desc => "Cubic distortion coefficient", :default => 0
@@ -29,6 +17,32 @@ class Tracksperanto::Middleware::LensDisto < Tracksperanto::Middleware::Base
29
17
  @width, @height = w, h
30
18
  @aspect = @width.to_f / @height
31
19
 
20
+ generate_lut
21
+ super
22
+ end
23
+
24
+ def export_point(frame, float_x, float_y, float_residual)
25
+ x, y = remove ? undisto(float_x, float_y) : disto(float_x, float_y)
26
+ super(frame, x, y, float_residual)
27
+ end
28
+
29
+ private
30
+
31
+ class Vector2 < Struct.new(:x, :y)
32
+ end
33
+
34
+ class RF < Struct.new(:r, :f)
35
+ def inspect
36
+ '(%0.3f %0.3f)' % [r, f]
37
+ end
38
+
39
+ def m
40
+ r * f
41
+ end
42
+ end
43
+
44
+ # We apply disto using a lookup table of y = f(r)
45
+ def generate_lut
32
46
  # Generate the lookup table
33
47
  @lut = [RF.new(0.0, 1.0)]
34
48
  max_r = @aspect + 1
@@ -37,20 +51,10 @@ class Tracksperanto::Middleware::LensDisto < Tracksperanto::Middleware::Base
37
51
  r = 0
38
52
  STEPS.times do | mult |
39
53
  r += increment
40
- @lut.push(RF.new(r, disto_radius(r)))
54
+ @lut.push(RF.new(r, distort_radius(r)))
41
55
  end
42
-
43
- @lut.inspect
44
- super
45
56
  end
46
57
 
47
- def export_point(frame, float_x, float_y, float_residual)
48
- x, y = remove ? undisto(float_x, float_y) : disto(float_x, float_y)
49
- super(frame, x, y, float_residual)
50
- end
51
-
52
- private
53
-
54
58
  def with_uv(x, y)
55
59
  vec = Vector2.new(convert_to_uv(x, @width), convert_to_uv(y, @height))
56
60
  yield(vec)
@@ -58,40 +62,29 @@ class Tracksperanto::Middleware::LensDisto < Tracksperanto::Middleware::Base
58
62
  end
59
63
 
60
64
  # Radius is equal to aspect at the rightmost extremity
61
- def disto_radius(r)
62
- r2 = r ** 2
63
- # Skipping the square root speeds things up if we don't need it
64
- f = if kcube.abs > 0.00001
65
- 1 + (r2 * (k + kcube * Math.sqrt(r2)));
66
- else
67
- 1 + (r2 * k);
68
- end
65
+ def distort_radius(r)
66
+ 1 + (r*r*(k + kcube * r))
69
67
  end
70
68
 
71
69
  def disto(x, y)
72
70
  with_uv(x, y) do | pt |
73
- # Get the radius of the point
74
- x = pt.x * @aspect
75
- r = Math.sqrt(x.abs**2 + pt.y.abs**2)
76
-
77
71
  # Find the good tuples to interpolate on
78
- f = disto_interpolated(r)
79
-
72
+ f = disto_interpolated(get_radius(pt))
80
73
  pt.x = pt.x * f
81
74
  pt.y = pt.y * f
82
75
  end
83
76
  end
84
77
 
78
+ def get_radius(pt)
79
+ # Get the radius of the point
80
+ x = pt.x * @aspect
81
+ r = Math.sqrt(x.abs**2 + pt.y.abs**2)
82
+ end
85
83
 
86
84
  def undisto(x, y)
87
85
  with_uv(x, y) do | pt |
88
- # Get the radius of the point
89
- x = pt.x * @aspect
90
- r = Math.sqrt(x.abs**2 + pt.y.abs**2)
91
-
92
86
  # Find the good tuples to interpolate on
93
- f = undisto_interpolated(r)
94
-
87
+ f = undisto_interpolated(get_radius(pt))
95
88
  pt.x = pt.x / f
96
89
  pt.y = pt.y / f
97
90
  end
data/lib/pipeline/base.rb CHANGED
@@ -26,7 +26,7 @@ module Tracksperanto::Pipeline
26
26
  # applies the middlewares. Here's how a calling sequence for a pipeline looks like:
27
27
  #
28
28
  # pipe = Tracksperanto::Pipeline::Base.new
29
- # pipe.middleware_tuples = ["Golden", {:enabled => true}]
29
+ # pipe.middleware_tuples = ["Shift", {:x => 10}]
30
30
  # pipe.progress_block = lambda{|percent, msg| puts("#{msg}..#{percent.to_i}%") }
31
31
  # pipe.run("/tmp/shakescript.shk", :width => 720, :height => 576)
32
32
  #
data/lib/tracksperanto.rb CHANGED
@@ -3,7 +3,7 @@
3
3
 
4
4
  module Tracksperanto
5
5
  PATH = File.expand_path(File.dirname(__FILE__))
6
- VERSION = '2.9.9'
6
+ VERSION = '2.10.0'
7
7
 
8
8
  module Import; end
9
9
  module Export; end
data/test/helper.rb CHANGED
@@ -4,6 +4,7 @@ require File.dirname(__FILE__) + '/../lib/tracksperanto' unless defined?(Tracksp
4
4
  require 'test/unit'
5
5
  require 'flexmock'
6
6
  require 'flexmock/test_unit'
7
+ require 'approximately'
7
8
  require 'fileutils'
8
9
 
9
10
  unless File.exist?(File.dirname(__FILE__) + "/import/samples")
@@ -34,6 +34,20 @@ class NukeImportTest < Test::Unit::TestCase
34
34
  assert_equal 128, trackers[0].length
35
35
  end
36
36
 
37
+ def test_parsing_planar_tracker
38
+ fixture = File.open(File.dirname(__FILE__) + '/samples/nuke/planar.nk')
39
+
40
+ parser = Tracksperanto::Import::NukeScript.new(:io => fixture)
41
+ parser.width = 4096
42
+ parser.height = 2304
43
+
44
+ trackers = parser.to_a
45
+ assert_equal 4, trackers.length
46
+
47
+ ref_names = %w( PlanarTracker2_outputBottomLeft PlanarTracker2_outputBottomRight
48
+ PlanarTracker2_outputTopRight PlanarTracker2_outputTopLeft )
49
+ assert_equal ref_names, trackers.map{|e| e.name }
50
+ end
37
51
 
38
52
  def test_parsing_from_nuke
39
53
  fixture = File.open(File.dirname(__FILE__) + '/samples/nuke/one_tracker_with_break.nk')
@@ -121,6 +135,7 @@ x754 912.0731812 x755 913.7190552 916.0959473 918.1025391 920.0751953 922.189880
121
135
  assert_equal 754, result[7][0]
122
136
  end
123
137
 
138
+
124
139
  def test_zip_channels
125
140
  tuples_x = [[1, 125], [3, 234], [5, 456], [9,876]]
126
141
  tuples_y = [[2, 437], [3, 123], [6, 432], [9, 430]]
@@ -3,6 +3,8 @@ require File.expand_path(File.dirname(__FILE__)) + '/../helper'
3
3
 
4
4
  class LensMiddlewareTest < Test::Unit::TestCase
5
5
 
6
+ include Approximately
7
+
6
8
  def test_action_description
7
9
  assert_equal "Apply or remove lens distortion with the Syntheyes algorithm", Tracksperanto::Middleware::LensDisto.action_description
8
10
  end
@@ -27,7 +29,8 @@ class LensMiddlewareTest < Test::Unit::TestCase
27
29
  receiver = flexmock
28
30
  receiver.should_receive(:start_export).once.with(1920, 1080)
29
31
  receiver.should_receive(:start_tracker_segment).once.with("Tracker")
30
- receiver.should_receive(:export_point).once.with(1, 66.03001446825158, 43.978678913818925, 0)
32
+ receiver.should_receive(:export_point).once.with(1, approx(66.03), approx(43.978), approx(0))
33
+
31
34
  receiver.should_receive(:end_tracker_segment).once
32
35
  receiver.should_receive(:end_export).once
33
36
 
@@ -43,7 +46,7 @@ class LensMiddlewareTest < Test::Unit::TestCase
43
46
  receiver = flexmock
44
47
  receiver.should_receive(:start_export).once.with(1920, 1080)
45
48
  receiver.should_receive(:start_tracker_segment).once.with("Tracker")
46
- receiver.should_receive(:export_point).once.with(1, 11.999914830236555, 13.99995274335909, 0)
49
+ receiver.should_receive(:export_point).once.with(1, approx(11.999914830236555), approx(13.99995274335909), 0)
47
50
  receiver.should_receive(:end_tracker_segment).once
48
51
  receiver.should_receive(:end_export).once
49
52
 
@@ -59,7 +62,7 @@ class LensMiddlewareTest < Test::Unit::TestCase
59
62
  receiver = flexmock
60
63
  receiver.should_receive(:start_export).once.with(1920, 1080)
61
64
  receiver.should_receive(:start_tracker_segment).once.with("Tracker")
62
- receiver.should_receive(:export_point).once.with(1, 1.0, 1.0, 0)
65
+ receiver.should_receive(:export_point).once.with(1, approx(0.984), approx(0.991), 0)
63
66
  receiver.should_receive(:end_tracker_segment).once
64
67
  receiver.should_receive(:end_export).once
65
68
 
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = "tracksperanto"
8
- s.version = "2.9.9"
8
+ s.version = "2.10.0"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Julik Tarkhanov"]
12
- s.date = "2012-04-10"
12
+ s.date = "2012-05-30"
13
13
  s.description = "Converts 2D track exports between different apps like Flame, MatchMover, PFTrack..."
14
14
  s.email = "me@julik.nl"
15
15
  s.executables = ["tracksperanto"]
@@ -198,6 +198,7 @@ Gem::Specification.new do |s|
198
198
  s.add_runtime_dependency(%q<flame_channel_parser>, ["~> 4.0"])
199
199
  s.add_runtime_dependency(%q<progressbar>, ["= 0.10.0"])
200
200
  s.add_runtime_dependency(%q<update_hints>, ["~> 1.0"])
201
+ s.add_development_dependency(%q<approximately>, [">= 0"])
201
202
  s.add_development_dependency(%q<jeweler>, [">= 0"])
202
203
  s.add_development_dependency(%q<rake>, [">= 0"])
203
204
  s.add_development_dependency(%q<flexmock>, ["~> 0.8"])
@@ -208,6 +209,7 @@ Gem::Specification.new do |s|
208
209
  s.add_dependency(%q<flame_channel_parser>, ["~> 4.0"])
209
210
  s.add_dependency(%q<progressbar>, ["= 0.10.0"])
210
211
  s.add_dependency(%q<update_hints>, ["~> 1.0"])
212
+ s.add_dependency(%q<approximately>, [">= 0"])
211
213
  s.add_dependency(%q<jeweler>, [">= 0"])
212
214
  s.add_dependency(%q<rake>, [">= 0"])
213
215
  s.add_dependency(%q<flexmock>, ["~> 0.8"])
@@ -219,6 +221,7 @@ Gem::Specification.new do |s|
219
221
  s.add_dependency(%q<flame_channel_parser>, ["~> 4.0"])
220
222
  s.add_dependency(%q<progressbar>, ["= 0.10.0"])
221
223
  s.add_dependency(%q<update_hints>, ["~> 1.0"])
224
+ s.add_dependency(%q<approximately>, [">= 0"])
222
225
  s.add_dependency(%q<jeweler>, [">= 0"])
223
226
  s.add_dependency(%q<rake>, [">= 0"])
224
227
  s.add_dependency(%q<flexmock>, ["~> 0.8"])
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: tracksperanto
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.9.9
4
+ version: 2.10.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-04-10 00:00:00.000000000 Z
12
+ date: 2012-05-30 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: obuf
16
- requirement: &12549320 !ruby/object:Gem::Requirement
16
+ requirement: &81500 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ~>
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: 1.1.0
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *12549320
24
+ version_requirements: *81500
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: progressive_io
27
- requirement: &12549080 !ruby/object:Gem::Requirement
27
+ requirement: &80900 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ~>
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: '1.0'
33
33
  type: :runtime
34
34
  prerelease: false
35
- version_requirements: *12549080
35
+ version_requirements: *80900
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: flame_channel_parser
38
- requirement: &12548840 !ruby/object:Gem::Requirement
38
+ requirement: &80430 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ~>
@@ -43,10 +43,10 @@ dependencies:
43
43
  version: '4.0'
44
44
  type: :runtime
45
45
  prerelease: false
46
- version_requirements: *12548840
46
+ version_requirements: *80430
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: progressbar
49
- requirement: &12548600 !ruby/object:Gem::Requirement
49
+ requirement: &79900 !ruby/object:Gem::Requirement
50
50
  none: false
51
51
  requirements:
52
52
  - - =
@@ -54,10 +54,10 @@ dependencies:
54
54
  version: 0.10.0
55
55
  type: :runtime
56
56
  prerelease: false
57
- version_requirements: *12548600
57
+ version_requirements: *79900
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: update_hints
60
- requirement: &12548360 !ruby/object:Gem::Requirement
60
+ requirement: &79370 !ruby/object:Gem::Requirement
61
61
  none: false
62
62
  requirements:
63
63
  - - ~>
@@ -65,10 +65,21 @@ dependencies:
65
65
  version: '1.0'
66
66
  type: :runtime
67
67
  prerelease: false
68
- version_requirements: *12548360
68
+ version_requirements: *79370
69
+ - !ruby/object:Gem::Dependency
70
+ name: approximately
71
+ requirement: &79050 !ruby/object:Gem::Requirement
72
+ none: false
73
+ requirements:
74
+ - - ! '>='
75
+ - !ruby/object:Gem::Version
76
+ version: '0'
77
+ type: :development
78
+ prerelease: false
79
+ version_requirements: *79050
69
80
  - !ruby/object:Gem::Dependency
70
81
  name: jeweler
71
- requirement: &12548120 !ruby/object:Gem::Requirement
82
+ requirement: &78640 !ruby/object:Gem::Requirement
72
83
  none: false
73
84
  requirements:
74
85
  - - ! '>='
@@ -76,10 +87,10 @@ dependencies:
76
87
  version: '0'
77
88
  type: :development
78
89
  prerelease: false
79
- version_requirements: *12548120
90
+ version_requirements: *78640
80
91
  - !ruby/object:Gem::Dependency
81
92
  name: rake
82
- requirement: &12547880 !ruby/object:Gem::Requirement
93
+ requirement: &78050 !ruby/object:Gem::Requirement
83
94
  none: false
84
95
  requirements:
85
96
  - - ! '>='
@@ -87,10 +98,10 @@ dependencies:
87
98
  version: '0'
88
99
  type: :development
89
100
  prerelease: false
90
- version_requirements: *12547880
101
+ version_requirements: *78050
91
102
  - !ruby/object:Gem::Dependency
92
103
  name: flexmock
93
- requirement: &12547640 !ruby/object:Gem::Requirement
104
+ requirement: &524110 !ruby/object:Gem::Requirement
94
105
  none: false
95
106
  requirements:
96
107
  - - ~>
@@ -98,10 +109,10 @@ dependencies:
98
109
  version: '0.8'
99
110
  type: :development
100
111
  prerelease: false
101
- version_requirements: *12547640
112
+ version_requirements: *524110
102
113
  - !ruby/object:Gem::Dependency
103
114
  name: cli_test
104
- requirement: &12547400 !ruby/object:Gem::Requirement
115
+ requirement: &522630 !ruby/object:Gem::Requirement
105
116
  none: false
106
117
  requirements:
107
118
  - - ~>
@@ -109,7 +120,7 @@ dependencies:
109
120
  version: '1.0'
110
121
  type: :development
111
122
  prerelease: false
112
- version_requirements: *12547400
123
+ version_requirements: *522630
113
124
  description: Converts 2D track exports between different apps like Flame, MatchMover,
114
125
  PFTrack...
115
126
  email: me@julik.nl
@@ -299,7 +310,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
299
310
  version: '0'
300
311
  segments:
301
312
  - 0
302
- hash: 179279919
313
+ hash: -819741475
303
314
  required_rubygems_version: !ruby/object:Gem::Requirement
304
315
  none: false
305
316
  requirements: