Index: /cpp/frams/Makefile-SDK
===================================================================
--- /cpp/frams/Makefile-SDK	(revision 1034)
+++ /cpp/frams/Makefile-SDK	(revision 1035)
@@ -5,5 +5,5 @@
 include frams/Makefile-SDK-files
 
-SDK_TESTS=genoconv_test genomanipulation geno_test genooper_test genooper_test_fTest neuro_test loader_test_geno loader_test_param saver_test_geno serial_test multiline_f0_test f0_variants_test full_props shapeconvert part_shapes neuro_layout_test geometry_apices_test geometry_info_test geometry_surface_test geometry_volume_test simil_test simil_unittests paramtree_stdin_test paramtree_paramlist_test mutableparam_test evol_test
+SDK_TESTS=genoconv_test genomanipulation geno_test genooper_test genooper_test_fTest neuro_test loader_test_geno loader_test_param saver_test_geno serial_test multiline_f0_test f0_variants_test full_props resize_f0 shapeconvert part_shapes neuro_layout_test geometry_apices_test geometry_info_test geometry_surface_test geometry_volume_test simil_test simil_unittests paramtree_stdin_test paramtree_paramlist_test mutableparam_test evol_test
 
 sdk_tests: $(SDK_TESTS)
@@ -65,4 +65,7 @@
 	$(CXX) $(FULL_PROPS_OBJS) $(LDFLAGS) -o $@
 
+resize_f0: $(RESIZE_F0_OBJS)
+	$(CXX) $(RESIZE_F0_OBJS) $(LDFLAGS) -o $@
+
 shapeconvert: $(SHAPECONVERT_OBJS)
 	$(CXX) $(SHAPECONVERT_OBJS) $(LDFLAGS) -o $@
Index: /cpp/frams/Makefile-SDK-files
===================================================================
--- /cpp/frams/Makefile-SDK-files	(revision 1034)
+++ /cpp/frams/Makefile-SDK-files	(revision 1035)
@@ -76,4 +76,6 @@
 FULL_PROPS_OBJS= frams/_demos/full_props.o $(STDOUT_LOGGER_OBJS) common/virtfile/stdiofile.o $(SDK_OBJS) $(GENOCONV_AND_GENMAN_SDK_OBJS)
 
+RESIZE_F0_OBJS= frams/_demos/resize_f0.o $(STDOUT_LOGGER_OBJS) common/virtfile/stdiofile.o $(SDK_OBJS) $(GENOCONV_AND_GENMAN_SDK_OBJS)
+
 SHAPECONVERT_OBJS= frams/_demos/shapeconvert.o $(STDOUT_LOGGER_OBJS) common/virtfile/stdiofile.o $(SDK_OBJS) $(GENOCONV_AND_GENMAN_SDK_OBJS)
 
