PodcastProducer.org Articles http://podcastproducer.org Podcast Producer Community admin@podcastproducer.org admin@podcastproducer.org Copyright 2010 podcastproducer.org Geeklog Mon, 08 Mar 2010 21:19:52 +0100 en-gb podcastproducer.org moved server http://podcastproducer.org/article.php/2010030821171334 http://podcastproducer.org/article.php/2010030821171334 Mon, 08 Mar 2010 21:17:13 +0100 http://podcastproducer.org/article.php/2010030821171334#comments News The site was down today for a short time, due to a little struggle with new hosting. <a href="http://Podcastproducer.org">http://Podcastproducer.org</a> is now moved and up and running again on a new server. Sorry for the downtime! Using Epiphan devices with 64-bit Macs http://podcastproducer.org/article.php/20100119133258505 http://podcastproducer.org/article.php/20100119133258505 Tue, 19 Jan 2010 13:32:58 +0100 http://podcastproducer.org/article.php/20100119133258505#comments News Epiphan has a range of devices for screen capture compatible with Quicktime. They work like regular Quicktime input devices, so you can use them with Podcast Capture.<br /> The Epiphan devices come with a 32-bit Kernel extension. If you are using an application that is walking the 64-bit path, you will not be able to use the Epiphan device as input within that application. You can see this with Quicktime Player. If you open Quicktime Player and you start a new recording, you will not be able to see the Epiphan device. If you now close Quicktime Player, select it in the Finder and open the info box (Command-i), you can check a button 'Open in 32-bit mode'. If you now open Quicktime Player again and start a new recording you will be able to see the Epiphan device.<br /> <br /> Podcast Capture runs in 32-bit, so you won't have any trouble with that application using the Epiphan devices. If you want to bind the computer to the Podcast Producer server you have to be a little bit careful. Again, using the Podcast Capture application it should work because this app walks the 32-bit path. If you are trying to use the command line 'pcast' way, you will run into trouble. Using pcast, it will try to use the 64-bit frameworks, so it won't be able to see your Epiphan device. The solution is pretty simple, just use Podcast Capture to bind your camera.<br /> <br /> If you find it important that Epiphan comes with a 64-bit version of their driver, please let them know at www.epiphan.com. Quartz Composer Fundamentals and Podcast Producer Webcast http://podcastproducer.org/article.php/20100113132207745 http://podcastproducer.org/article.php/20100113132207745 Wed, 13 Jan 2010 13:22:07 +0100 http://podcastproducer.org/article.php/20100113132207745#comments News <a href="http://Maclearning.org">http://Maclearning.org</a> will host a webcast on Quartz Composer Fundamentals and Podcast Producer. The webcast will be presented by Bob Bajwa, Training Development Executive Apple Canada Inc. For more information go to <a href="http://maclearning.org/userpage.php?page_id=14">http://maclearning.org/userpage.php?page_id=14</a> Podcast Producer Workflow Tutorial available for Snow Leopard http://podcastproducer.org/article.php/20100107094421251 http://podcastproducer.org/article.php/20100107094421251 Thu, 07 Jan 2010 09:44:21 +0100 http://podcastproducer.org/article.php/20100107094421251#comments News Apple has posted a new version of the Podcast Producer Workflow Tutorial that is now updated for Snow Leopard. It talks a about extending your workflows with custom transitions, compositions, encodings, etc. You can download the PDF from Apple: <a href="http://podcastproducer.org/links/portal.php/link/20100107095605486">Podcast Producer Workflow Tutorial</a> . Optimizing your workflow for speed (Part 1) http://podcastproducer.org/article.php/20091210214855662 http://podcastproducer.org/article.php/20091210214855662 Wed, 06 Jan 2010 21:48:55 +0100 http://podcastproducer.org/article.php/20091210214855662#comments How To Snow Leopard gives a couple of really nice compositions we can use with our recordings. All these compositions are available when we use Podcast Composer to make workflows. What you maybe don't realize is that using some of these effect might have severe effect on the performance of your workflow. The main culprit is the 'core-edit-master' task. The core-edit-master task in a Podcast Composer workflow renders out the output of the previous effects and composition tasks. These tasks output a quicktime reference file and core-edit-master renders this file into a new flat movie file. It keeps the original size and uses H.264 (highest quality, single pass) for video and AAC (44,1 kHz, 16 bit stereo) for audio encoding. I have seen that this task in different workflows and on different hardware takes relatively the longest time of all the tasks in the workflow. There is a lot to gain in optimizing on this bit! Here are some results from rendering times on different machines using the default Single Source workflow. All these tests were done with the same source file that I used from: [http://movies.apple.com/movies/us/podcast/leopardserverquicktours/quicktours-06_Using_Wiki.m4v Apple Server Quicktour Movie] ||Time complete workflow || Time edit-core-master ||Machine type || ||17:55||12:44||2.8 Ghz Quad Core XServe 6 GB RAM ATI Radeon X1300 64 MB|| ||12:27||8:23||2.66 GHz Quad Core Mac pro 3 GB RAM NVIDIA GeForce-GT 120 521 MB|| ||45:24||26:22||2.5 Ghz 2 core Mac Mini GMA950 64 MB|| As you can see in the table, the XServe has more CPU power, but the Mac Pro still runs faster. The difference is in the GPU power. Even with the standard graphics card, the Mac Pro is still much better equipped in this department than the XServe. Next I did some tests with a workflow I created that has no intro, no transitions and no overlay. I used the 'Single Source' workflow as template and just removed all the extra input options. It still renders to the three different formats. ||Time complete workflow||Time edit-core-master||Machine type|| ||8:01||3:28||2.8 Ghz Quad Core XServe 6 GB RAM ATI Radeon X1300 64 MB|| ||6:12||2:48||2.66 GHz Quad Core Mac pro 3 GB RAM NVIDIA GeForce-GT 120 521 MB|| ||27:39||9:44||1.66 Ghz Core 2 Mac mini GMA950 64 MB|| As you can see in the results, the render times are significantly faster, but if you look inside the workflow and inspect the template.plist file, you will see that still the 'import' and 'core-edit-master' tasks are run even though they don't do a lot at this stage. I've created a workflow where I manually removed those tasks and re-run the tests. ||Time complete workflow||Machine type|| ||4:38||2.8 Ghz Quad Core XServe 6 GB RAM ATI Radeon X1300 64 MB|| ||3:53||2.66 GHz Quad Core Mac pro 3 GB RAM NVIDIA GeForce-GT 120 521 MB|| ||17:54||1.66 Ghz Core 2 Mac mini GMA950 64 MB|| As you can see, just by removing those two tasks the image result is still the same, but it now runs at twice the speed. Since using Snow Leopard you might have noticed that XGrid no longer reports the amount of core's available, but the amount of core's available divided by two. This means that on the Mac mini Core Duo Xgrid will only run one task at the same time. Now, I must say that the XGrid team at Apple have done this for a reason. I do not know the reason, so changing the value might give you unexpected results. However, if you want to give it a try here goes: <code> defaults write /Library/Preferences/com.apple.xgrid.agent ProcessorCount -integer </code> ||Time complete workflow||Machine type|| ||4:33||2.8 Ghz Quad Core XServe 6 GB RAM ATI Radeon X1300 64 MB|| ||3:19||2.66 GHz Quad Core Mac pro 3 GB RAM NVIDIA GeForce-GT 120 521 MB|| ||23:08||1.66 Ghz Core 2 Mac mini GMA950 64 MB|| As you can see in my results it didn't make much of a difference for the Quad core machines, but the Mac mini was actually slower. To round things up I can say that if you need a workflow that is fast, or you are limited by your hardware, it would be best to not use any of the special effects that Podcast Composer provides. If you need even more speed you could go into the workflow and remove the core-edit-master and import tasks by hand. Youtube upload from Podcast Producer with pcptools http://podcastproducer.org/article.php/20091223131435797 http://podcastproducer.org/article.php/20091223131435797 Wed, 23 Dec 2009 13:14:35 +0100 http://podcastproducer.org/article.php/20091223131435797#comments How To Somebody asked in the forums recently how to get Podcast Producer to upload videos automatically to YouTube.com. There is a description available by Apple at http://developer.apple.com/mac/articles/server/podcastproduceryoutube.html. This example uses a Java YouTube API library to upload the video, but I thought it might also be possible to do this the easy way: with ruby. I little while into writing this script I figured that this was something I would rather have available in pcastaction. Since there might be more things that people find missing in pcastaction I created pcptools.<br><br> The idea of pcptools is to have a toolkit for all the stuff that should be in pcastaction, but is not. I have made a start for this script and I hope that people will contribute ideas or code to make this a general purpose tool for Podcast Producer. The general idea and usage is the same as pcastaction. All the code for pcptools is in one file, so it is easy to include in a workflow (use the '/Tools' directory). At the moment pcptools has only one subcommand 'publish2library'.<br><br> Before you start trying the script you will need to get yourself an account at youtube and a Developer Key.<br><br> <a href="http://podcastproducer.org/links/portal.php/link/20091228194300477">Download pcptools</a> I have tried to keep the experience similar to using pcastaction, so when you type: <pre><code> pcptools help publish2youtube </code></pre> The output looks like this: <pre><code> PcP Tools Version 0.1b pcptools publish2youtube --basedir=BASEDIR --input=INPUT MOVIE --dev_id=YOUTUBE_DEVELOPER_ID --user=YOUTUBE_USERNAME --pass=YOUTUBE_PASSWORD --title=TITLE --description=DESCRIPTION --keywords=KEYWORDS --category=YOUTUBE_CATEGORY &#91;--autosplit&#93; KEYWORDS should be a string of keywords separated by ',' CATEGORY should by one of the valid YouTube categories --autosplit When you use this option the input video will be split into 10 minute chunks, if it is more than 10 minutes long. The chunks will be uploaded separatly and named sequentially. </code></pre> Here is an example for uploading a file to youtube: <pre><code> publish2youtube.rb --basedir=~/Desktop &#92; --input=example.mov &#92; --dev_id=IOkjhdfkjKJkdbKHubLSonsllfeqpwqimKNknknubxc-Jjhofon &#92; --user=myusername &#92; --pass=mypassword &#92; --title="Example Movie" &#92; --description="This is the description" &#92; --keywords="test, cool, upload" &#92; --category=People &#92; --outfile=publish_youtube.yaml &#92; --autosplit </code></pre> When you give the autosplit argument, the script will automatically split videos longer than 10 minutes in 10 minute or less chunks and upload them to youtube.<br><br> You could use pcptools for uploading to youtube in any of your workflows, but it would be easier to incorporate it in one 'Youtube' workflow and use this workflow in other workflows to publish to. That way, you will only have to make one custom workflow and use Podcast Composer for all your other generic workflows that you want to use the youtube upload with.<br><br> For our 'Youtube' workflow we are going to start with a simple Podcast Composer generated workflow, so open up Podcast Composer and make one:<br><br> • Import &gt; should be single source (all your dual source movies are 'single source' by the time they end up here)<br> • Edit &gt; Remove intro and exit movie<br> • Edit &gt; Remove Title<br> • Edit &gt; Remove Watermark<br> • Export &gt; leave at default<br> • Publish &gt; only select 'Original Sources'<br> • Notify &gt; Leave empty<br><br> Save the workflow and open the workflow package (right-click on it and select 'View package contents'). Navigate to the Tools directory and copy the pcptools script in here. Now open the template.plist file with Property List Editor. There are some steps we don't need in this workflow, so delete the following tasks:<br> • edit-core-annotate<br> • edit-core-master<br> • export-core-preview-image<br> • import-plugin-movie-generated<br> • export-plugin-quicktime[UUID]<br><br> Rename the task 'publish-plugin-podcastlibrary-import-plugin-movie-original' to 'publish-youtube'. We are going to edit this task to use pcptools to upload our file to youtube. Change the command to be &#36;&#36;GLOBAL::Workflow Resource Path&#36;&#36;/Tools/pcptools. Best is to delete all arguments and then add these:<br><br> --basedir=&#36;&#36;GLOBAL::Library Bundle Path&#36;&#36;/Contents/Resources/Working --input=&#36;&#36;SOURCE::0::Filename&#36;&#36;<br> --dev_id=[Your youtube dev id]<br> --user=[Your youtube login name]<br> --pass=[Your youtube password]<br> --title=&#36;&#36;Title&#36;&#36;<br> --description=&#36;&#36;Description&#36;&#36;<br> --keywords=pcp (use your own keywords)<br> --category=People (Use only valid youtube categories)<br> --autosplit<br> --outfile=publish-plugin-youtube.yaml (for later use)<br><br> Now change the 'dependsOnTasks' tag of the 'publish-youtube' task to only contain one item called 'preflight'. In the 'postflight' task make sure that in the 'dependsOnTasks' tag there is only one item called 'publish-youtube'. Now save the file.<br><br> Upload the new workflow with the following command: <pre><code> pcast --server &lt;hostname server&gt; --user &lt;admin user&gt; --installworkflow --path &lt;path to workflow&gt; </code></pre> Now you can use this workflow in other workflows with the Podcast Composer publish-to-workflow item. Creating a simple custom template for Podcast Composer http://podcastproducer.org/article.php/20091221195311250 http://podcastproducer.org/article.php/20091221195311250 Mon, 21 Dec 2009 19:53:11 +0100 http://podcastproducer.org/article.php/20091221195311250#comments How To Podcast Composer has in it a couple of build-in templates for video layout and settings to get you started. It is surprisingly easy to create your own templates for custom layouts and presets.<br /> As an example I'm going show you how to change the default 20 seconds threshold in the dual source compositions (the threshold defines how long a primary source should be static before it swaps with the video source). With the same methods you can easily change the Quartz Composer templates that layout the dual screen composition as well.<br /> <br /> Podcast Composer loads any additional compositions from ~/Library/Application Support/Podcast Composer/Resources/Compositions/. Any valid compositions that you add here will be available in Podcast Composer. We are going to add one, but we'll start easy by copying one of the default compositions to get us started. The default compositions are in the Podcast Composer.app bundle and you can access them by right clicking (or ctrl-clicking) on Podcast Composer.app and select 'Show package contents'. From here go into Contents/Resources/Materials/Compositions. This is where the default compositions are stored. We are going to copy the 'Theatre' composition, so go into 'DualSources' and drag 'Theatre.pqz' to your desktop (make sure you make a copy and don't move it).<br /> <br /> Now open the bundle and find the Info.plist file. Open it with Property List Editor (you get this when you install the Developer Tools, if you don't have these installed stop here and install first. Property List Editor is a great tool when you are editing workflows). We need to change some settings in these file, first change the 'Bundle identifier' to our own unique name in the 'reverse DNS style'. In this case I'll make it 'org.podcastproducer.composition.dualsource.Theatre10secs'. We change 'Bundle Name' to the name we want to see displayed in Podcast Composer, I will use 'Theatre with 10 Seconds Threshold'. For the last step in this file we are going to change the 'Threshold' key (yes, it is as simple as that!) from 20 to 10. We also need to change the localization strings for the title to display our new name, so open in the 'en.lproj' folder the 'InfoPlist.strings' file in a texteditor and change 'Name = &quot;Theatre&quot;' to 'Name = &quot;Theatre with 10 Seconds Threshold&quot;'.<br /> <br /> Now rename the folder from 'Theatre.pqz' to 'Theatre with 10 Seconds Threshold.pqz' and place it in ~/Library/Application Support/Podcast Composer/Resources/Compositions/DualSources/. If you now open Podcast Composer you will see a new option in the Dual Source import info window.<br /> <br /> <img width="617" height="398" src="http://podcastproducer.org/images/articles/20091221195311250_1.png" alt=""><br /> <br /> You can do a lot more customization with Podcast Composer, check out this Apple guide for more details:<br /> <br /> <a href="http://manuals.info.apple.com/en_US/PodcastComposer_v10.6.pdf">http://manuals.info.apple.com/en_US/P..._v10.6.pdf</a> Call for content contributions http://podcastproducer.org/article.php/20091220181643207 http://podcastproducer.org/article.php/20091220181643207 Sun, 20 Dec 2009 18:16:43 +0100 http://podcastproducer.org/article.php/20091220181643207#comments News The relaunch of <a href="http://podcastproducer.org">http://podcastproducer.org</a> has been successful, we are very happy with the amount of people that have registered in the last couple of days. A couple of stories have been published and a couple more are still in the pipeline to be published soon. As this is a community site, we are calling for people to submit content or ideas for new content.<br /> We are looking for anything related to Podcast Producer or running a Podcast Producer environment. Experience with related hardware or software is also very much appreciated. If there is a subject that you would very much like to hear about, please leave a comment. We also would like to encourage people to use the forums. Since we have decided to close the old forums and start over for PcP 2, we have started with a completely empty forum. A big thanks to the people who have already posted questions. Podcast Producer OAI Provider http://podcastproducer.org/article.php/20091216171126940 http://podcastproducer.org/article.php/20091216171126940 Wed, 16 Dec 2009 17:11:26 +0100 http://podcastproducer.org/article.php/20091216171126940#comments How To The Podcast Producer Open Archive Interface Provider was developed as an proof-of-concept project for SURFnet to support harvesting asset metadata out of the Podcast Library. The code is available under the liberal MIT Open Source license and should be considered experimental. It uses a query-based atom feed from the Podcast Library to parse and cache all the asset metadata. At the moment it only supports serving data in the Qualified Dublin Core metadata format.<br /> The project is written in Ruby and depends on Sinatra for serving. It is available for download at sourceforge:<br /> <br /> svn co <a href="http://pcpoai.svn.sourceforge.net/svnroot/pcpoai/trunk">http://pcpoai.svn.sourceforge.net/svn...poai/trunk</a> pcpoai<br /> <br /> Installation and usage instructions will be available soon on the sourceforge project site:<br /> <br /> <a href="http://sourceforge.net/projects/pcpoai">http://sourceforge.net/projects/pcpoai</a> Running Podcast Library on a different port (first attempt) http://podcastproducer.org/article.php/20091214174318402 http://podcastproducer.org/article.php/20091214174318402 Mon, 14 Dec 2009 17:43:18 +0100 http://podcastproducer.org/article.php/20091214174318402#comments How To Podcast Producer uses ports 8170 and 8171 for communication between Podcast Capture/pcast and the server. Podcast Library also serves its feeds and assets over these ports. Port 8170 is for SSL encrypted connections and port 8171 for unencrypted connections. In some situations it is not an option to use these ports. IT might not want to open these ports on the firewall, or your students who want to access the feeds or assets might be on a network that only allows connections over ports 80 and 443. To avoid these problems I have been looking for ways of using the Podcast Library over the standard ports. I will describe two possible solutions to approach this problem.<br /><br /> There is a simple way and an elaborate way. In this case I would not recommend the simple way. This involves just changing the port that the Podcast Producer service is started on. You can do this with the serveradmin tool in the Terminal:<br /><br /> <pre><code> sudo serveradmin pcast:server_port = 79 </code></pre> Setting the port to 79 will make sure that the default SSL port is 79 and that the default non-ssl port is 80. Here you can also see what the problem is with this solution: all your connections from pcast or Podcast Capture will have to specify the port. The URLs you will need to use in Podcast Capture will look like this: server.example.com:79. Also, you are kind of hijacking port 80 with this solution, so using the Wiki or other web services on the same machine will be problematic.<br /><br /> The second solution involves running a reverse proxy on your webserver. This way Podcast Producer runs happily on ports 8170 and 8171, but you can receive requests on ports 80 and 443. You can very easily set this up in Server Admin:<br /><br /> • Open Server Admin &gt; Web and add a website with the desired hostname<br /> • Go to the 'Proxy'-tab and enable the reverse proxy<br /> • Click on the '+' symbol to add a Worker URL and give 'http://127.0.0.1:8171' for 'Server URL', leave 'Route' empty<br /><br /> Save the settings and restart the Web service. This should now work for all your direct links like http://server.example.com/podcastproducer/path/to/my/asset, but the feeds still wont work correctly. All the links in your Podcast Library feeds will still have the port 8171 (for non-SSL) in it. I have been looking at ways of rewriting this with mod_proxy_html, but that only works for HTML content. So this would work for all the links to your assets in the Wiki pages, but not in the atom and rss feeds. I have been trying to get mod_proxy_html to work, but haven't been successful so far. If anybody has more experience with this and would like to help me out, please let me know.<br /><br /> For now I have used a different way to get this to work. This involved changing some of the Podcast Producer code, so be aware on your production systems. I would recommend to test this thoroughly before even thinking about doing this on a production system. Better still: Don't do this on a production system at all. These changes are definitely not supported, so if system updates come in they might break your hacks (or your server altogether). Backup all the files before you start changing them.<br /><br /> There are a couple of places in the feeds where you would need the URL to be changed. I did the following:<br /><br /> In /usr/share/podcastproducer/pcastserverd/app/views/feeds/atom_feed.xml.builder change the following lines. (where is the hostname of your server, like 'server.example.com')<br /><br /> <pre><code> line 27: xml.logo logo_url to xml.logo logo_url.gsub("127.0.0.1:8171", "&lt;hostname&gt;") line 30: xml.icon icon_url to xml.icon icon_url.gsub("127.0.0.1:8171", "&lt;hostname&gt;") line 39: xml.tag!("link", :rel =&gt; "self", :type =&gt; "application/atom+xml", :title =&gt; @feed.localized_name, "pcp:feedtype" =&gt; @feed.feed_type, :href =&gt; admin_atom_feed_url(:uuid =&gt; @feed.uuid)) to xml.tag!("link", :rel =&gt; "self", :type =&gt; "application/atom+xml", :title =&gt; @feed.localized_name, "pcp:feedtype" =&gt; @feed.feed_type, :href =&gt; admin_atom_feed_url(:uuid =&gt; @feed.uuid)).gsub("127.0.0.1:8171", "&lt;hostname&gt;")) line 41: xml.tag!("link", :rel =&gt; "self", :type =&gt; "application/atom+xml", :title =&gt; @feed.localized_name, "pcp:feedtype" =&gt; @feed.feed_type, :href =&gt; atom_feed_url(:uuid =&gt; @feed.uuid)) to xml.tag!("link", :rel =&gt; "self", :type =&gt; "application/atom+xml", :title =&gt; @feed.localized_name, "pcp:feedtype" =&gt; @feed.feed_type, :href =&gt; atom_feed_url(:uuid =&gt; @feed.uuid)).gsub("127.0.0.1:8171", "&lt;hostname&gt;")) line 44: xml.tag!("link", :rel =&gt; "alternate", :type =&gt; "text/html", :title =&gt; "Podcast Producer", :href =&gt; overview_url) to xml.tag!("link", :rel =&gt; "alternate", :type =&gt; "text/html", :title =&gt; "Podcast Producer", :href =&gt; overview_url).gsub("127.0.0.1:8171", "&lt;hostname&gt;")) line 53: xml.tag!("link", :rel =&gt; "root", :type =&gt; "application/atom+xml", :title =&gt; @root_catalog.localized_title, "pcp:feedtype" =&gt; @root_catalog.name, :href =&gt; admin_catalog_root_url) to xml.tag!("link", :rel =&gt; "root", :type =&gt; "application/atom+xml", :title =&gt; @root_catalog.localized_title, "pcp:feedtype" =&gt; @root_catalog.name, :href =&gt; admin_catalog_root_url).gsub("127.0.0.1:8171", "&lt;hostname&gt;")) line 55: xml.tag!("link", :rel =&gt; "root", :type =&gt; "application/atom+xml", :title =&gt; @root_catalog.localized_title, "pcp:feedtype" =&gt; @root_catalog.name, :href =&gt; catalog_root_url) to xml.tag!("link", :rel =&gt; "root", :type =&gt; "application/atom+xml", :title =&gt; @root_catalog.localized_title, "pcp:feedtype" =&gt; @root_catalog.name, :href =&gt; catalog_root_url).gsub("127.0.0.1:8171", "&lt;hostname&gt;")) line 150: attachment_hash&#91;:href&#93; = attachment_url to attachment_hash&#91;:href&#93; = attachment_url.gsub("127.0.0.1:8171", "&lt;hostname&gt;") </code></pre> For the RSS-feed change the following lines in /usr/share/podcastproducer/pcastserverd/app/views/feeds/rss_feed.xml.builder <pre><code> line 33: logo_url = feed_logo_url(:uuid =&gt; @feed.uuid, :extension =&gt; @feed.logo_extension) to logo_url = feed_logo_url(:uuid =&gt; @feed.uuid, :extension =&gt; @feed.logo_extension).gsub("127.0.0.1:8171", "&lt;hostname&gt;") line 37: xml.tag!("link", overview_url) to xml.tag!("link", overview_url.ggsub("127.0.0.1:8171", "&lt;hostname&gt;") line 104: attachment_url = attachment_url(:feeduuid =&gt; @feed.uuid, :uuid =&gt; attachment.uuid, :extension =&gt; attachment.extname) to attachment_url = attachment_url(:feeduuid =&gt; @feed.uuid, :uuid =&gt; attachment.uuid, :extension =&gt; attachment.extname).gsub("127.0.0.1:8171", "&lt;hostname&gt;") </code></pre><br /> Hey, I didn't say it was going to be pretty, but it seems to work. And I have to say again: this is all highly unsupported. This seems to work to get your feeds to point to the correct URLs for the attachments, but if you want your assets in your Wiki and Blog pages to have the right URLs it is better to look at mod_proxy_html. If I get the feeds to be re-written through some other form of proxy I will post this, so we can get rid of all these ugly code changes. For now I hope I got the ball rolling a bit on running Podcast Library feeds over a different port and all suggestions are welcome.