diff --git a/source/creator/creator.c b/source/creator/creator.c
index 2def6c8a3ca..f240a54788f 100644
--- a/source/creator/creator.c
+++ b/source/creator/creator.c
@@ -685,10 +685,22 @@ static int render_frame(int argc, char **argv, void *data)
Scene *scene= CTX_data_scene(C);
if (argc > 1) {
- int frame = atoi(argv[1]);
Render *re = RE_NewRender(scene->id.name);
+ int frame;
ReportList reports;
+ if(*argv[1]) {
+ case '+':
+ frame= scene->r.sfra + atoi(argv[1]+1);
+ break;
+ case '-':
+ frame= (scene->r.efra - atoi(argv[1]+1)) + 1;
+ break;
+ default:
+ frame= atoi(argv[1]);
+ break;
+ }
+
BKE_reports_init(&reports, RPT_PRINT);
frame = MIN2(MAXFRAME, MAX2(MINAFRAME, frame));
@@ -966,7 +978,7 @@ void setupArguments(bContext *C, bArgs *ba, SYS_SystemHandle *syshandle)
/* fourth pass: processing arguments */
BLI_argsAdd(ba, 4, "-g", NULL, game_doc, set_ge_parameters, syshandle);
- BLI_argsAdd(ba, 4, "-f", "--render-frame", "\n\tRender frame and save it", render_frame, C);
+ BLI_argsAdd(ba, 4, "-f", "--render-frame", "\n\tRender frame and save it.\n\t+ start frame relative, - end frame relative.", render_frame, C);
BLI_argsAdd(ba, 4, "-a", "--render-anim", "\n\tRender frames from start to end (inclusive)", render_animation, C);
BLI_argsAdd(ba, 4, "-S", "--scene", "\n\tSet the active scene for rendering", set_scene, NULL);
BLI_argsAdd(ba, 4, "-s", "--frame-start", "\n\tSet start to frame (use before the -a argument)", set_start_frame, C);