Index: libs/libmythtv/previewgenerator.h
===================================================================
--- libs/libmythtv/previewgenerator.h	(revision 15771)
+++ libs/libmythtv/previewgenerator.h	(working copy)
@@ -24,8 +24,17 @@
 
     Q_OBJECT
   public:
-    PreviewGenerator(const ProgramInfo *pginfo, bool local_only = true);
+    typedef enum {
+        kNone = 0,
+        kLocal = 1,
+        kRemote = 2,
+        kLocalAndRemote = 3,
+        kModeMask = 3
+    } Mode;
 
+  public:
+    PreviewGenerator(const ProgramInfo *pginfo, Mode mode = kLocal);
+
     void SetPreviewTime(long long time, bool in_seconds)
         { captureTime = time; timeInSeconds = in_seconds; }
     void SetPreviewTimeAsSeconds(long long seconds_in)
@@ -87,7 +96,7 @@
     pthread_t          previewThread;
     ProgramInfo        programInfo;
 
-    bool               localOnly;
+    Mode               mode;
     bool               isConnected;
     bool               createSockets;
     MythSocket        *serverSock;
Index: libs/libmythtv/previewgenerator.cpp
===================================================================
--- libs/libmythtv/previewgenerator.cpp	(revision 15771)
+++ libs/libmythtv/previewgenerator.cpp	(working copy)
@@ -64,13 +64,13 @@
  *                    if the file is local.
  */
 PreviewGenerator::PreviewGenerator(const ProgramInfo *pginfo,
-                                   bool local_only)
-    : programInfo(*pginfo), localOnly(local_only), isConnected(false),
+                                   PreviewGenerator::Mode _mode)
+    : programInfo(*pginfo), mode(_mode), isConnected(false),
       createSockets(false), serverSock(NULL),      pathname(pginfo->pathname),
       timeInSeconds(true),  captureTime(-1),       outFileName(QString::null),
       outSize(0,0)
 {
-    if (IsLocal())
+    if (IsLocal() && !(mode & kRemote))
         return;
 
     // Try to find a local means to access file...
@@ -167,11 +167,11 @@
 {
     bool ok = false;
     bool is_local = IsLocal();
-    if (is_local && LocalPreviewRun())
+    if (is_local && (mode && kLocal) && LocalPreviewRun())
     {
         ok = true;
     }
-    else if (!localOnly)
+    else if (mode & kRemote)
     {
         if (is_local)
         {
@@ -194,9 +194,10 @@
 bool PreviewGenerator::Run(void)
 {
     bool ok = false;
-    if (!IsLocal())
+    bool local_ok = IsLocal() && (mode & kLocal);
+    if (!local_ok)
     {
-        if (!localOnly)
+        if (mode & kRemote)
         {
             ok = RemotePreviewRun();
         }
Index: libs/libmythtv/jobqueue.cpp
===================================================================
--- libs/libmythtv/jobqueue.cpp	(revision 15771)
+++ libs/libmythtv/jobqueue.cpp	(working copy)
@@ -2178,7 +2178,7 @@
         gContext->dispatch(me);
 
         program_info->pathname = program_info->GetPlaybackURL();
-        (new PreviewGenerator(program_info, true))->Run();
+        (new PreviewGenerator(program_info, PreviewGenerator::kLocal))->Run();
     }
 
     msg = QString("Commercial Flagging %1")
Index: libs/libmythtv/tv_play.cpp
===================================================================
--- libs/libmythtv/tv_play.cpp	(revision 15771)
+++ libs/libmythtv/tv_play.cpp	(working copy)
@@ -8173,7 +8173,7 @@
         .arg(playbackinfo->recstartts.toString("yyyyMMddhhmmss"))
         .arg((long)frameNumber);
 
-    PreviewGenerator *previewgen = new PreviewGenerator(playbackinfo, false);
+    PreviewGenerator *previewgen = new PreviewGenerator(playbackinfo, PreviewGenerator::kLocalAndRemote);
     pbinfoLock.unlock();
 
     previewgen->SetPreviewTimeAsFrameNumber(frameNumber);
Index: libs/libmythtv/tv_rec.cpp
===================================================================
--- libs/libmythtv/tv_rec.cpp	(revision 15771)
+++ libs/libmythtv/tv_rec.cpp	(working copy)
@@ -1108,7 +1108,7 @@
     {
         if (!killFile)
         {
-            (new PreviewGenerator(curRecording, true))->Start();
+            (new PreviewGenerator(curRecording, PreviewGenerator::kLocal))->Start();
 
             if (!tvchain)
             {
@@ -4383,7 +4383,7 @@
     if (oldinfo)
     {
         FinishedRecording(oldinfo);
-        (new PreviewGenerator(oldinfo, true))->Start();
+        (new PreviewGenerator(oldinfo, PreviewGenerator::kLocal))->Start();
         delete oldinfo;
     }
 
Index: programs/mythfrontend/playbackbox.cpp
===================================================================
--- programs/mythfrontend/playbackbox.cpp	(revision 15771)
+++ programs/mythfrontend/playbackbox.cpp	(working copy)
@@ -304,6 +304,7 @@
         previewVideoEnabled =gContext->GetNumSetting("PlaybackPreview");
     previewPixmapEnabled=gContext->GetNumSetting("GeneratePreviewPixmaps");
     previewFromBookmark= gContext->GetNumSetting("PreviewFromBookmark");
+    previewGeneratorMode= gContext->GetNumSetting("GeneratePreviewRemotely", 0)?PreviewGenerator::kRemote:PreviewGenerator::kLocalAndRemote;
     drawTransPixmap    = gContext->LoadScalePixmap("trans-backup.png");
     if (!drawTransPixmap)
         drawTransPixmap = new QPixmap();
@@ -4675,7 +4676,7 @@
         uint attempts = IncPreviewGeneratorAttempts(filename);
         if (attempts < PreviewGenState::maxAttempts)
         {
-            SetPreviewGenerator(filename, new PreviewGenerator(pginfo, false));
+            SetPreviewGenerator(filename, new PreviewGenerator(pginfo, (PreviewGenerator::Mode)previewGeneratorMode));
         }
         else if (attempts == PreviewGenState::maxAttempts)
         {
@@ -4742,7 +4743,7 @@
         if (attempts < PreviewGenState::maxAttempts)
         {
             VERBOSE(VB_PLAYBACK, "Starting preview generator");
-            SetPreviewGenerator(filename, new PreviewGenerator(pginfo, false));
+            SetPreviewGenerator(filename, new PreviewGenerator(pginfo, (PreviewGenerator::Mode)previewGeneratorMode));
         }
         else if (attempts == PreviewGenState::maxAttempts)
         {
Index: programs/mythfrontend/globalsettings.cpp
===================================================================
--- programs/mythfrontend/globalsettings.cpp	(revision 15771)
+++ programs/mythfrontend/globalsettings.cpp	(working copy)
@@ -2014,6 +2046,16 @@
     return gc;
 }
 
+static HostCheckBox *GeneratePreviewRemotely()
+{
+    HostCheckBox *gc = new HostCheckBox("GeneratePreviewRemotely");
+    gc->setLabel(QObject::tr("Generate preview image remotely"));
+    gc->setValue(false);
+    gc->setHelpText(QObject::tr("If enabled, the static image of the recording will "
+                    "NOT be generated on the local machine."));
+    return gc;
+}
+
 static HostCheckBox *PlayBoxTransparency()
 {
     HostCheckBox *gc = new HostCheckBox("PlayBoxTransparency");
@@ -4510,6 +4558,7 @@
     pbox->addChild(PlayBoxOrdering());
     pbox->addChild(PlayBoxEpisodeSort());
     pbox->addChild(GeneratePreviewPixmaps());
+    pbox->addChild(GeneratePreviewRemotely());
     pbox->addChild(PreviewPixmapOffset());
     pbox->addChild(PreviewFromBookmark());
     pbox->addChild(PlaybackPreview());
Index: programs/mythbackend/main.cpp
===================================================================
--- programs/mythbackend/main.cpp	(revision 15771)
+++ programs/mythbackend/main.cpp	(working copy)
@@ -319,7 +319,7 @@
         return GENERIC_EXIT_NOT_OK;
     }
 
-    PreviewGenerator *previewgen = new PreviewGenerator(pginfo, true);
+    PreviewGenerator *previewgen = new PreviewGenerator(pginfo, PreviewGenerator::kLocal);
 
     if (previewFrameNumber >= 0)
         previewgen->SetPreviewTimeAsFrameNumber(previewFrameNumber);
Index: programs/mythbackend/mythxml.cpp
===================================================================
--- programs/mythbackend/mythxml.cpp	(revision 15771)
+++ programs/mythbackend/mythxml.cpp	(working copy)
@@ -1067,7 +1067,7 @@
         // Must generate Preview Image, Generate Image and save.
         // ------------------------------------------------------------------
 
-        PreviewGenerator *previewgen = new PreviewGenerator(pInfo, true);
+        PreviewGenerator *previewgen = new PreviewGenerator(pInfo, PreviewGenerator::kLocal);
         previewgen->SetPreviewTimeAsSeconds(nSecsIn);
         previewgen->SetOutputFilename(sFileName + ".png");
         bool ok = previewgen->Run();
