diff --git a/README.md b/README.md
index 4cc9b8e5..21709a81 100644
--- a/README.md
+++ b/README.md
@@ -1,6 +1,6 @@
# MightyScape for Inkscape 1.0+
-In short: A maintained extension collection for Inkscape 1.0+, working on Windows and Linux. There are **221 extension folders** with **388 .inx files** inside. We also take part at https://inkscape.org/gallery/=extension/ (with single extension uploads).
+In short: A maintained extension collection for Inkscape 1.0+, working on Windows and Linux. There are **224 extension folders** with **395 .inx files** inside. We also take part at https://inkscape.org/gallery/=extension/ (with single extension uploads).
# About MightyScape
diff --git a/extensions/fablabchemnitz/frame_animation_sequence/frame_animation_sequence.inx b/extensions/fablabchemnitz/frame_animation_sequence/frame_animation_sequence.inx
new file mode 100644
index 00000000..fa2e83ac
--- /dev/null
+++ b/extensions/fablabchemnitz/frame_animation_sequence/frame_animation_sequence.inx
@@ -0,0 +1,19 @@
+
+
+ Frame Animation Sequence
+ fablabchemnitz.de.frame_animation_sequence
+ 0
+ indefinite
+ 9.1
+
+ all
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/extensions/fablabchemnitz/frame_animation_sequence/frame_animation_sequence.py b/extensions/fablabchemnitz/frame_animation_sequence/frame_animation_sequence.py
new file mode 100644
index 00000000..a9ae57ce
--- /dev/null
+++ b/extensions/fablabchemnitz/frame_animation_sequence/frame_animation_sequence.py
@@ -0,0 +1,105 @@
+#!/usr/bin/env python
+# coding=utf-8
+#
+# Copyright (C) 2021 roberta bennett repeatingshadow@protonmail.com
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+#
+"""
+Create svg path animation from frames.
+
+Place each frame of the animation in a layer named 'frame'.
+Each of these layers should have the same number of paths,
+and each path should have the same number of points as the corresponding
+path in other layers.
+
+The animation is applied to the paths in the first layer in the sequence, so the
+properties of that layer are used.
+
+Animations with different numbers of frames can be put into different sequences,
+named 'sequence', using sub-groups:
+
+Layers:
+ not_animated_layer1
+ sequence
+ frame
+ path1a
+ path2a
+ frame
+ path1b
+ path2b
+ frame
+ path1c
+ path2c
+ frame
+ path1d
+ path2d
+ sequence
+ frame
+ frame
+ frame
+
+
+use layer named exactly 'frame' and groups named exactly 'sequence',
+not, eg, frame1 frame2 frame3 !
+
+"""
+
+import inkex
+
+class AnimateElement(inkex.BaseElement):
+ """animation Elements do not have a visible representation on the canvas"""
+ tag_name = 'animate'
+ @classmethod
+ def new(cls, **attrs):
+ return super().new( **attrs)
+
+
+class AnimationExtension(inkex.EffectExtension):
+
+ def add_arguments(self, pars):
+ pars.add_argument("--begin_str", default="0", help="begin string: eg 0;an2.end;an3.begin")
+ pars.add_argument("--repeat_str", default="indefinite", help="indefinite or an integer")
+ pars.add_argument("--dur_str", default="7.9", help="duration in seconds. Do not decorate with units")
+
+
+ def effect(self):
+ sequences = self.svg.findall("svg:g[@inkscape:label='sequence']")
+ if len(sequences) == 0:
+ raise inkex.AbortExtension("layer named sequence does not exist.")
+ for sequence in sequences:
+ frames = sequence.findall("svg:g[@inkscape:label='frame']")
+ if len(frames) == 0:
+ raise inkex.AbortExtension("layer named frame does not exist.")
+ frame0paths = frames[0].findall('svg:path')
+ Dlists = [p.get_path() for p in frame0paths]
+ for frame in frames[1:]:
+ paths = frame.findall("svg:path")
+ for i,p in enumerate(paths):
+ Dlists[i] += ";\n"+p.get_path()
+ for i,dl in enumerate(Dlists):
+ animel = AnimateElement(
+ attributeName="d",
+ attributeType="XML",
+ begin=self.options.begin_str,
+ dur=self.options.dur_str,
+ repeatCount=self.options.repeat_str,
+ values=dl)
+ frame0paths[i].append(animel)
+
+if __name__ == '__main__':
+ AnimationExtension().run()
+
+
diff --git a/extensions/fablabchemnitz/frame_animation_sequence/meta.json b/extensions/fablabchemnitz/frame_animation_sequence/meta.json
new file mode 100644
index 00000000..ef385237
--- /dev/null
+++ b/extensions/fablabchemnitz/frame_animation_sequence/meta.json
@@ -0,0 +1,20 @@
+[
+ {
+ "name": "Frame Animation Sequence",
+ "id": "fablabchemnitz.de.frame_animation_sequence",
+ "path": "frame_animation_sequence",
+ "original_name": "Animate Extension",
+ "original_id": "org.inkscape.katkitty.animate",
+ "license": "GNU GPL v2",
+ "license_url": "https://github.com/yttiktak/inkscape_extension_animate/blob/main/AnimationExtension.py",
+ "comment": "",
+ "source_url": "https://gitea.fablabchemnitz.de/FabLab_Chemnitz/mightyscape-1.X/src/branch/master/extensions/fablabchemnitz/frame_animation_sequence",
+ "fork_url": "https://github.com/yttiktak/inkscape_extension_animate",
+ "documentation_url": "https://stadtfabrikanten.org/display/IFM/Frame+Animation+Sequence",
+ "inkscape_gallery_url": null,
+ "main_authors": [
+ "https://github.com/yttiktak",
+ "github.com/vmario89"
+ ]
+ }
+]
\ No newline at end of file
diff --git a/extensions/fablabchemnitz/tab_generator/tab_generator.inx b/extensions/fablabchemnitz/tab_generator/tab_generator.inx
index 841846ca..c95fbcf7 100644
--- a/extensions/fablabchemnitz/tab_generator/tab_generator.inx
+++ b/extensions/fablabchemnitz/tab_generator/tab_generator.inx
@@ -6,7 +6,7 @@
45.00
- 0.40
+ 0.400
0.1