diff --git a/render_freestyle_svg.py b/render_freestyle_svg.py
index d88e0debda89aa398633f3d0d5e1a1ba7201e792..41f22f1819475ae87b1f5ccfb415a3efea88ec9e 100644
--- a/render_freestyle_svg.py
+++ b/render_freestyle_svg.py
@@ -151,12 +151,28 @@ def is_preview_render(scene):
 
 def create_path(scene):
     """Creates the output path for the svg file"""
-    dirname = os.path.dirname(scene.render.frame_path())
+    path = os.path.dirname(scene.render.frame_path())
+    file_dir_path = os.path.dirname(bpy.data.filepath)
+
+    # try to use the given path if it is absolute
+    if os.path.isabs(path):
+        dirname = path
+
+    # otherwise, use current file's location as a start for the relative path
+    elif file_dir_path:
+        dirname = os.path.normpath(os.path.join(file_dir_path, path))
+
+    # otherwise, use the folder from which blender was called as the start
+    else:
+        dirname = os.path.abspath(bpy.path.abspath(path))
+
+
     basename = bpy.path.basename(scene.render.filepath)
     if scene.svg_export.mode == 'FRAME':
         frame = "{:04d}".format(scene.frame_current)
     else:
         frame = "{:04d}-{:04d}".format(scene.frame_start, scene.frame_end)
+
     return os.path.join(dirname, basename + frame + ".svg")
 
 
@@ -477,7 +493,7 @@ class SVGFillBuilder:
                     break
                 # if it isn't a hole, it is likely that there are two strokes belonging
                 # to the same object separated by another object. let's try to join them
-                elif (get_object_name(base) == get_object_name(stroke) and 
+                elif (get_object_name(base) == get_object_name(stroke) and
                       diffuse_from_stroke(stroke) == diffuse_from_stroke(stroke)):
                     base = extend_stroke(base, (sv for sv in stroke))
                     break
@@ -512,7 +528,7 @@ class SVGFillBuilder:
             fills = (self.stroke_to_fill(stroke).get("d") for stroke in v)
             merged_points = " ".join(fills)
             base.attrib['d'] += merged_points
-            yield base 
+            yield base
 
     def write(self, strokes):
         """Write SVG data tree to file """
@@ -741,4 +757,3 @@ def unregister():
 
 if __name__ == "__main__":
     register()
-