{"id":10058,"date":"2020-09-23T11:59:12","date_gmt":"2020-09-23T15:59:12","guid":{"rendered":"http:\/\/www.theartofretouching.com\/blog\/?p=10058"},"modified":"2024-04-08T21:10:07","modified_gmt":"2024-04-09T01:10:07","slug":"color-modes-and-color-profiles","status":"publish","type":"post","link":"https:\/\/www.theartofretouching.com\/blog\/color-modes-and-color-profiles\/","title":{"rendered":"What are Color Profiles and Color Modes in Photoshop?"},"content":{"rendered":"<h2><strong>What are Color Profiles Photoshop? | What are Color Modes Photoshop?<\/strong><\/h2>\n<p><em>This video is available <strong>with Free For All<\/strong>.<\/em><br \/>\n<em><strong>Running Time<\/strong>: 11 minutes<\/em><\/p>\n<p>My name is John Ross from The Art of Retouching Studio. In this video I want to clear up the usual common misconceptions about <b>Color Modes, Color Models, Color Profiles,<\/b> and <b>Color Spaces<\/b>. Give me a few minutes of your time, and you will no longer be confused by it.<\/p>\n<p>The base cause of this confusion stems from my research in this topic. Half the websites say one thing, and the other half say something else. Rest assured that I am a qualified professional. I\u2019ve done my research, and this is the correct information.<\/p>\n<p><!--more--><\/p>\n<div style=\"position: relative; top: 15px;\">\n\r\n\r\n<style>\r\n    \r\n\/* FOLLOWING TWO SHOULD HAVE SAME COLOR - videoControlBarColor *\/\r\n\/* Background color of control bar and big play button *\/\r\n#video1 .vjs-big-play-button {\r\n    border-color: #efefef  !important;\r\n    background-color: #333333 !important;\r\n    font-size: 20px !important;\r\n    opacity: .7;\r\n     }\r\n    \r\n    \r\n\r\n\/* Color of control bar *\/\r\n#videocontent1 .vjs-control-bar button {\r\n    background: unset !important;\r\n}    \r\n\r\n\r\n#videocontent1 .vjs-matrix .vjs-control-bar {\r\n    background: #333333 !important;\r\n    opacity: 1.0 !important;\r\n} \r\n\r\n\/* FOLLOWING TWO SHOULD HAVE SAME COLOR - videoMainColor *\/\r\n\/* Color of all text, icons and \"play\" triangle *\/\r\n#videocontent1 .vjs-default-skin {\r\n    color: #efefef !important; \r\n    overflow: hidden !important;\r\n            font-size: 10px !important;\r\n    }\r\n    \r\n\/* Change the color of various \"bars\" text: Scrubber and Volume - make it same as bg color of big play button*\/\r\n#videocontent1 .vjs-matrix .vjs-volume-level,\r\n#videocontent1 .vjs-matrix .vjs-play-progress,\r\n#videocontent1 .vjs-matrix .vjs-slider-bar\r\n{\r\n    background: #efefef !important;\r\n}\r\n    \r\ndiv#videocontent1 {\r\n    display: block !important;\r\n}    \r\n\r\n    \r\n                    \r\n\r\n\r\n\/* Style inner div to center button *\/\r\n.inner {\r\n    left: 50%;\r\n    top: 10%;\r\n    transform: translate(-50%, -50%);\r\n    position: absolute;\r\n}    \r\n    \r\n    \r\n\r\n        \/* hide the captions settings item from the captions menu *\/\r\n        .video1.vjs-texttrack-settings {\r\n            display: none;\r\n        }\r\n        \r\n    #videocontent1 .vjs-menu-button-popup .vjs-menu .vjs-menu-content {\r\n        background-color: #333333 !important;\r\n        color: #efefef !important;\r\n        padding: 0px !important;\r\n        margin: 0px !important;\r\n        max-height: none !important;\r\n    }\r\n    \r\n    #videocontent1 .vjs-menu-content li {\r\n        list-style: none !important;\r\n    }\r\n    \r\n    #videocontent1 li.vjs-menu-item {\r\n        margin-bottom: 0px !important;\r\n        margin: 0px !important;\r\n    }\r\n    \r\n    #videocontent1 .vjs-control .vjs-button {\r\n        padding-left: 0px !important;\r\n        padding-right: 0px !important;\r\n        margin-left: 0px !important;\r\n        padding:0px !important;\r\n    }\r\n    \r\n    #videocontent1 .vjs-playback-rate-value {\r\n        margin-right: 0em;\r\n    }\r\n    \r\n    #videocontent1 .vjs-playback-rate {\r\n        margin-right: 0em;\r\n    }\r\n        \r\n\r\n    \r\n#videocontent1 .vjs-user-inactive .vjs-control-bar {\r\n    display: none !important;\r\n    visibility: hidden !important;\r\n    opacity: 0 !important;\r\n    cursor: none !important;\r\n}\r\n    \r\n\/**\r\n#videocontent1 .vjs-big-play-button {\r\n    border: 0px !important;\r\n}\r\n*\/\r\n    \r\n#videocontent1 .vjs-play-control {\r\n    border: 0px !important;\r\n}\r\n    \r\n#videocontent1 .vjs-mute-control {\r\n    border: 0px !important;\r\n}\r\n\r\n#videocontent1 .vjs-control {\r\n    border: 0px !important;\r\n}\r\n\r\n#videocontent1 .vjs-button {\r\n    padding: 0px !important;\r\n    border: 0px !important;\r\n}    \r\n    \r\n#videocontent1 .vjs-picture-in-picture-control {\r\n    display: none !important;\r\n    visibility: hidden !important;\r\n    opacity: 0 !important;\r\n    cursor: none !important;\r\n}\r\n    \r\n    \r\n\r\n.video-js-dimensions.vjs-fluid { \r\n    padding-top: 56.25%;\r\n }\r\n.video-js { padding-top: 56.25%; }\r\n    \r\n    \r\n    \r\n<\/style>\r\n\r\n<script>\r\n\r\n    var watermarkCounter = 1;\r\n    \r\n    function setCookie(name, value, daysToExpire) {\r\n        \/\/console.log(\"setCookie\");\r\n        var expires = \"\";\r\n        if (daysToExpire) {\r\n            var date = new Date();\r\n            date.setTime(date.getTime() + (daysToExpire * 24 * 60 * 60 * 1000));\r\n            expires = \"; expires=\" + date.toUTCString();\r\n        }\r\n        document.cookie = name + \"=\" + value + expires + \"; path=\/\";\r\n    }\r\n    \r\n    function getCookie(cookieName) {\r\n        const cookies = document.cookie.split(';');\r\n\r\n        for (const cookie of cookies) {\r\n            const [name, value] = cookie.trim().split('=');\r\n            if (name === cookieName) {\r\n                return decodeURIComponent(value);\r\n            }\r\n        }\r\n\r\n        return null; \/\/ Cookie not found\r\n    }\r\n\r\n<\/script>\r\n\r\n\r\n        <!-- <link href=\"https:\/\/www.theartofretouching.com\/blog\/wp-content\/plugins\/S3MediaVaultPro\/includes\/css\/video-js-2.min.css\" rel=\"stylesheet\"> -->\r\n        <link href=\"https:\/\/www.theartofretouching.com\/blog\/wp-content\/plugins\/S3MediaVaultPro\/includes\/css\/videojs.watermark.css\" rel=\"stylesheet\">\r\n        \r\n        <!-- <script src=\"https:\/\/www.theartofretouching.com\/blog\/wp-content\/plugins\/S3MediaVaultPro\/includes\/javascript\/video-2.js\"><\/script> -->\r\n        <script src=\"https:\/\/www.theartofretouching.com\/blog\/wp-content\/plugins\/S3MediaVaultPro\/includes\/javascript\/videojs.watermark.js\"><\/script>\r\n        \r\n        <div id=\"videoparent1\">\r\n            <div id=\"videocontent1\" class=\"video-wrap\">\r\n                                    <video N id=\"video1\"  oncontextmenu=\"return false;\" class=\"vjs-matrix video-js-responsive-container video-js  vjs-16-9  vjs-default-skin vjs-big-play-centered\"  controls  preload=\"metadata\"  width=\"800\" height=\"450\"   poster=\"https:\/\/www.theartofretouching.com\/blog\/wp-content\/uploads\/2020\/09\/maxresdefault-1.jpg\"  data-setup='{\"fluid\": true   ,\"playbackRates\": [0.5, 0.75, 1, 1.25, 1.5, 1.75, 2]  }' playsinline>\r\n                        <source src=\"https:\/\/aor-public.s3.amazonaws.com\/Basic_1\/1-Digital_Fundamentals\/videos\/1_Df_4_Color_Modes_And_Color_Profiles.mp4?X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIATFRWUZAOT3CJXS7C%2F20260914%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20260914T042232Z&X-Amz-SignedHeaders=host&X-Amz-Expires=1000&X-Amz-Signature=74a43fc742414deec7d0c1609791d5f7493164fc72dc5c2c144dc7cf8eb4ca0a\" type=\"video\/mp4\" \/>\r\n                                            <\/video>\r\n                                                 <\/div>\r\n    <\/div>\r\n\r\n        \r\n                \r\n        <style>\r\n    \r\n    .vjs-fullscreen { padding-top: 0px }\r\n\r\n        \r\n    .buttonClass {\r\n        display: flex;\r\n        justify-content: center;\r\n        align-items: center;\r\n        vertical-align: baseline;\r\n        padding: 0px;\r\n    }\r\n\r\n                div1.vjs-watermark {\r\n                bottom: 30px !important;\r\n                top: unset !important;\r\n                right: 0 !important;\r\n                left: unset !important;\r\n            }\r\n         \r\n<\/style>\r\n\r\n<!-- JavaScript Start -->\r\n<script>\r\n    \r\n\/* <![CDATA[ *\/\r\nvar threshold1;\r\nvar ajaxurl = \"https:\/\/www.theartofretouching.com\/blog\/wp-admin\/admin-ajax.php\";\r\nvar promise;\r\n\r\nvar player1 = videojs('video1',{\r\n  width: \"800\",\r\n  height: \"450\"\r\n});\r\n\t\r\nplayer1.bigPlayButton.on('click', function(){\r\n\tif (player1.paused()) {\r\n\t\tplayer1.play();\r\n\t} \r\n\t\t\r\n});\r\n    \r\nvar div1;\r\n\r\n\r\n\r\nvar hasBeenClosed = false;\r\n       \r\n        function closePIP() {\r\n            var $videoWrap = jQuery('.video-wrap');\r\n            var $video = jQuery('.video');\r\n            var $closeButton = jQuery('.closeButton')\r\n\r\n            $videoWrap.height('auto');\r\n            $video.removeClass('stuck');\r\n            $closeButton.removeClass('closeShowing');\r\n            $closeButton.addClass('closeHidden');\r\n\r\n            hasBeenClosed = true;\r\n            player1.pause();\r\n            videojs('video1', { inactivityTimeout: 0 });\r\n            player1.bigPlayButton.show();\r\n\r\n        }\r\n    \r\njQuery(document).ready(function($) {\r\n    \r\n    jQuery(\"#closeButton\").hide();\r\n    var $window = jQuery(window);\r\n    var $videoWrap = jQuery('.video-wrap');\r\n    var $video = jQuery('.video');\r\n    var videoHeight = $video.outerHeight();\r\n    var $closeButton = jQuery('.closeButton')\r\n\r\n    $window.on('scroll',  function() {\r\n        var windowScrollTop = $window.scrollTop();\r\n        var videoBottom = videoHeight + $videoWrap.offset().top;\r\n\r\n        if ( (windowScrollTop > videoBottom) && !hasBeenClosed ) {\r\n            $videoWrap.height(videoHeight);\r\n            $video.addClass('stuck');\r\n            \/\/$closeButton.removeClass('closeHidden');\r\n            \/\/$closeButton.removeClass('closeHidden');\r\n            \/\/$closeButton.addClass('closeShowing');\r\n            \/\/$closeButton.display('block');                            \r\n            jQuery(\"#closeButton\").show();\r\n        } else {\r\n            $videoWrap.height('auto');\r\n            $video.removeClass('stuck');\r\n            jQuery(\"#closeButton\").hide();\r\n        }\r\n\r\n        \/\/console.log(\"videoHeight: \" + videoHeight + \", windowScrollTop: \" + windowScrollTop + \", videoBottom: \" + videoBottom);\r\n\r\n    });\r\n\r\n\/\/hideWatermarkOnLoad1();\r\n    \/\/alert(jQuery(window).width() + \", \" + jQuery(window).height());\r\n    div = document.getElementsByClassName(\"vjs-watermark\")[1-1];\r\n    if (div) {\r\n        \/\/div.style.display = \"none\";\r\n    }\r\n\r\n        \r\n        if(jQuery(window).width() >= 500) {\r\n            var skipBehindButton1 = player1.controlBar.addChild(\"button\", {}, 2);\r\n            var skipBehindButtonDom1 = skipBehindButton1.el();\r\n            skipBehindButtonDom1.innerHTML = \"<<\";\r\n            skipBehindButtonDom1.title = \"Rewind 15 Seconds\";\r\n            skipBehindButton1.addClass(\"buttonClass\");\r\n            skipBehindButtonDom1.onclick = function(){\r\n                skipS3MV1(-15);\r\n            }  \r\n\r\n            var skipAheadButton1 = player1.controlBar.addChild(\"button\", {}, 3);\r\n            var skipAheadButtonDom1 = skipAheadButton1.el();\r\n            skipAheadButtonDom1.innerHTML = \">>\";\r\n            skipAheadButtonDom1.title = \"Fast-Forward 15 Seconds\";\r\n            skipAheadButton1.addClass(\"buttonClass\");\r\n            skipAheadButtonDom1.onclick = function() {\r\n                skipS3MV1(15);\r\n            }  \r\n        }\r\n    \r\n        \r\n}); \/\/End jQuery(document).ready\r\n    \r\n\r\nfunction skipS3MV1(skipBy) {\r\n    player1.currentTime(player1.currentTime() + skipBy);\r\n}\r\n\r\n\r\nfunction getDomainName(hostName) {\r\n    return hostName.substring(hostName.lastIndexOf(\".\", hostName.lastIndexOf(\".\") - 1) + 1);\r\n}\r\n\r\n    \r\nfunction unmuteAndPlayFromStart2() {\r\n    var player1;\r\n    if(player1 == null) {\r\n        player1 = videojs(\"video1\");\r\n    }\r\n\r\n    if( (player1.muted()) && (timesMuted == 1) ) {\r\n        player1.watermark({\r\n          file: '',\r\n          xpos: 1,\r\n          ypos: 0,\r\n          xrepeat: 0,\r\n          opacity: 0,\r\n          url: '',\r\n          clickable: false,\r\n          text: false,\r\n          textContent: '',\r\n          fontSize: 0,\r\n          fontColor: '',\r\n          fontBGColor: ''\r\n        });    \r\n\r\n                player1.currentTime(0);\r\n        player1.muted(false);\r\n        player1.play();\r\n    }\r\n    timesMuted++;\r\n}\r\n\r\n\r\nfunction unmuteAndPlayFromStart1(player1) {\r\n    \/\/var player1;\r\n    if(player1 == null) {\r\n        player1 = videojs(\"video1\");\r\n    }\r\n    \/\/alert(timesMuted);\r\n        player1.currentTime(0);\r\n    player1.muted(false);\r\n    player1.play();\r\n}\r\n\r\n    \r\nfunction roundUpToAny(n,x=15) {\r\n    return Math.round((n+x\/2)\/x)*x;\r\n}\r\n            \r\n    \r\nvideojs(\"video1\").ready(function() {\r\n    \/\/console.log(\"Videojs Ready - should be called only once\");\r\n\tvar player1 = videojs(\"video1\");\r\n    var userIdAnon = 0;\r\n    var videoId = 76;\r\n    var anonTracking = \"N\";\r\n    var captions = localStorage.getItem('captions');\r\n    \/\/console.log(\"captions on load: \" + captions);\r\n    \r\n    if(captions === null) captions = \"on\";\r\n    \r\n    \r\n    var preferredLang = localStorage.getItem('caption-language');\r\n    let tracks = player1.textTracks();\r\n    var trackList = Array.prototype.slice.call(tracks);\r\n    var activeTrack = Array.from(tracks).find(track => track.mode === 'showing');\r\n    \/\/localStorage.setItem('caption-language', activeTrack.language);  \r\n    \/\/console.log(\"currently active language: \" + activeTrack.language);\r\n    \/\/console.log(\"preferredLang on load: \" + preferredLang);\r\n    var preferredLangIsSet = false;\r\n    \r\n    \/\/tracks.addEventListener('change', storeLanguageChoice);\r\n    \/\/var initialTrackLanguageChange = true;\r\n    \r\n    \/\/var videoEl1 = player1.el();\r\n\r\n    \r\n    var savedSpeed = localStorage.getItem('videoSpeed');\r\n    \/\/console.log(\"savedSpeed on load: \" + savedSpeed);\r\n    \r\n    if (savedSpeed) {\r\n        this.playbackRate(savedSpeed);\r\n    }\r\n    \r\n    \r\n    \/\/activeTrack = Array.from(tracks).find(track => track.mode === 'showing');\r\n    \/\/console.log(\"currently active language: \" + activeTrack.language);\r\n    \r\n    function setupTextTracks() {\r\n        \/\/console.log(\"in setupTextTracks\");\r\n        \/\/ If preferredLang found, get track and enable it\r\n        if( preferredLang && (captions === \"on\") ) {\r\n            \/\/console.log(\"preferredLang is set: \" + preferredLang);\r\n            tracks = player1.textTracks();\r\n            \/\/var targetTrack = Array.from(tracks).find(track => track.language === preferredLang);\r\n            \r\n            \/\/console.log(\"targetTrack mode: \" + targetTrack.mode);\r\n            \r\n            for (var i = 0; i < tracks.length; i++) {\r\n                var track = tracks[i];\r\n\r\n                \/\/ Check if the track is a captions track and if the language is German ('de')\r\n                if (track.kind === 'captions' && track.language === preferredLang) {\r\n                    \/\/console.log(\"Yes, match found\");\r\n                    track.mode = 'showing'; \/\/ Show the German captions\r\n                } else {\r\n                    track.mode = 'disabled'; \/\/ Hide other caption tracks\r\n                }\r\n            }\r\n            \r\n            preferredLangIsSet = true;\r\n        } \r\n    }\r\n    \r\n    \r\n    \/\/Can be moved to end??\r\n    \/\/Remembering Captions Settings on User Change\r\n    player1.textTracks().addEventListener('change', function() {\r\n        \/\/console.log(\"User changed captions settings\");\r\n\r\n        var tracks = player1.textTracks(); \r\n        \r\n        \/\/ Convert to array\r\n        var trackList = Array.prototype.slice.call(tracks);\r\n\r\n        \/\/ Check if captions are disabled \r\n        \/\/ I.e. no tracks in 'showing' mode\r\n        var disabled = !trackList.some(function(track) {\r\n            return track.mode === 'showing';  \r\n        });\r\n\r\n        if(disabled) {\r\n            \/\/ Captions were just set to off \r\n            localStorage.setItem('captions', 'off');\r\n            \/\/console.log('Captions disabled');\r\n        } else {\r\n            localStorage.setItem('captions', 'on');\r\n            \/\/console.log('Captions ENABLED');\r\n        }\r\n        \r\n        \r\n        if( captions === \"on\" ) {\r\n            trackList = Array.prototype.slice.call(tracks);\r\n            activeTrack = Array.from(tracks).find(track => track.mode === 'showing');\r\n            \/\/console.log(\"in User changed captions settings: active language: \" + activeTrack.language);\r\n            localStorage.setItem('caption-language', activeTrack.language);  \r\n        }\r\n\r\n    });\r\n    \r\n        \r\n    timesMuted = 0;\r\n    var button = document.createElement(\"button\");\r\n    button.setAttribute(\"id\", \"muteButton\");\r\n    var buttonRemoved = false;\r\n    var endTime = 0;\r\n\tvar restartedOnce = false;\r\n    \r\n    \/\/Disable full screen zand remove full screen on double click\r\n        \r\n\tthis.on('volumechange', function(){\r\n\t\ttimesMuted++;\r\n        \/\/alert(\"volume change \" + timesMuted);\r\n        if( !buttonRemoved && (timesMuted == 10000) ) {\r\n\t\t   \t\/\/alert(\"inside\");\r\n\t\t\tvideo1.removeChild(button);\r\n\t\t\t\/\/document.getElementById(\"muteButton\").remove();\r\n\t\t\tbuttonRemoved = true;\r\n\t\t   \tif(restartedOnce == false) {\r\n\t\t\t\tunmuteAndPlayFromStart1(player1);\r\n\t\t\t\trestartedOnce = true;\r\n\t\t\t}\r\n        }        \r\n    });\r\n    \r\n        \r\n    \r\n\r\n    \r\n    this.on('click', function(evt) {\r\n        \/\/console.log(\"video clicked, \" + evt.target.tagName);\r\n        if (evt.target.tagName === 'VIDEO') {\r\n            \/\/alert(\"after click unmuteAndPlayFromStart1(player1)\");\r\n            \/\/document.getElementsByTagName.removeChild(button);\r\n            if(!buttonRemoved) {\r\n                if(document.getElementById(\"muteButton\")) {\r\n                    document.getElementById(\"muteButton\").remove();\r\n                    buttonRemoved = true;\r\n                    if(restartedOnce == false) {\r\n\t\t\t\t\t\tunmuteAndPlayFromStart1(player1);\r\n\t\t\t\t\t\trestartedOnce = true;\r\n\t\t\t\t\t}\r\n                }\r\n            }\r\n        }\r\n        \r\n        \r\n    });\r\n    \r\n    this.on('pause', function() {\r\n        div = document.getElementsByClassName(\"vjs-watermark\")[1-1];\r\n        if (div) {\r\n            div.style.display = \"none\";\r\n        }\r\n        jQuery('#video1 .vjs-big-play-button').css('display', 'block');\r\n    });\r\n    \r\n        \r\n\tvar threshold1 = 15;\r\n\tvar counter1 = threshold1;\r\n    var duration1 = 677;\r\n    \r\n    \/\/Track loading time\r\n    \/\/console.log(\"ping 1: trackLoads\");\r\n\tvar data = {\r\n\t\t'action': 'trackLoads',\r\n\t\t'videoId': 76,\r\n\t\t'playTime': 0,\r\n        'event': 'load',\r\n        'postId': 10058\t};\r\n    \r\n\tjQuery.post(ajaxurl, data, function(response) { });\r\n    \r\n    st1 = -1;\r\n    et1 = 99999;\r\n    \/\/alert(\"st1: \" + st1 + \", et1: \" + et1);\r\n    playTime1 = 0;\r\n    playTimeCurrent1 = 0;\r\n    \r\n    if( (userIdAnon == 0) && (anonTracking == \"Y\") && (videoId == getCookie(\"videoIdAnon\")) ) {\r\n        playTimeAnon = getCookie(\"playTimeAnon\");\r\n        \/\/console.log(\"playTimeAnon from getCookie: \" + playTimeAnon); \r\n        \/\/console.log(\"videoId: \" + videoId);\r\n        playTimeCurrent1 = playTimeAnon;\r\n    }\r\n    \r\n    \/\/console.log(\"playTime1: \" + playTime1);\r\n    \/\/console.log(\"playTimeCurrent1: \" + playTimeCurrent1);\r\n    \r\n    \/\/console.log(parseInt(st1));\r\n    if(parseInt(st1) >= 0 ) {\r\n        playTimeCurrent1 = parseInt(st1);\r\n    }\r\n    this.currentTime(playTimeCurrent1);\r\n    if( (this.currentTime() + threshold1) > counter1 ) {\r\n        \/\/console.log(\"this.currentTime: \" + this.currentTime() + \", counter1: \" + counter1);\r\n        \/\/counter1 = this.currentTime() + threshold1;\r\n        counter1 = this.currentTime();\r\n        \/\/console.log(\"new this.currentTime: \" + this.currentTime() + \", counter1: \" + counter1);\r\n    }\r\n    \/\/console.log(\"playTime: \" + playTime);\r\n\tvar gotDuration1 = false;\r\n    \r\n    player1.ready(function(){\r\n        this.on('loadedmetadata', function(){ \r\n            \/\/console.log(\"this.duration: \" + this.duration());\r\n            duration1 = this.duration();\r\n            \/\/if (this.currentTime() <= duration1 -1)\r\n        })\r\n    });\r\n\r\n    this.on(\"seeked\", function(){\r\n        \/\/console.log(\"seeked: ------------------------Seeking\");\r\n        \r\n        cuepoint = 0;\r\n                \r\n        \r\n        ct = this.currentTime();\r\n        roundUpHowMuch = 1;\r\n        roundUp = roundUpToAny(ct,roundUpHowMuch);\r\n        \/\/diff = roundUp - counter1;\r\n        diff = ct - playTimeCurrent1;\r\n        diffRoundup = roundUpToAny(diff,roundUpHowMuch) - 30;\r\n        \/\/playTime1 = diffRoundup;\r\n        \/\/console.log(\"playTimeCurrent1: \" + playTimeCurrent1 + \", ct: \" + ct + \", roundUp: \" + roundUp + \", diff: \" + diff + \", diffRoundup: \" + diffRoundup);\r\n        \/\/console.log(\"seeked: currentTime \" + ct + \", old counter1: \" + counter1 + \", roundUp: \" + roundUp + \", diff: \" + diff);\r\n        counter1 = roundUp;\r\n        \/\/console.log(\"New counter1: \" + counter1);\r\n        \r\n        if( (diffRoundup > roundUpHowMuch) || (diffRoundup < -roundUpHowMuch) ) {\r\n            \/\/console.log(\"seeked: Yes, diff > roundUpHowMuch or < -roundUpHowMuch: \" + diffRoundup);\r\n            \/\/console.log(\"ping 2: seeked\");\r\n            var data = {\r\n                'action': 'trackViews',\r\n                'playTime': this.currentTime(),\r\n                'videoId': 76,\r\n                'duration': this.duration(),\r\n                'threshold': threshold1,\r\n                'event': 'seek',\r\n                'diff': diffRoundup,\r\n                'postId': 10058            };\r\n            jQuery.post(ajaxurl, data, function(response) { });\r\n        }\r\n        \r\n        playTimeCurrent1 = this.currentTime();\r\n        \/\/console.log(\"playTimeCurrent1: \" + playTimeCurrent1);\r\n\r\n        \/\/if(ct > roundUp) {\r\n            \/\/console.log(\"DO SOMETHING IMPORTANT HERE!!!!!!!!\");\r\n        \/\/}\r\n    });\r\n    \r\n    this.on(\"timeupdate\", function(){\r\n        \/\/console.log(\"in timeupdate\");\r\n        if (this.currentTime() >= et1) {\r\n            this.pause();\r\n        }\r\n        \r\n        \/\/if( (this.currentTime() + threshold1) > counter1 ) {\r\n            \/\/counter1 = this.currentTime() + threshold1;\r\n            \/\/console.log(\"this.currentTime: \" + this.currentTime() + \", counter1: \" + counter1);\r\n        \/\/}\r\n        \r\n        \/**\r\n        if (this.currentTime() <= duration1 -1) {\r\n            \/\/alert(\"here\");\r\n            playTime1 = 0;\r\n            playTimeCurrent1 = 0;\r\n        } else {\r\n            playTime1 = this.currentTime();\r\n            playTimeCurrent1 = this.currentTime();\r\n        }\r\n        \r\n        if( (this.currentTime() + threshold1) < counter1 ) {\r\n            console.log(\"this.currentTime: \" + this.currentTime() + \", counter1: \" + counter1);\r\n            counter1 = this.currentTime() + threshold1;\r\n            console.log(\"new this.currentTime: \" + this.currentTime() + \", counter1: \" + counter1);\r\n        }\r\n        *\/\r\n\t\t\r\n        \/\/console.log(\"timeupdate: ---> this.currentTime: \" + this.currentTime() + \", counter1: \" + counter1);\r\n        \r\n        if (this.currentTime() >= counter1) {\r\n            \/\/console.log(\"timeupdate: currentTime() >= counter1\");\r\n\r\n\t\t\t\/\/set a timer for threshold seconds\r\n            \/\/console.log(\"this.currentTime: \" + this.currentTime() + \", counter1: \" + counter1 + \", threshold1: \" + threshold1);\r\n\t\t\tsetInterval(function() {\r\n\t\t\t\t\/\/do nothing\r\n\t\t\t}, threshold1 * 1000);\r\n\t\t\t\/\/alert (counter1 + \" seconds up\");\r\n\t\t\t\r\n\t\t\tcounter1 += threshold1;\r\n\r\n\t\t\tif(!gotDuration1) {\r\n\t\t\t\tduration1 = this.duration();\r\n\t\t\t\tgotDuration1 = true;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\t\/\/Track play time\r\n            if( !this.paused() ) {\r\n                \/\/console.log(\"ping 3: timeupdate\");\r\n                var data = {\r\n                    'action': 'trackViews',\r\n                    'playTime': this.currentTime(),\r\n                    'videoId': 76,\r\n                    'duration': this.duration(),\r\n                    'threshold': threshold1,\r\n                    'event': 'play',\r\n                    'postId': 10058                };\r\n                jQuery.post(ajaxurl, data, function(response) { });\r\n                \r\n                if(userIdAnon == 0) { \/\/Anonymous user\r\n                    \/\/setCookie(\"userIdAnon\", \"0\", 30);\r\n                    setCookie(\"videoIdAnon\", \"76\", 30);\r\n                    setCookie(\"playTimeAnon\", this.currentTime(), 30);\r\n                    \/\/console.log(\"playTimeAnon: \" + this.currentTime());\r\n                }\r\n            }\r\n\r\n\t\t}\r\n        \r\n\t});\r\n\t\r\n    this.on(\"play\", function(){\r\n        \/\/this.playbackRate(1.5);\r\n        \/**\r\n        if(this.currentTime() < playTimeCurrent1) {\r\n            console.log(\"play: this.currentTime() < playTimeCurrent1\");\r\n            if(this.currentTime() < this.duration()) {\r\n                this.currentTime(playTimeCurrent1);\r\n            } else {\r\n                this.currentTime(0);\r\n            }\r\n            \/\/alert(this.currentTime() + \", \" + playTime);\r\n        }\r\n        *\/\r\n        \r\n                \r\n        \/**\r\n        var data = {\r\n            'action': 'trackLoads',\r\n            'videoId': 76,\r\n            'playTime': 0,\r\n            'event': 'start',\r\n            'postId': 10058        };\r\n    \r\n\t    jQuery.post(ajaxurl, data, function(response) { });        \r\n        \r\n        *\/\r\n        \r\n        jQuery('#video1 .vjs-big-play-button').css('display', 'none');\r\n        \r\n                    div = document.getElementsByClassName(\"vjs-watermark\")[1-1];\r\n            if (div) {\r\n                div.style.display = \"block\";\r\n            }\r\n                    });\r\n\r\n    \r\n    this.on(\"fullscreenchange\", function(){\r\n\t\tjQuery('.vjs-loading-spinner').remove();\r\n\t\tthis.loadingSpinner.hide();\r\n\t});\r\n\t\r\n    this.on('ended', function() {\r\n        \/\/console.log(\"ping 4: ended\");\r\n        var data = {\r\n\t\t\t'action': 'trackViews',\r\n\t\t\t'playTime': this.currentTime(),\r\n\t\t\t'videoId': 76,\r\n            'duration': this.duration(),\r\n            'threshold': threshold1,\r\n            'event': 'end',\r\n            'postId': 10058\t\t};\r\n        \/\/this.currentTime(st);\r\n        \/\/alert(\"starting time: \" + st);\r\n\t\tjQuery.post(ajaxurl, data, function(response) { });\r\n        \/\/console.log('ended: ' + this.duration());\r\n        \r\n        endTime1 = this.currentTime();\r\n\t\t\/\/Track play time\r\n\t\t\/\/console.log(\"event: end firing\");\r\n        counter1 = st1;\r\n        playTime1 = 0;\r\n        playTimeCurrent1 = 0;\r\n        this.currentTime(0);\r\n        threshold1 = 15;\r\n        \/\/console.log(\"ended: ping 2\");\r\n        \r\n  \t});\r\n    \r\n    \r\n    this.on('ratechange', function() {\r\n        var currentSpeed = this.playbackRate();\r\n        \/\/console.log(\"currentSpeed: \" + currentSpeed);\r\n        localStorage.setItem('videoSpeed', currentSpeed);\r\n    });\r\n    \r\n    \r\n        \r\n    \r\n        \r\n        \r\n    \r\n    \r\n    jQuery.fn.isInViewport = function() {\r\n        var elementTop = jQuery(this).offset().top;\r\n        var elementBottom = elementTop + jQuery(this).outerHeight();\r\n\r\n        var viewportTop = jQuery(window).scrollTop();\r\n        var viewportBottom = viewportTop + jQuery(window).height();\r\n\r\n        return elementBottom > viewportTop && elementTop < viewportBottom;\r\n    };\r\n    \r\n    \r\n    \r\n    \r\n        \r\nsetupTextTracks();\r\n    \r\n}); \/\/End videojs player ready\r\n\r\nvar promise;\r\n    \r\n\/\/localStorage.removeItem('captions');\r\n\/\/delete localStorage.captions;\r\n\/\/localStorage.clear();\r\n    \r\n\/* ]]> *\/\r\n<\/script>\r\n\r\n\r\n\r\n\r\n\n<\/div>\n<div style=\"position: relative; top: 25px;\">\n<h4><strong>What are Color Modes and Color Models<\/strong><\/h4>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"size-medium wp-image-10066 alignright\" src=\"https:\/\/www.theartofretouching.com\/blog\/wp-content\/uploads\/2020\/09\/color-profiles-and-spaces-252x168.jpg\" alt=\"What are Color Modes and Color Models\" width=\"325\" height=\"214\" \/><\/p>\n<p>Let\u2019s narrow down the amount you need to learn by simply telling you that Color Modes and Color Models are the exact same thing. If you want to get Photoshop\u2019s opinion on this topic, simply go to Edit &#8211; Color Modes.<\/p>\n<p>Here you will see several different items. In an attempt to limit the possibilities, you can see here that the most common are RGB (Red, Green and Blue) and CMYK (Cyan, Magenta, Yellow and Black). To be specific, CMYK is for printing, RGB is for everything else. There are other options available like LAB Color and Multi Color, but these can be attributed to advanced print settings, that I will definitely not cover in this video.<\/p>\n<p>Color is a pretty complex subject when it comes to photography. This means we need some way to define the subset of colors that cameras can capture and monitors can display. We do this by assigning specific color values to every pixel. However, this does not include RAW files that your DSLR camera may take. The RAW file format is a separate topic. Here, we are simply talking about the JPGs taken with your camera, either DSLR or your phone.<\/p>\n<p>Each pixel within the RGB Mode is assigned a value between 0 and 255, for each of the colors Red, Green and Blue. From here, there are technically different Bit Depths of 8-bit, 16-bit and 32-bit color. If you want to learn more about that, I\u2019ll have a link in the description below. But for this video, we will just be talking about the most common 8-bit displays.<\/p>\n<p>We also need a way to keep colors consistent between different devices. A certain shade of red that your camera captures should look the same shade of red on your monitor. This is where color spaces and color profiles come in. And it\u2019s in this next section that gets more confusing.<\/p>\n<p>&nbsp;<\/p>\n<h4><strong>What are Color Profiles and Color Spaces<\/strong><\/h4>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"size-medium wp-image-10072 alignright\" src=\"https:\/\/www.theartofretouching.com\/blog\/wp-content\/uploads\/2020\/09\/color-profiles-and-spaces-1-252x168.jpg\" alt=\"What are Color Profiles and Color Spaces\" width=\"325\" height=\"214\" \/><\/p>\n<p>Like previous, Color Profiles and Color Spaces are exactly the same. In an effort to be clear, Color Modes and Color Models are the same, and Color Profiles and Color Spaces are the same.<\/p>\n<p>For simplicity&#8217;s sake, we will now refer to them as Color Modes and Color Profiles, as these are the most common terms. They are also the terms used within Adobe Photoshop. Color Profiles are the subsections of Color Modes. As Color Modes are RGB and CMYK, Color Profiles are able to provide more targeted information about those Color Modes. The most common of RGB Color Profiles are sRGB, AdobeRGB and ProPhoto. Color profiles are one of those things that work in the background and that most people don\u2019t ever really have to think about. Most generic devices like your computers, tv\u2019s, and cell phones all use the same sRGB profile by default. It doesn\u2019t matter if you have an Android or iPhone; Windows PC or a iMac. They are all using the same sRGB profile by default. With the 8-bit RGB Color Mode, we can display (or capture) 16.7 million colors. But the question is, with an unlimited amount of possible shades of color, which 16.7 million colors should we actually use? This is where a Color Profile comes in.<\/p>\n<p>Color Profiles are used to define the colors we see on our displays. They control what colors are used, and help provide consistency between devices. Technically each device will look a little different due to brightness, age and internal calibration, but it is using the same basic information. Which again, in most devices is sRGB.<\/p>\n<p>&nbsp;<\/p>\n<h4><strong>Popular RGB Color Profiles<\/strong><\/h4>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"size-medium wp-image-10065 alignright\" src=\"https:\/\/www.theartofretouching.com\/blog\/wp-content\/uploads\/2020\/09\/RGB-252x168.jpg\" alt=\"Popular RGB Color Profiles\" width=\"325\" height=\"214\" \/><\/p>\n<p>There are several RGB Color Profiles that are popular.\u00a0 sRGB, Adobe RGB, ProPhoto, and a couple others. I am intentionally omitting the odder ones from this video, like CIE-LAB, CIE-XYX and DCI-PI3. They may all have their place, but I\u2019ll be moving on.<\/p>\n<p>sRGB is used for internet based images, It has a limited basis of color, and easy to manage across many devices. FromCell Phones to Projectors, it is a vast industry standard. Unless you\u2019re getting into specialized uses, sRGB is likely the only color profile you\u2019re going to run into.<\/p>\n<p>AdobeRGB is a bit more targeted. It\u2019s used mostly by photographers. If you are an industry professional, then you know that AdobeRGB allows you access to more color possibilities than sRGB. While sRGB and AdobeRGB are mostly similar, Greens and Blues will show the biggest differences. More expensive monitors that use a 10-Bit display can show off the wider gamut of colors.<\/p>\n<p>ProPhoto theoretically includes colors the human eye can\u2019t even see. While it works well in a closed loop 16-bit system between software, display and printer, it should not be used randomly. Besides, if our eyes can\u2019t see it, our monitors can\u2019t display it, and our printers can\u2019t print it, then why use it?<\/p>\n<p>You may be wondering why I\u2019m even including ProPhoto, when I say you shouldn\u2019t even use it. The funny thing is, you may be using it every day and not even realize it. When you work in RAW Processors like Lightroom, this is what they use to render color while you are working on your RAW files. It isn\u2019t until you actually export the file that you are assigning it a different Color Profile.<\/p>\n<p>Many cameras these days give you a choice in the options of using sRGB or Adobe RGB. These apply to JPGs created in the camera, Not to RAW files. So pick AdobeRGB, although it really won\u2019t much matter.<\/p>\n<p>&nbsp;<\/p>\n<h4><strong>sRGB, AdobeRGB and ProPhoto Diagrams<\/strong><\/h4>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"size-medium wp-image-10068 alignright\" src=\"https:\/\/www.theartofretouching.com\/blog\/wp-content\/uploads\/2020\/09\/Srgb-Adobe-RGB-Pro-Photo-300x165.png\" alt=\"sRGB, AdobeRGB and ProPhoto Diagrams\" width=\"325\" height=\"214\" \/> In this chart, you can see all the colors in the spectrum. The smallest of the overlays is sRGB. Everything inside the triangle represents the colors it can display. It seems limited, but really not. With professional photography, AdobeRGB is the standard. As you can see, there are plenty more colors in the blues and greens. If given the choice, you should use this. Lastly, you can see ProPhoto is literally hanging off the sides. This means it can possibly display colors that we can\u2019t even see. Although most likely, butterflies can, as well as mantis shrimp. But that\u2019s a whole other topic.<\/p>\n<p>If you were to do a search on your local computer for Color Profiles, you will likely see dozens of different profiles. They were either pre-installed with the system, or they were added by different vendors from your different device drivers for items like your display, scanner or printer. Each of them is likely a customized derivative of sRGB. Major confusion often comes from the idea that photos in large color spaces like ProPhoto have \u201cmore colors\u201d than others. This is not true. ProPhoto RGB may be \u201cbigger\u201d in terms of range, but an image in ProPhoto RGB color space doesn\u2019t have <em>more colors<\/em> than a photo in sRGB. An 8-bit photo is limited to about 16.7 million RGB values, no matter what color space it\u2019s in. The colors that are assigned just seem to jump around.\u00a0 Those values are simply spread out farther inColor Profiles like ProPhoto, potentially leading to a problem known as banding. I covered that topic previously, and you can find a link to that in the description below<strong>.<\/strong><\/p>\n<p>&nbsp;<\/p>\n<h4><strong>Converting Between Color Profiles<\/strong><\/h4>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"size-large wp-image-10067 alignright\" src=\"https:\/\/www.theartofretouching.com\/blog\/wp-content\/uploads\/2020\/09\/converting-866x576.jpg\" alt=\"Converting Between Color Profiles\" width=\"325\" height=\"214\" \/><\/p>\n<p>In Photoshop, it\u2019s easy to convert from one Color Profile to the next. Simply go to Edit &#8211; Convert Color Profile and make the desired change. More often than not, you won\u2019t see any noticeable difference.<\/p>\n<p>If you go from sRGB to AdobeRGB, you won\u2019t see any change, because sRGB is smaller than AdobeRGB. However, if you go the other way, you may actually see some slight shift, mostly in the blues and greens, as they fall outside of the sRGB Color Profile.<\/p>\n<p>&nbsp;<\/p>\n<h4><strong>Assigning Profiles to Unprofiled Images<\/strong><\/h4>\n<p>If your image does not have an embedded profile, you should assign one. You\u2019ll need to experiment with various profiles until you find one that makes the image look its best. As a general rule, most RGB images that don&#8217;t have an embedded profile look best when assigned an sRGB profile, which is actually the default anyway.<\/p>\n<p>Many digital point-and-shoot cameras capture images with an sRGB Color Profile, but don&#8217;t automatically embed the profile in the image file. Once you have assigned a profile and saved the image with the profile embedded, the image file can be color managed.<\/p>\n<p>&nbsp;<\/p>\n<h4><strong>How to Supply Files to Clients, Designers and Editors<\/strong><\/h4>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"size-large wp-image-10070 alignright\" src=\"https:\/\/www.theartofretouching.com\/blog\/wp-content\/uploads\/2020\/09\/supply-864x576.jpg\" alt=\"How to Supply Files to Clients, Designers and Editors\" width=\"325\" height=\"214\" \/><\/p>\n<p>Ensure the file is setup with an ICC Color Profile of AdobeRGB before sending your files out to anyone. This is absolutely the industry standard.<\/p>\n<p>There is only one time I can think of that this would be the wrong thing to do. When saving files with the direct intent to use on the internet. Then you should stick to sRGB. Technically, modern web browsers can handle AdobeRGB just fine, but it\u2019s just a good practice since all the displays going to that web page will be sRGB based anyway.<\/p>\n<p>&nbsp;<\/p>\n<h4><strong>What is an ICC Profile?<\/strong><\/h4>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"size-large wp-image-10075 alignright\" src=\"https:\/\/www.theartofretouching.com\/blog\/wp-content\/uploads\/2020\/09\/ICC-1-932x576.jpg\" alt=\"What is an ICC Profile?\" width=\"325\" height=\"214\" \/><\/p>\n<p>ICC Color Profile refers to a standardized system put in place by the International Color Consortium. ICC Profiles have\u00a0 either an .icc or the .icm extension. As I mentioned earlier, you have a few dozen of them on your computer that are used to tell your devices what colors to use. You can also create your own ICC Profiles as well. With a Colorimeter or SpectroColorimeter, you can have it scan swatches of colors, and software that will interpret the information to give you the best results for industry standards. However, I have had this fail miserably in my own retouching business. You see, I deal with many clients (and end clients) all looking at color differently on various devices. I thought long and hard on this topic, and finally came to the conclusion that everyone (except me) was using 8-bit displays assigned with the sRGB Color Profile.<\/p>\n<p>So, why was I using something to specially calibrate? Everyone just complained it looked too yellow. So I just gave up, and color corrected the same way they are going to view it. I figure, I\u2019m not working in a print house, so let them deal with it.<\/p>\n<p>&nbsp;<\/p>\n<h4><strong>CMYK Color Mode<\/strong><\/h4>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"size-large wp-image-10077 alignright\" src=\"https:\/\/www.theartofretouching.com\/blog\/wp-content\/uploads\/2020\/09\/CMYK-837x576.jpg\" alt=\"CMYK Color Mode\" width=\"325\" height=\"214\" \/><\/p>\n<p>Almost everything we have talked about for the RGB Color Mode can be applied to CMYK. The biggest difference here is that instead of using sRGB or AdobeRGB as Color Profiles, we need to use one created specifically for CMYK.<\/p>\n<p>Generally, if the printer wants you involved with applying a specific profile (usually not), they will supply one to you, based on the specific press your images are is going to be printed on.<\/p>\n<p>If you&#8217;re just interested in just seeing how your image may look when printed in a magazine, then you can select\u201d U.S. Sheetfed Coated v2\u201d. If you want to see how it would look in a newspaper, then select \u201cU.S. Web Uncoated v2\u201d.<\/p>\n<p>It\u2019s not scientific, but unlike RGB, there isn\u2019t a single Color Profile that the entire industry gravitates to. It\u2019s really based on each physical machine, and only the print houses themselves will have access to those profiles.<\/p>\n<p>\u2026.<\/p>\n<p>Talking about Color Modes, Color Models, Color Profiles and Color Spaces can easily lead into many more topics that should be left to the professionals of the printing industry. But this video should have given you enough information to clear up confusion, and get you started.\n<\/p><\/div>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>I want to clear up the usual common misconceptions about Color Modes, Color Models, Color Profiles, and Color Spaces. Give me a few minutes of your time, and you will no longer be confused by it. The base cause of this confusion stems from my research in this topic. Half the websites say one thing, and the other half say something else. Rest assured that I am a qualified professional. I\u2019ve done my research, and this is the correct information. <\/p>\n","protected":false},"author":1,"featured_media":10079,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_sitemap_exclude":false,"_sitemap_priority":"","_sitemap_frequency":"","_genesis_hide_title":false,"_genesis_hide_breadcrumbs":false,"_genesis_hide_singular_image":false,"_genesis_hide_footer_widgets":false,"_genesis_custom_body_class":"","_genesis_custom_post_class":"","_genesis_layout":"","footnotes":""},"categories":[842,7],"tags":[],"class_list":["post-10058","post","type-post","status-publish","format-standard","has-post-thumbnail","category-digital-fundamentals","category-retouchingbasics","entry","override"],"_links":{"self":[{"href":"https:\/\/www.theartofretouching.com\/blog\/wp-json\/wp\/v2\/posts\/10058","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.theartofretouching.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.theartofretouching.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.theartofretouching.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.theartofretouching.com\/blog\/wp-json\/wp\/v2\/comments?post=10058"}],"version-history":[{"count":25,"href":"https:\/\/www.theartofretouching.com\/blog\/wp-json\/wp\/v2\/posts\/10058\/revisions"}],"predecessor-version":[{"id":11669,"href":"https:\/\/www.theartofretouching.com\/blog\/wp-json\/wp\/v2\/posts\/10058\/revisions\/11669"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.theartofretouching.com\/blog\/wp-json\/wp\/v2\/media\/10079"}],"wp:attachment":[{"href":"https:\/\/www.theartofretouching.com\/blog\/wp-json\/wp\/v2\/media?parent=10058"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.theartofretouching.com\/blog\/wp-json\/wp\/v2\/categories?post=10058"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.theartofretouching.com\/blog\/wp-json\/wp\/v2\/tags?post=10058"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}