Use the console commands recordnetdemo demo_name, recorddemo demo_name,  playnetdemo  demo_name, playdemo  demo_name and
  playdemo stop. Example: Multiplayer (Smaller Demo Files)
recordnetdemo uc_vs_uc // starts demo recording
stopnetdemo // stops demo recording

playnetdemo uc_vs_uc // starts demo playing
stopnetdemo stop // stops demo playing 

Singleplayer
recorddemo UCLevel1Tips // starts demo recording
stoprecording // stops demo recording
 Singleplayer Demo Recording Benchmark 1) Load Quake 4 using the shortcut that enables the console 2) Open the console using the ' key below ESC or  press CTRL+ALT+~ (US Keyboards) or CTRL+ALT+' (UK Keyboards) 3) Enter the command timedemo ??DemoName??  usecache 4) Wait until demo has finished and note your FPS Multiplayer Demo Recording Benchmark 1) Load Quake 4 using the shortcut that enables the console 2) Open the console using the ' key below ESC  or press CTRL+ALT+~ (US Keyboards) or CTRL+ALT+' (UK Keyboards) 3) Enter the command playnettimedemo id_demo001 4) Wait until demo has finished and note your FPS demo1 idio: 23.69 fps dude 30.35 (10.4.6) dude 34.31 (XP SP2) autoexec.cfg seta r_useSMP "1" bind o "toggle r_lightDetailLevel 0 3 5 7 9;addChatLine 'LightDetailLevel';addChatLine $r_lightDetailLevel" bind o "seta r_lightDetailLevel 9" seta image_downSizeLimit "16" seta image_downSizeBumpLimit "16" seta image_downSizeSpecularLimit "4" seta image_downSize "1" seta image_downSizeBump "1" seta image_downSizeSpecular "1" seta r_brightness 1.4 seta image_usePrecompressedTextures "1" seta image_useCompression "1" seta image_downSizeLimit "1024" seta image_ignoreHighQuality "1" seta image_downSizeBumpLimit "1024" seta image_downSizeSpecularLimit "256" seta image_downSizeBump "1" seta image_downSizeSpecular "1" seta image_downSize "1" seta image_lodbias "0" seta image_preload "1" seta r_useCachedDynamicModels "1" seta r_skipBump "1" seta r_skipPostProcess "1" seta r_skipSpecular "1" seta r_skipNewAmbient "1" seta r_multiSamples "0" seta r_useFastSkinning "1" seta r_shadows "0" seta r_useOptimizedShadows "1" seta r_useTurboShadow "1" seta g_projectilelights "0" seta g_skipParticles "0" seta g_decals "0" seta g_brassTime "0" seta g_muzzleFlash "0" seta g_doublevision "0" seta g_showPlayerShadow "0" seta g_skipItemShadowsMP "1" seta g_skipPlayerShadowsMP "1" seta image_anisotropy "0" seta ui_showGun "0" seta image_filter "GL_LINEAR_MIPMAP_NEAREST" seta s_maxSoundsPerShader "0"