Index: /cpp/frams/_demos/resize_f0.cpp
===================================================================
--- /cpp/frams/_demos/resize_f0.cpp	(revision 1035)
+++ /cpp/frams/_demos/resize_f0.cpp	(revision 1035)
@@ -0,0 +1,104 @@
+// This file is a part of Framsticks SDK.  http://www.framsticks.com/
+// Copyright (C) 1999-2020  Maciej Komosinski and Szymon Ulatowski.
+// See LICENSE.txt for details.
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <time.h>
+#include <common/virtfile/stdiofile.h>
+
+#include <frams/model/model.h>
+#include <common/loggers/loggertostdout.h>
+#include <frams/genetics/preconfigured.h>
+
+/**
+ @file
+ Sample code: Resize f0 geometry
+ Usage: resize_f0 scale [genotype_or_stdin]
+
+ Examples:
+
+ # make a big X(X,X) 
+ ./shapeconvert -s3 "X(X,X)" | ./resize_f0 2 -
+
+   //0s
+   p:1.0, sh=2, sy=0.4000000059604645, sz=0.4000000059604645, rx=-1.5707963267948966, rz=3.141592653589793
+   p:2.499997879272546, -0.8660266281835431, sh=2, sy=0.4000000059604645, sz=0.4000000059604645, rz=2.0943926535897934
+   p:2.499997879272546, 0.8660266281835431, sh=2, sy=0.4000000059604645, sz=0.4000000059604645, rz=-2.0943926535897934
+   j:0, 1, sh=1
+   j:0, 2, sh=1
+
+ # make a small quadruped
+ ./loader_test data/walking.gen "Basic Quadruped" | ./shapeconvert -s3 - | ./resize_f0 0.5 -
+
+   //0s
+   p:0.25, sh=3, sx=0.25, sy=0.10000000149011612, sz=0.10000000149011612, rx=-1.5707963267948966, rz=3.141592653589793
+   p:0.4999990816987242, -0.24999999999831343, sh=3, sx=0.24999999999999997, sy=0.10000000149011612, sz=0.10000000149011612, rz=1.5707926535897934
+   p:0.3468893514573017, -0.6249989074155372, -0.1530782964706476, sh=3, sx=0.24999999999999997, sy=0.10000000149011612, sz=0.10000000149011612, rx=1.1072319391268979, 0.6589830922573491, 0.68466467448983
+   p:0.75, sh=3, sx=0.25, sy=0.10000000149011612, sz=0.10000000149011612, rx=-1.5707963267948966, rz=3.141592653589793
+   p:0.9999990816987241, -0.24999999999831343, sh=3, sx=0.24999999999999997, sy=0.10000000149011612, sz=0.10000000149011612, rz=1.5707926535897931
+   p:1.153106057040214, -0.6250000322123028, -0.1530782964706476, sh=3, sx=0.24999999999999994, sy=0.10000000149011612, sz=0.10000000149011612, rx=-1.1072259414054058, 0.6589830922573492, 2.4569206326897564
+   p:0.9999990816987241, 0.24999999999831343, sh=3, sx=0.24999999999999997, sy=0.10000000149011612, sz=0.10000000149011612, rz=-1.5707926535897931
+   p:1.153106057040214, 0.6250000322123028, -0.1530782964706476, sh=3, sx=0.24999999999999994, sy=0.10000000149011612, sz=0.10000000149011612, rx=-2.0343667121843874, 0.6589830922573492, -2.4569206326897564
+   p:0.4999990816987242, 0.24999999999831343, sh=3, sx=0.24999999999999997, sy=0.10000000149011612, sz=0.10000000149011612, rz=-1.5707926535897934
+   p:0.3468893514573017, 0.6249989074155372, -0.1530782964706476, sh=3, sx=0.24999999999999997, sy=0.10000000149011612, sz=0.10000000149011612, rx=2.0343607144628955, 0.6589830922573491, -0.68466467448983
+   j:0, 1, sh=1
+   j:0, 3, sh=1
+   j:0, 8, sh=1
+   j:1, 2, sh=1
+   j:3, 4, sh=1
+   j:3, 6, sh=1
+   j:4, 5, sh=1
+   j:6, 7, sh=1
+   j:8, 9, sh=1
+
+*/
+
+int main(int argc, char*argv[])
+{
+	StdioFILE::setStdio(); //setup VirtFILE::Vstdin/out/err
+	LoggerToStdout messages_to_stderr(LoggerBase::Enable | LoggerBase::DontBlock, VirtFILE::Vstderr); //errors -> stderr, don't interfere with stdout
+
+	PreconfiguredGenetics genetics;
+
+	if (argc<2)
+	{
+		printf("Usage: %s scale [genotype_or_stdin]\n", argv[0]);
+		return 1;
+	}
+
+	double scale = atof(argv[1]);	
+	SString gen;
+	if ((argc>=3) && (strcmp(argv[2],"-")!=0))
+		gen = argv[2];
+	else
+		loadSString(VirtFILE::Vstdin, gen);
+	Geno g(gen);
+	Model m(g, Model::SHAPETYPE_UNKNOWN);
+
+	if (!m.isValid())
+	{
+		logPrintf(argv[0], "main", LOG_ERROR, "Cannot build Model from the supplied genotype.\n");
+		return 2;
+	}
+
+	m.open();
+	for (int i = 0; i < m.getPartCount(); i++)
+	{
+		auto *p = m.getPart(i);
+		p->p *= scale;
+		if (m.getShapeType()==Model::SHAPETYPE_SOLIDS)
+			p->scale *= scale;
+	}
+	for (int i = 0; i < m.getJointCount(); i++)
+	{
+		auto *j = m.getJoint(i);
+		if (j->isDelta())
+			j->d *= scale;
+	}
+	m.close();
+
+	puts(m.getF0Geno().getGenesAndFormat().c_str());
+
+	return 0;
+}
Index: /cpp/tests/SDK-tests.txt
===================================================================
--- /cpp/tests/SDK-tests.txt	(revision 1034)
+++ /cpp/tests/SDK-tests.txt	(revision 1035)
@@ -258,4 +258,22 @@
 ################################## another executable... ##################################
 
+TESTNAME:resize_f0
+exe:resize_f0
+out:*INSERTPLATFORMDEPENDENTFILE*:resize_f0
+arg:0.33
+arg:-
+in://0s
+in:p:1.0, sh=2, sy=0.4000000059604645, sz=0.4000000059604645, rx=-1.5707963267948966, rz=3.141592653589793
+in:p:2.499997879272546, -0.8660266281835431, sh=2, sy=0.4000000059604645, sz=0.4000000059604645, rz=2.0943926535897934
+in:p:2.499997879272546, 0.8660266281835431, sh=2, sy=0.4000000059604645, sz=0.4000000059604645, rz=-2.0943926535897934
+in:j:0, 1, sh=1
+in:j:0, 2, sh=1
+in:n:d=*
+in:n:d=N
+in:c:1,0,1.234
+RUNTEST
+
+################################## another executable... ##################################
+
 exe:evol_test
 
