forum

osu!np v2.4: Output /np info + Beatmap Downloader etc

posted
Total Posts
170
Topic Starter
Primula_old
osu!np is a small application which enables you to automatically output the map you're currently playing to a text file in order for other applications to read from it (like an IRC bot for a livestream or web server.. see below for example usage).

osu!np additionally features downloading and auto-installing of maps (with or without video) using an implementation of Hexide's mirror.
As of v2.0, all Beatmaps can be Queried/Previewed/Downloaded when clicking the 'Beatmaps' button, similar in functionality to osu!direct.
As of v2.2, the Beatmaps Downloader has additional features such as: additional results filtering, downloading simultaneously, downloading map mp3's & backgrounds and playing full length mp3's within the osu!np client.
As of v2.4, fullscreen is supported again.

Be sure to check out my other projects.
  • osu!db - Read data from osu!.db/collection.db/score.db (Source Included)
    osu!mp3 - Play/export songs in playlists created from your collections.

Localisation
Localisation coming in v2.5? - I need to update this section
Here's a Japanese guide to using osu!np.
You can help with localisation of osu!np here!

I haven't finished with the English locale yet as I'm re-designing the UI and some text may change/be removed.
Anyone is welcome to make changes and add new languages.
The current languages listed are ones of which are either confirmed or have potential to be added.
Currently Supporting:
Partial Support:

There will be download links here to the locales (you may also download from within osu!np), all you'll need to do is put the file in the same directory as osu!np.
You may switch locales at any time from the Config.
Download Latest [v2.4 - 22.06.14 - 776kb]: [Mediafire][Previous Versions]
Requires: .Net Framework 4If you can't run osu!np, try running .Net Framework Repair Tool
For whatever reason, Chrome may warn that the file is malicious, here's the VirusTotal analysis showing that it's clean.

Screenshot of Beatmaps Download v2.2
Playing MP3

Downloading Multiple Beatmaps
Screenshots of Output v2.1 (Little change in 2.2)
Map Data of map currently being played.


Outputs to Primary File

FTP Output: (Live Preview on my Userpage)
Offline:
Not Playing:
Playing:
---

Features
★ Display a custom message in place of the map output when you're not playing a map. (Default: "Nothing Q^Q")
★ Output updates whenever you start playing a new map or exit/finish the current map playing, you can also manually update by clicking 'Stop' then 'Start' again.
★ As of v0.5, uploading to web server by FTP is supported.
★ As of v0.6, additional features are implemented such as the ability to download and install new maps by MapsetID.
★ As of v2.0, it is now possible to download maps from a queried selection of all Beatmaps.
★ Add custom commands to the output, below are the list of commands.
☆ Note: As of v1.6, commands require {} braces around them, allowing for optional text to be grouped. Eg. {Playing: [np]} {[diff]}
☆★ General Commands
  • ☆ [np] - Default command, outputs "Artist - Title".
    ☆ [dl] - Map Download Link.
    ☆ [img] - Map Image Link.
    ☆ [nl] - Creates New Line.
☆★ Map Metadata Commands
  • ☆ [t] - Song Title.
    ☆ [tu] - Song Title in unicode.
    ☆ [a] - Song Artist.
    ☆ [au] - Song Artist in unicode.
    ☆ [c] - Map Creator.
    ☆ [tag] - Map Tags.
    ☆ [mid] - Map ID.
    ☆ [msid] - Mapset ID.
☆★ Map Difficulty Commands
  • ☆ [diff] - Map Difficulty.
    ☆ [hpd] - HP Drain Rate.
    ☆ [cs] - Circle Size.
    ☆ [od] - Overall Difficulty.
    ☆ [ar] - Approach Rate.
    ☆ [sm] - Slider Multiplier.
    ☆ [st] - Slider Tick Rate.
Instructions
  • #1: Run osu!np, click the 'Config' button and click the 'Directory' tab.
    #2: Change the Osu! directory field to wherever your Osu! root folder is located.
    #3A: Change the Primary directory field to wherever you want to save the output file.
    #3B: Optionally, set the Secondary and Previous directories too (if you want a secondary output, or a output of the previous map).
    #4A: Now click the 'Output' tab and ensure your desired outputs are checked. (Primary/Secondary/Previous)
    #4B: If you've selected to additionally use 'Secondary' output, set the secondary 'Idle'/'Output' fields to whatever you wish to display when idle/playing.
    #5: Click the 'Save' button when you're done making changes.
    #6: Change the primary output field to whatever you wish, commands as mentioned above can be used to output various information.
    #7: Change the primary idle message to whatever you want to have displayed for when you're not playing a map.
    #8: Click the 'Start' button, now whenever you're playing a map it'll update with information relevant to the map you're playing.
You can update all fields after having clicked the 'Stop' button.

Note: osu!np may hang for a couple seconds while retrieving map data.
---

Map Download (By MapID) Instructions
  • #1: Click the 'Config' button and navigate to the 'Download' tab to display the Download Config.
    #2A: Toggle 'Install' depending on whether you want osu!np to auto-install maps to Osu!
    #2B: Toggle 'Video' depending on whether you want osu!np to download maps with or without their video file (if any).
    #3: Change the directory to the location you wish to save the downloaded map to. (Do not set this to your Songs directory)
    #4: Save changes and on the main osu!np window input a map ID into the 'MapID' field.
    #5A: Specify what you wish to play/download from the dropdown box (Map, MP3 (Full), Background)
    #5B: Note - Clicking the 'Play' button when 'MP3 (Full)' is not selected will play the preview version of the song.
    #6: Click the 'Download' button to begin downloading the map.
You can find the ID of a map being played by hovering over the /np output of other users in Osu!
You may also find the ID in the URL of a map in your browser. Eg. http://osu.ppy.sh/s/99283 ID is '99283'
Additionally, if you don't know the ID to a map you wish to download, you may use the below method to preview/download from a list of all Beatmaps.
Map Download (From Beatmap List) Instructions
  • #1: Click the 'Config' button and navigate to the 'Download' tab to display the Download Config.
    #2A: Toggle 'Install' depending on whether you want osu!np to auto-install maps to Osu!
    #2B: Toggle 'Video' depending on whether you want osu!np to download maps with or without their video file (if any).
    #3: Change the directory to the location you wish to save the downloaded map to. (Do not set this to your Songs directory)
    #4: Save changes, on the main osu!np window toggle the "Open Beatmaps" button.
    #5A: Specify what you wish to play/download from the dropdown box (Map, MP3 (Full), Background)
    #5B: Note - Clicking the 'Play' button when 'MP3 (Full)' is not selected will play the preview version of the song.
    #6: From the below dropdown box, select what you wish to sort by and click the 'ASC/DESC' button to the right to toggle between Ascending/Descending.
    #7: Optionally input any search terms in the search field to the left of the sort dropdown.
    #8: Set the 'PerPage' input field to however many results you wish to display per page (1 - 999).
    #9: Set the 'Index' input field to wherever you wish for the list to start from (0 - 8000, 0 = Most recent beatmap).
    #10A: Click the button with the musical note icon to begin the query.
    #10B: Click the buttons with Left/Right arrows to browse through the pages.
    #11A: Select Beatmap(s) from the queried list and click either 'Play' or 'Download' to play the song or download the beatmap.
    #11B: Note - You may select multiple beatmaps to add them all to the download queue.
---

OBS Instructions
Example method of displaying the output file on stream:
  • #1 In OBS, right-click within the Sources area and create a new source by clicking 'Add' > 'Text'.
    #2: Give your new source a name and click 'OK'.
    #3: Set your desired style properties for this text source.
    #4: Near the bottom, click the 'Use Text From File' radio button.
    #5: Click the 'Browse' button and navigate to the osu!np output file then click 'OK'.
Now the contents of the output file will be updated on your stream.
XSplit Instructions
Example method of displaying the output file on stream:
  • #1: In XSplit, add a new source by clicking 'Add' in the bottom left of the sources panel then click 'Add title...'.
    #2: Set your desired style properties for this text source and delete the default "Title text".
    #3: Near the bottom, click the 'Remote text update' button.
    #4: Set the 'Refresh Interval' to however long you wish for XSplit to wait before updating the text.
    #5: Set the 'Remote url' to the location of the output file. Eg. 'C:\osu!np\np.txt' then click 'OK'.
Now the contents of the output file will be updated on your stream.
IRC Bot Example (for Twitch.tv and such)
Here's an example implementation of osu!np to have a Twitch.tv bot output the contents of the np.txt file when it finds !np being typed in the chat. (Using mIRC as the example IRC program)
  • #1 Connect to your IRC channel using your Twitch.tv credentials.
    - Nickname/Pass: Twitch User/Pass
    - Channel: username.jtvirc.com
    - Port: 6667
    #2: Open the 'Script Editor' by pressing 'Alt+R' and switch to the 'Remote' tab.
    #3: Paste the following code and click 'OK'.
    (Change 'np.txt' to the directory that you have it output to, the above assumes it's in the mIRC install directory.)
    on *:TEXT:!np:#: {
    msg $chan $read(np.txt)
    }
Now whenever a user types !np in your Twitch chat, you'll automatically output what you're now playing.
---

FTP Instructions
  • #1: Click the 'Config' button and navigate to the 'Upload (FTP)' tab to display the FTP Config.
    #2: Change the Location field to the directory on the FTP Server you wish to upload outputs to, include trailing slash.
    (EG. "ftp://host.com/www/host.com/np/")
    #3: Change the User and Pass fields to the credentials of your FTP host.
    #4A: Select which outputs you wish to upload. (They must first be selected on the 'Output' tab in the Config)
    The 'Status' output will show whether you're 'Online' or 'Offline' depending on whether the Osu! window is open.
    #4B: Change the directories of where to locally save the outputs on the 'Directory' tab of the Config.
    #5A: Toggle the 'Group' checkbox depending on whether you wish to upload outputs individually or as a group (excluding Status).
    FTP Group - Follow the below instructions only if 'Group' checkbox is selected
    #5B: Change the 'File' field to the name of the file you wish to upload the group file as. (Default: npgroup.txt)
    #5C: Change the 'Key' field to your desired format of the Key portion of the output, more info below.
    #5D: Change the 'Val' field to your desired format of the Value portion of the output, more info below.
    Information on FTP Group:
    > Status will always output to its own file, considering your status updates at a different rate compared to the NP Outputs.
    > The 'Key' and 'Value' input fields determine the format of the output to the group file. (Where '[Key]' is 'Primary'/'Secondary'/'Previous' and '[Value]' is the output of the Key)
    > Text within double braces {{ }} in the Key field will only display before the first Key.
    > Text within double braces {{ }} in the Value field will only display after the last Value.
    > [nl] will create a new line.

    FTP Group presents various methods of implementation, like the following 2 examples~

    Example of a Key:Value .ini file where only 'Primary' and 'Previous' outputs are selected:
    File Field: npgroup.ini
    Key Field: [key]:
    Value Field: [val][nl]
    Output:
    Primary:Value
    Previous:Value
    Example of PHP file where all three outputs are selected:
    File Field: npgroup.php
    Key Field: {{<?php[nl]}}$[key] =
    Value Field: "[val]";[nl]{{?>}}
    Output:
    <?php
    $Primary = "Value";
    $Secondary = "Value";
    $Previous = "Value";
    ?>
FTP Example
Here's an example implementation of osu!np to have the contents of the np.txt file uploaded to a server to generate a dynamic image in PHP and displayed on your Osu! Userpage.
This implementation will only work if you have a web server with the PHP GD library enabled in your 'php.ini' file.
[list:174ea]#1: Follow the 'FTP Instructions' from above to enable FTP in osu!np.
Note: This example assumes you're not using FTP Group.
For use with FTP Group, you will have to additionally substring/replace the contents stored in '$np'.

#2: Create a new PHP file and copy the below code and upload it to your web server. (The below example is saved as image.php in the root web directory).
#3: Add it as an image to your userpage or wherever else you would like it, like so:
[img]http://host.com/image.php[/img]
You will need the font 'calibril.ttf' (replace with any font of your choice) in the same directory you upload to.
(Thanks to givenameplz for the user friendly modifications.)

<?php
//File/Image Variables.
$txtFont = 'calibril.ttf'; //Location of uploaded ttf font.
$npFile = 'np.txt' //Location and name of output file. (Change depending on whether Primary/Secondary/Previous output)
$statusFile = 'status.txt' //Location and name of online status file.
$imageWidth = 620; //Desired width of the dynamic image.
$imageHeight = 10; //Desired height of the dynamic image.
$bgColour = array(0, 0, 0, 127); //Background Colour (0 to 255: Red, Green, Blue, Alpha)
$idleString = "Nothing Q^Q" //The message you have set in osu!np, for when you're not playing a map.

//Username Text.
$userString = "Username is"; //Your username, appears before status message by default. ("Username is [Online]")
$userColour = array(128, 64, 128); //Font colour. (0 to 255: Red, Green, Blue)
$userSize = 8; //Font size.
$userAngle = 0; //Text angle.
$userX = 1; //X Position.
$userY = 8; //Y Position.

//Status/Suffix Text.
$statusOnlineString = "[Online]"; //Status message displayed when you're online.
$statusOfflineString = "[Offline]"; //Status message displayed when you're offline.
$statusOnlineColour = array(0, 180, 0); //Font colour for online. (0 to 255: Red, Green, Blue)
$statusOfflineColour = array(180, 0, 0); //Font colour for offline. (0 to 255: Red, Green, Blue)
$statusSize = 8; //Font size.
$statusAngle = 0; //Text angle.
$statusX = $userX + 46; //X Position.
$statusY = 8; //Y Position.

$suffixOnlineString = "(*^v^)/"; //Additional string that appears after status message when you're online.
$suffixOfflineString = "(Q^Q)~"; //Additional string that appears after status message when you're offline.
$suffixOnlineColour = array(218, 54, 108); //Font colour for online. (0 to 255: Red, Green, Blue)
$suffixOfflineColour = array(218, 54, 108); //Font colour for offline. (0 to 255: Red, Green, Blue)
$suffixSize = 8; //Font size.
$suffixAngle = 0; //Text angle.
$suffixX = $statusX + 36; //X Position.
$suffixY = 8; //Y Position.

//'Now Playing' Text.
$npString = "Now Playing: " //Text displayed before map title by default.
$npColour = array(218, 54, 108); //Font colour. (0 to 255: Red, Green, Blue)
$npSize = 8; //Font size.
$npAngle = 0; //Text angle.
$npX = $suffixX + 34; //X Position.
$npY = 8; //Y Position.

//Map Title Text.
$mapColour = array(188, 54, 98); //Font colour. (0 to 255: Red, Green, Blue)
$mapSize = 8; //Font size.
$mapAngle = 0; //Text angle.
$mapX = $npX + 58; //X Position.
$mapY = 8; //Y Position.

//----------------------
//Important Stuff Below
header('content-type: image/png');
$image = imagecreatetruecolor($imageWidth, $imageHeight);
imagealphablending($image, false);
$bgCol = imagecolorallocatealpha($image, $bgColour[0], $bgColour[1], $bgColour[2], $bgColour[3]);
imagefill($image, 0, 0, $bgCol);
imagesavealpha($image, true);
$txtUserCol = imagecolorallocate($image, $userColour[0], $userColour[1], $userColour[2]);
$txtNPCol = imagecolorallocate($image, $npColour[0], $npColour[1], $npColour[2]);
$txtMapCol = imagecolorallocate($image, $mapColour[0], $mapColour[1], $mapColour[2]);
$txtSufOnCol = imagecolorallocate($image, $suffixOnlineColour[0], $suffixOnlineColour[1], $suffixOnlineColour[2]);
$txtSufOffCol = imagecolorallocate($image, $suffixOfflineColour[0], $suffixOfflineColour[1], $suffixOfflineColour[2]);
$np = file_get_contents($npFile, NULL, NULL, 0, filesize($npFile));
$status = file_get_contents($statusFile, NULL, NULL, 0, filesize($statusFile));

if(strpos($status,"Online") !== false && strpos($np,$idleMessage) !== false){
//Output if we're online but not playing anything.
$txtStatus = $statusOnlineString;
$txtStatusCol = imagecolorallocate($image, $statusOnlineColour[0], $statusOnlineColour[1], $statusOnlineColour[2]);
imagettftext($image, $suffixSize, $suffixAngle, $suffixX, $suffixY, $txtSufOnCol, $txtFont, $suffixOnlineString);
} elseif(strpos($status,"Offline") !== false){
//Output if we're offline.
$txtStatus = $statusOfflineString;
$txtStatusCol = imagecolorallocate($image, $statusOfflineColour[0], $statusOfflineColour[1], $statusOfflineColour[2]);
imagettftext($image, $suffixSize, $suffixAngle, $suffixX, $suffixY, $txtSufOffCol, $txtFont, $suffixOfflineString);
} else {
//Output if we're online playing a map!
$txtStatus = $statusOnlineString;
$txtStatusCol = imagecolorallocate($image, $statusOnlineColour[0], $statusOnlineColour[1], $statusOnlineColour[2]);
imagettftext($image, $suffixSize, $suffixAngle, $suffixX, $suffixY, $txtSufOnCol, $txtFont, $suffixOnlineString);
if(strlen($np) > 2){
imagettftext($image, $npSize, $npAngle, $npX, $npY, $txtNPCol, $txtFont, $npString);
imagettftext($image, $mapSize, $mapAngle, $mapX, $mapY, $txtMapCol, $txtFont, $np);
}

}
//Output Online/Offline message.
imagettftext($image, $userSize, $userAngle, $userX, $userY, $userCol, $txtFont, $userString);
imagettftext($image, $statusSize, $statusAngle, $statusX, $statusY, $txtStatusCol, $txtFont, $txtStatus);

imagepng($image);
imagedestroy($image);
?>
Example Outcome: (online/offline/online + playing map)
---

---

Known Issues
  • ★ Problem: Outputs are not updating.
    ☆ Solution: This is probably due to having "MSN Live display" option enabled (Config > Output tab) in osu!np (it's enabled by default) while having the "Integrate MSN Live.." option in osu! disabled. Simply either disable the option in osu!np if you don't wish to use the new output method, or enable the integration option in osu!
    ★ Problem: osu!np throws an 'access denied' exception when updating/starting.
    ☆ Solution: This issue should be fixed in 2.4, you'll need to manually update by downloading from the download link in this thread.
    ★ Problem: Upon starting osu!np, the icon is displayed in the taskbar but the window is not visible.
    ☆ Solution: This issue should be fixed since 2.3, but if you do experience it just do the following:
    Navigate to: C:\Users\Username\AppData\Local\Primpri\osu!np.exe_blarghh\2.4.0.0
    Open user.config in Notepad.
    Search for 'setPosition'.
    If the value is something bizarre, change it to 0, 0. Like:
    <setting name="setPosition" serializeAs="String">
    <value>0, 0</value>
    </setting>
    ★ Problem: osu!np will throw a System.InvalidOperation Exception and will not startup.
    ☆ Solution: This happens if you're using a version of osu!np prior to v2.2 or if you don't have WMP installed. (It's installed by default on Windows operating systems but you may have uninstalled it.)
    Control Panel > Programs & Features > Turn Windows features on/off > Media > Enable 'Windows Media Player' > Restart if necessary
TODO List (In order of priority)
  • ★ Implement user friendly method of creating PHP image.
    ☆ Finish implementation of localization.
    ★ Implement Skin Configuration which will allow you to select skin elements from all skins you currently have installed (in Songs & Skins folder) and create a new skin from them. All elements (including sounds) will be able to be previewed from within osu!np and will be displayed in an organized listed structure.
    ☆ Display the modes & difficulties available of Beatmaps listed.
Change Log
V2.4 - 22.06.14 - 776kb
  • ★ Implemented method to automatically find the osu! directory for default config.
    ☆ Fixed error when checking for map while spectating.
    ★ Fixed full screen issue by implementing alternative method of finding map, this new method is enabled by default and can be configured on the 'Output' tab of the config. (Requires the 'Integrate MSN Live Status Display' option to be enabled in osu!)
    Additionally, this new method supports finding the map playing on menu/beatmap selection which can either be output to a new file or override the idle message of an existing output.
    Note: When clicking the Start button with this new method, the output may only start updating after first beatmap selection. Additionally, previous output may not function (haven't tested).
    ☆ Fixed issue that could cause directories to not set correctly.
    ★ Updated the application icon to be less confusingly similar to the osu icon~ (Squares o3o)
    ☆ Small Hotfix: Fixed updating issue that would occur if you renamed osu!np.
V2.3 - 02.09.13 - 534kb
  • ★ Added the capability of selecting multiple maps from the Beatmap list in which all selected will be added to the download queue. (Ctrl + Click to highlight individually, Shift + Click to highlight a range).
    ☆ Fixed issue with file names of downloaded beatmaps of which contain special characters.
    ★ Map checking is now compatible with maps of which contain special characters.
    ☆ Map checking now has two fallback methods if the first pattern search attempt fails.
    ★ Map checking will now attempt to intelligently decide a correct map when more than one map is returned.
    ☆ Switched to using beatmap thumbnails provided by Hexide's mirror, as Osu! thumbnails were causing delays in beatmap listing (due to current server issues).
    ★ Added the capability of disabling the listing of thumbnails. Beatmap listing is much faster when thumbnails are removed so this will be useful if you wish to query many maps per page.
    ☆ Increased the limit to the amount of beatmaps you can display per page to 999. This is only recommended when you have the above IMG checkbox disable (you can toggle it during the query and you can abort the query if it's taking too long).
    ★ Fixed issue causing duplicate output when playing full length songs.
    ☆ Fixed issue preventing the Download/Play buttons from functioning if an error occured when attempting to process the selected/specified map.
    ★ Fixed issue causing some controls to display with a classic Windows visual style.
    ☆ Definitely have fixed the issue with the inability for a new version of osu!np to delete its old self.
V2.2 - 01.09.13 - 530kb
  • ★ Fixed the unicode issue again.
    ☆ Fixed issue with Beatmap list being transparent.
    ★ Added option for which output 'previous' should record from in the 'Output' tab.
    ☆ Fixed undesired behaviour of 'previous' output, will now only update when the current map playing is different.
    ★ Added option to choose whether to minimize to taskbar or tray in the 'General' tab.
    ☆ Added 'Debug' output option to the 'Output' tab, will append output log to file every 10 minutes.
    ★ Moved the osu!np Update button to the 'General' tab in 'Config'.
    ☆ Integrated the Beatmaps window into the main window, still need to toggle the 'Beatmaps' button to view it.
    ★ Downloading functionality has been re-designed, it now supports:
    ----★ Simultaneous downloads.
    ----★ Pausing/Resuming/Aborting of downloads.
    ☆ Changed "Preview" button to "Play Song" as it now supports playing full length songs instead of just preview.
    ★ Beatmaps in the list which have been played/downloaded will display in orange.
    ☆ Added dropdown box to select the media to play/download. (Beatmap / MP3 (Full) / Background)
    ----☆ Clicking the 'Download' button will: Download Beatmap / Download Full Length MP3 / Download Background
    ----☆ Clicking the 'Play Song' button will: Play Preview MP3 / Play Full Length MP3 / Play Preview MP3
    ★ 'Play Song' and 'Download' buttons will assume the desired map as the one selected in the Beatmap list unless an ID is defined in the MapID input box.
    ☆ Downloaded mp3's/backgrounds will be saved to the same directory as the directory used for downloading beatmaps to.
    ★ Added capability of stopping a song while it's playing.
    ☆ Added progress display of the song playing.
    ★ Added search functionality to the Beatmap listing to optionally limit results by search terms.
    ☆ Added option for determining what list results should be ordered by. (Date, ID, Name, Index)
    ★ Added button for determining whether to list results in ascending (ASC) or descending (DESC) order.
    ☆ Beatmap listing can now be aborted during the current page listing.
    ★ Made several changes to the UI of osu!np.
    ★ All windows can now be resized to meet user preference.
    ☆ Fixed issue causing InvalidOperation exception.
    ★ Fixed issue causing exception on beatmap search, maps with no returned image will now display a default image.
    ☆ Fixed issue with 'Default' button failing to reset to default settings.
    ★ Fixed issue preventing osu!np from removing older version after update.
    ☆ Started adding localisation to the config, this feature is not yet functional, check the first post for more details if you would like to help with localisation.
V2.1 - 25.08.13 - 600kb
  • ★ Make Unicode data output the Non-Unicode variant if it returns nothing.
    ☆ Beatmaps in the download list will now display a green ID if they're already installed.
    ★ Fixed escaping issue with POST requests.
    ☆ Added threading to map checking, no more hanging~!
    ★ Made map checking even more efficient by changing the method used to find and read from maps.
    ☆ Added function for removing characters from MapName before map checking to prevent no map being returned.
    ★ Removed additional blank lines from all outputs.
    ☆ Fixed yet another issue with importing configs.
    ★ Fixed issue related to osu!test (Definitely working now >-<! Thanks to Givenameplz for gifting Supporter so I could debug this)
    ☆ Redesigned MapChecking/FTP/POST functionalities to make them more efficient.
    ★ Added a notice message which outputs whether more than one result was returned when MapChecking. This is a limitation of osu!np due to the nature of how map data is obtained. osu!np does not have access to the ID of a Mapset instantly so it's unable to determine which map is truly being played if there are two or more maps with identical Name & Difficulty. I am currently attempting to figure out a solution for this.
    ☆ Added web status handling to map requests, will now return error if the MapID does not return a preview/download.
    ★ Added functionality for removing Videos (of format avi/flv/wmp/mpg) and Images (of format jpg/png). Only images below the specified Dimensions will be removed (Default: 640x480), and images of which are corrupt for whatever reason will be skipped but the directory of that image will be outputted to the log for manual deletion.
    ☆ Fixed issue which presented an error after closing osu!np while it was still processing. osu!np will now minimize to tray before closing if it still needs to finish processing whatever it's doing.
    ★ Setting osu!np to default settings will now clean up any old settings that have been removed.
    ☆ Potentially fixed error some users may have experienced when attempting to launch osu!np v2.0
    ★ Added better error checking, with more useful output. (If you receive errors, PM them to me)
V2.0 - 19.08.13 - 587kb
  • ★ Changed styles to System defaults.
    ☆ Additional windows (Config/Update/Beatmaps) will now close when osu!np is minimized.
    ★ Additional windows will now retain focus of osu!np main window.
    ☆ Fixed importing exception caused by the previous update.
    ★ Partially encoded MapName when saving downloaded MapID's.
    ☆ Encoded data sent via POST.
    ★ Potentially fixed issue causing osu!np to throw an error when closing.
    ☆ Added map song previewing functionality, right-click the map download button to preview.
    ★ Added multi-line log to replace the current log output from various functions, regular info messages will be displayed on the osu!np title instead.
    ☆ Added 'Beatmaps' list to allow for Querying/Previewing/Downloading of all ranked/approved Beatmaps.
v1.9 - 17.08.13 - 367kb
  • ★ Added button to allow user to launch osu!/osu!test (left/right click).
    ☆ Made several changes to make osu!np more efficient.
    ★ Fixed issue causing update setting to be ignored.
    ☆ Addressed exception when attempt to connect to FTP fails.
    ★ Fixed issue causing FTP to overwrite primary output.
    ☆ FTP will now correctly send offline status when the osu! process is not running.
    ★ FTP now uses threading to reduce hanging, only map checking should cause hangs for now.
    ☆ Status messages of FTP will now display on osu!np title to not conflict with other status messages.
    ★ Changed FTP Upload to additionally support uploading Secondary/Previous outputs.
    ☆ Added option of whether to group outputs when uploading to FTP, more info on this in the 'FTP Grouping' section.
    ★ Implemented method for sending status and outputs to a PHP page using POST method, more info on this in the 'POST' section.
v1.8 - 14.08.13 - 347kb
  • ★ Added ability to optionally downloading maps without video.
    ☆ Added recent updates display to client.
    ★ Potentially fixed implemented support for osu!test client. (Needs confirmation)
v1.7 - 14.08.13 - 351kb
  • ★ Added optional auto-updating of the osu!np client. (Will soon add option to view latest changes after updating)
    ☆ Added User-Agent header for map downloads which corresponds to the current version.
v1.6 - 14.08.13 - 348kb
  • ★ Improved efficiency with several features of osu!np (like querying map data, and downloading maps/osu!np updates). The UI should no longer hang for these features, still working on other improvements.
    ☆ Made changes to the command formatting, allowing for text to be grouped with a command so if the command returns nothing, the text will not output at all.
    The new format is: {Prefix[C]Suffix} (The prefix/suffix are optional text)
    Example: {np: [np]} {[diff]} Commands without optional text will still require the {} braces for now, eg: {[np]}
    ★ Support for downloading maps is back using Hexide's mirror, maps will now be correctly named and can easily be installed to Osu!
    ☆ Implemented support for osu!test client.
    ★ Fixed casting error when exporting config.
    ☆ Fixed unhandled exception when attempting to import when no config is found.
    ★ May have potentially fixed the problem which was making few users unable to start osu!np.
v1.5 - 02.08.13 - 342kb
  • ★ Fixed problem that some users may have experienced when attempting to start osu!np.
    ☆ Still need to find time to get Hexide's download mirror implemented.
    ★ Added link to previous versions on the thread, only versions which work are listed but they may contain bugs.
v1.4 - 29.07.13 - 340kb
  • ★ Updated main thread post with OBS/XSplit instructions.
    ☆ Changed extraction method to reduce file size (required changing from .rar to .zip so using the update button in versions previous to v1.4 will not work).
    ★ Made 'Primary Output' optional.
    ☆ Added optional 'Secondary Output'.
    ★ Added optional 'Previous Output'.
    ☆ Adjusted the config UI. (Everything looked normal on my custom theme, forgot to try it with a normal Windows theme >-<)
v1.3 - 07.06.13 - 3.45mb
  • ★ Added capability of auto-applying update after downloading an updated version of osu!np.
    ☆ Added optional export/import of settings when updating.
    ★ Fixed downloading error due to file naming issue.
    ☆ Minor optimizations.
    ★ Minor UI changes.
v1.2 - 07.06.13 - 347kb
  • ★ Fixed crash caused by directory fields being left blank.
v1.1 - 07.06.13 - 347kb
  • ★ Moved the directory input fields to the Config window on a new 'Directory' tab.
    ☆ Removed the Prefix/Suffix input fields and replaced with one main field for all output.
    ★ Seperated output and idle input fields as a result of the above change. (Idle field becomes the output preview when the Start button is pressed).
    ☆ Added the capability of exporting/importing saved settings, so you can preserve your settings if you wish whenever osu!np is updated.
    ★ Mediafire download mirror is being a bit iffy again. >-<
v1.0 - 03.06.13 - 344kb
  • ★ Increased the width of the main window by 100px to make it easier to read the Prefix/Suffix fields.
    ☆ Added many additional commands for map data.
    ★ Fixed directory error with auto installation of downloaded maps.
    ☆ Optimized some code for efficiency.
    ★ Mediafire download mirror is now working again. >-<
v0.9 - 02.06.13 - 338kb
  • ★ Fixed minor bug caused by latest Osu! update.
v0.8 - 02.06.13 - 338kb
  • ★ Added new [nl] command which enables you to create new lines.
    ☆ Removed case sensitivity from commands so now you can input like [DIFF] or [diff] etc.
    ★ Added description of commands in the 'Config' on the 'General' tab.
v0.7 - 01.06.13 - 336kb
  • ★ Minor update to address bug with progress bar splitting.
v0.6 - 01.06.13 - 336kb
  • ★ Added capability of downloading by Map ID and optionally allowing auto-installation of maps - makes it easy to install maps when you reach the Osu! download limit.
    ☆ Added capability of restoring osu!np settings to their default values.
    ★ Added update checking (requires you to manually click the Update button for now).
    ☆ Changed default output directory to application directory.
    ★ Optimized user interface, added directory browsing buttons.
    ☆ Changed 'FTP' button to 'Config', to include additional options.
v0.5 - 24.05.13 - 313kb
  • ★ Added support for output to web server through FTP.
    ☆ Few optimizations, but osu!np process will hang during prior connection to FTP (only a bit of an issue if you click Start button during map play).
v0.4 - 21.05.13 - 233kb
  • ★ Various minor bug fixes and optimizations, improved error handling.
    ☆ Fixed crash when Osu! process is terminated.
    ★ Added a status label to make the program more user friendly.
v0.3 - 16.05.13 - 228kb
  • ★ Added capability of adding [DL] to prefix/suffix in order to output the download link of the map you're currently playing.
v0.2 - 15.05.13 - 215kb
  • ★ Little UI enhancements like minimize to tray.
    ☆ Ability to change text displayed when no map is currently playing.
    ★ Variable saving implemented.
Piotrekol
Since I have similar thingy on my PC: You can always(besides map choosing- it never changes there) get map name/diff using MSNWindow hook and enabling this in osu!
If you want I can give you a (C#)code for this.
Topic Starter
Primula_old
Added support for uploading to web server, among other smaller updates~ ^-^
givenameplz
Greetings!

First of, good job on your application, I like the idea of it and will keep using it.
I will just go on with some feedback and suggestions I guess, lets see.

Feeback/Suggestions:
  1. Increase size of the texts, they appear really small for me.
  2. Think of other fun things to include, as querying the picture of the song playing.
    (But thats just something fancy I would like, tee-hee. After all it would be something thats only interesting for the PHP part I guess.)
  3. Maybe more placeholders like [Diff] and [DL] for the user to input.
  4. As for the placeholders, I didn't read it anywhere in the app, but you should put a note somewhere what they do and which exist.
    (I know its written here in your post, but as you are already using a MouseOver hint, the bottom right string, you could maybe put something like this there.)
The PHP part:
I loved the idea with PHP, as I like working with it, I had to try this idea out, but I noticed a few things so...
I hope you don't mind, but I made a few changes, because on other user names (like mine), it keeps overlapping:


I changed it a litte, its not perfect, but its working good so far.
Every username should be fine now, as its calculated by its pixel width with a offset:


The code for the "image.php"
<?php
/* ############################################################# */
// Simply put your user name and desired font here and you are set!
$user = "givenameplz";
$txtFont = 'calibri.ttf'; // File has to be in the same folder as this file!
/* ############################################################# */
// If you want to change the output messages, please do it here.
$output_is = "is";
$outputHappy = "(*^v^)/";
$outputSad = "(Q^Q)~";
$output_nowplaying = "Now Playing:";
/* ############################################################# */
// If you have no idea whats going on, don't touch anything below~

// Adding spaces~
$output_is = " ".$output_is." ";
$outputHappy = " ".$outputHappy;
$outputSad = " ".$outputSad;
$output_nowplaying = " ".$output_nowplaying." ";

header('content-type: image/png');
$image = imagecreatetruecolor(620, 10);
imagealphablending($image, false);
$bgCol = imagecolorallocatealpha($image, 0, 0, 0, 127);
imagefill($image, 0, 0, $bgCol);
imagesavealpha($image, true);

$txtCol = imagecolorallocate($image, 128, 64, 128);
$txtNPCol = imagecolorallocate($image, 218, 54, 108);
$txtMapCol = imagecolorallocate($image, 188, 54, 98);
$txtSize = 8;
$txtAngle = 0;
$txtX = 1;
$txtY = 8;

$offset = calcMyFontPlz($user.$output_is,$txtFont,$txtSize,$txtAngle); // Offset for USERNAME is...

$np = file_get_contents('np.txt', NULL, NULL, 0, filesize('np.txt'));
$status = file_get_contents('status.txt', NULL, NULL, 0, filesize('status.txt'));

if(strpos($status,"Online") !== false && strpos($np,"Nothing Q^Q") !== false){
//Output if we're online but not playing anything
$txtStatus = "[Online]";
$txtStatusCol = imagecolorallocate($image, 0, 180, 0);
$offset2 = calcMyFontPlz($txtStatus,$txtFont,$txtSize,$txtAngle);
imagettftext($image, $txtSize, $txtAngle, $txtX + $offset + $offset2, $txtY, $txtCol, $txtFont, $outputHappy);
} elseif(strpos($status,"Offline") !== false){
//Output if we're offline
$txtStatus = "[Offline]";
$txtStatusCol = imagecolorallocate($image, 180, 0, 0);
$offset2 = calcMyFontPlz($txtStatus,$txtFont,$txtSize,$txtAngle);
imagettftext($image, $txtSize, $txtAngle, $txtX + $offset + $offset2, $txtY, $txtCol, $txtFont, $outputSad);
} else {
//Output if we're online playing a map!
$txtStatus = "[Online]";
$txtStatusCol = imagecolorallocate($image, 0, 172, 0);
$offset2 = calcMyFontPlz($txtStatus,$txtFont,$txtSize,$txtAngle);
imagettftext($image, $txtSize, $txtAngle, $txtX + $offset + $offset2, $txtY, $txtCol, $txtFont, $outputHappy);
if(strlen($np) > 2){
$offset2 += calcMyFontPlz($outputHappy,$txtFont,$txtSize,$txtAngle);
imagettftext($image, $txtSize, $txtAngle, $txtX + $offset + $offset2, $txtY, $txtNPCol, $txtFont, $output_nowplaying);
$offset2 += calcMyFontPlz($output_nowplaying,$txtFont,$txtSize,$txtAngle);
imagettftext($image, $txtSize, $txtAngle, $txtX + $offset + $offset2, $txtY, $txtMapCol, $txtFont, $np);
}

}
//Output Online/Offline message.
imagettftext($image, $txtSize, $txtAngle, $txtX, $txtY, $txtCol, $txtFont, $user.$output_is);
imagettftext($image, $txtSize, $txtAngle, $txtX + $offset, $txtY, $txtStatusCol, $txtFont, $txtStatus);

imagepng($image);
imagedestroy($image);

function calcMyFontPlz($string, $font, $size, $angle)
{
$result = imagettfbbox($size,$angle,$font,$string);
return $result[2];
}
?>
(If you like, you can use it or change it as much as you want. Well, I did the same to yours. Hehe)

Anyways, keep going. And thanks for developing this application.

Best wishes,

-givenameplz
TakuMii
I'm liking this program (planning to use it as a song display whenever I livestream), but I think I found a bug. When playing through a song, osu!np records the progress bar in the text once you play through 5% of the song (or when the progress bar in the window title updates), replacing the suffix tags:
Italobrothers - Stamp On The Ground [Insane] [--|------------------]
EDIT: If you remove all of the suffixes, then the difficulty appears at the 5% mark.
Topic Starter
Primula_old

YayMii wrote:

I'm liking this program (planning to use it as a song display whenever I livestream), but I think I found a bug. When playing through a song, osu!np records the progress bar in the text once you play through 5% of the song (or when the progress bar in the window title updates), replacing the suffix tags:
Italobrothers - Stamp On The Ground [Insane] [--|------------------]
EDIT: If you remove all of the suffixes, then the difficulty appears at the 5% mark.
Yeah, I recently only just realized what that bar is for lol.
I might use it to optionally output your progress in the map.

Updated to v0.6 but still need to fix that issue. >-<
Edit: Updated to v0.7 to fix the issue~! ^-^

As for your suggestions, givenameplz.
Increase size of the texts, they appear really small for me.
I increased it a little, hope it's okay o.o I'd like to keep it compact considering it's an application which should just run in the background most of the time.

Think of other fun things to include, as querying the picture of the song playing.
I have a few ideas, not too sure how to get the picture of a map (is there a different ID for a mapset maybe? I guess that'd be why >-<)

Maybe more placeholders like [Diff] and [DL] for the user to input.
I'm not sure what else there is to output, (otherthan the many possibilities of map data).

As for the placeholders, I didn't read it anywhere in the app, but you should put a note somewhere what they do and which exist.
I'll add command info to the config window soon~!


--
Thank you both for the feedback~! (*^▽^)/
givenameplz
Update is looking good~

Primula wrote:

[...]
Think of other fun things to include, as querying the picture of the song playing.
I have a few ideas, not too sure how to get the picture of a map (is there a different ID for a mapset maybe? I guess that'd be why >-<)
[...]
The picture of the map thing was just something that came to mind as an example, looking forward to your ideas for more features!

Primula wrote:

[...]
Maybe more placeholders like [Diff] and [DL] for the user to input.
I'm not sure what else there is to output, (otherthan the many possibilities of map data).
[...]
Just another thought aswell, I myself can't think of useful things to output.

Primula wrote:

[...]
As for your suggestions, givenameplz.
Increase size of the texts, they appear really small for me.

I increased it a little, hope it's okay o.o I'd like to keep it compact considering it's an application which should just run in the background most of the time.
[...]
Looking perfect! Thanks, I like the compact design, its just that I don't want to put on my reading glasses. (As I would need to buy some in the first place!)
Thats why I asked.
TakuMii
Woah, you update fast. Just hours after my post, and you already fixed the issues I found!

As for the suffix data, the only thing I can think of that might be useful is having the mapper's name. Another feature that could potentially be useful would be the ability to export the data in multiple lines. Anyways, keep up the good work!
Topic Starter
Primula_old

YayMii wrote:

Woah, you update fast. Just hours after my post, and you already fixed the issues I found!

As for the suffix data, the only thing I can think of that might be useful is having the mapper's name. Another feature that could potentially be useful would be the ability to export the data in multiple lines. Anyways, keep up the good work!
Updated to v0.8 with the newline feature you recommended. ^-^
Still working on commands for other map data.
TakuMii
peppy removed the progress bar from the titlebar in the newest update (since it's completely unnecessary, there is a progress bar/pie on the screen already), but I think this caused osu!np to stop working :/
Topic Starter
Primula_old
Fixed it by reverting the other fix yesterday xD
rexcannon
I was just thinking of something like this last night, great job guys.
Topic Starter
Primula_old
Updated with new commands for outputting map data (like map creator, tags, map id, difficulty variables etc + url for mapset image)
Topic Starter
Primula_old
Planning on adding support for generating dynamic signatures that will update your score and such along with your currently playing map/status (the score/pp/acc and whatever would be retrieved from Osu! in intervals, status/np retrieved from osu!np (at a user defined interval) in order to reduce load on the Osu! side of things).

Would be mostly a PHP implementation and I'll probably add my server as a method to upload to which will also mean not needing your own FTP server anymore for uploading the np/status.
TakuMii
Just tried the newest version, and I have a few suggestions:
1. Since you already added the commands for songtitle and artist, why not just use one big text field instead of 3 smaller ones?
2. How about 2 different lines for when you're playing a song and when you're not? I have mine saying "Mapped by: [c]" and the "Mapped by:" part shows up even when I'm not playing a song.
3. Maybe save the configuration to a file? My settings seem to be resetting every update.
Topic Starter
Primula_old

YayMii wrote:

Just tried the newest version, and I have a few suggestions:
1. Since you already added the commands for songtitle and artist, why not just use one big text field instead of 3 smaller ones?
2. How about 2 different lines for when you're playing a song and when you're not? I have mine saying "Mapped by: [c]" and the "Mapped by:" part shows up even when I'm not playing a song.
3. Maybe save the configuration to a file? My settings seem to be resetting every update.
1. The middle field was individual to be used as feedback so you know whether the current song is being outputted and also was used to set the idle message, but I'll make the following changes for that:
-Add a new field which previews the contents of what is being saved to output.
-Add an idle message field which replaces the above field when no map is playing.
The command [np] will output both Artist + Title (in format "Artist - Title" like it does now) without checking the file (a little faster), but if for whatever reason you want to output them separately, the option is there with using [a] [t] commands instead.

2. The new implementation of your above suggestion means that only the idle field would be outputted when not playing a map.

3. I'll add an "Import/Export Settings" function to the Config to allow for:
Exporting when you update - A message box will appear after checking for update asking whether you want to export settings (this will also tie in with auto-updating in future).
Importing after the update - If an exported file is found, settings will be imported and osu!np will restart, the file will then be deleted after.
I don't want to include such a file with the program, but I feel the above is a user friendly alternative. (and there's no need to have a permanent file because no settings are required at startup).
Topic Starter
Primula_old
Okis, all your suggestions are now implemented in v1.1, YayMii. :3

I was going to make it possible to do commands like: [Creator: c] so 'Creator:' would only show if 'c' existed, but it's a bit fiddly (very much dependant on what text is enclosed) and not very necessary because I've split the idle and output messages now. Only time something like that is needed is when the information really doesn't exist (some maps don't have creators listed or something? >-<)
I think I could do something like [Creator: <c>] quite easily, I'll get around to it when I have time.
TakuMii

Primula wrote:

Okis, all your suggestions are now implemented in v1.1, YayMii. :3

I was going to make it possible to do commands like: [Creator: c] so 'Creator:' would only show if 'c' existed, but it's a bit fiddly (very much dependant on what text is enclosed) and not very necessary because I've split the idle and output messages now. Only time something like that is needed is when the information really doesn't exist (some maps don't have creators listed or something? >-<)
I think I could do something like [Creator: <c>] quite easily, I'll get around to it when I have time.
Thanks for another quick update, but this time it looks like the directories aren't saving properly and is causing problems :?
I'm getting crashes and this error whenever I try to change the directory:
System.ArgumentException: Empty path name is not legal.
See the end of this message for details on invoking 
just-in-time (JIT) debugging instead of this dialog box.

************** Exception Text **************
System.ArgumentException: Empty path name is not legal.
at System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy, Boolean useLongPath, Boolean checkHost)
at System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize)
at System.IO.File.Create(String path)
at OsuNP.frmOsuNP.resetNP()
at OsuNP.frmOsuNP.cmdToggle_Click(Object sender, EventArgs e)
at System.Windows.Forms.Control.OnClick(EventArgs e)
at System.Windows.Forms.Button.OnClick(EventArgs e)
at System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
at System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
at System.Windows.Forms.Control.WndProc(Message& m)
at System.Windows.Forms.ButtonBase.WndProc(Message& m)
at System.Windows.Forms.Button.WndProc(Message& m)
at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)


************** Loaded Assemblies **************
mscorlib
Assembly Version: 4.0.0.0
Win32 Version: 4.0.30319.18033 built by: FX45RTMGDR
CodeBase: file:///C:/Windows/Microsoft.NET/Framework/v4.0.30319/mscorlib.dll
----------------------------------------
osu!np
Assembly Version: 1.1.0.0
Win32 Version: 1.1.0.0
CodeBase: file:///C:/Users/BlooMassacre/Documents/osu!np/osu!np.exe
----------------------------------------
Microsoft.VisualBasic
Assembly Version: 10.0.0.0
Win32 Version: 11.0.50709.17929 built by: FX45RTMREL
CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/Microsoft.VisualBasic/v4.0_10.0.0.0__b03f5f7f11d50a3a/Microsoft.VisualBasic.dll
----------------------------------------
System
Assembly Version: 4.0.0.0
Win32 Version: 4.0.30319.18033 built by: FX45RTMGDR
CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System/v4.0_4.0.0.0__b77a5c561934e089/System.dll
----------------------------------------
System.Core
Assembly Version: 4.0.0.0
Win32 Version: 4.0.30319.17929 built by: FX45RTMREL
CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Core/v4.0_4.0.0.0__b77a5c561934e089/System.Core.dll
----------------------------------------
System.Windows.Forms
Assembly Version: 4.0.0.0
Win32 Version: 4.0.30319.18037 built by: FX45RTMGDR
CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Windows.Forms/v4.0_4.0.0.0__b77a5c561934e089/System.Windows.Forms.dll
----------------------------------------
System.Drawing
Assembly Version: 4.0.0.0
Win32 Version: 4.0.30319.18022 built by: FX45RTMGDR
CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Drawing/v4.0_4.0.0.0__b03f5f7f11d50a3a/System.Drawing.dll
----------------------------------------
System.Runtime.Remoting
Assembly Version: 4.0.0.0
Win32 Version: 4.0.30319.17929 built by: FX45RTMREL
CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Runtime.Remoting/v4.0_4.0.0.0__b77a5c561934e089/System.Runtime.Remoting.dll
----------------------------------------
System.Configuration
Assembly Version: 4.0.0.0
Win32 Version: 4.0.30319.17929 built by: FX45RTMREL
CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Configuration/v4.0_4.0.0.0__b03f5f7f11d50a3a/System.Configuration.dll
----------------------------------------
System.Xml
Assembly Version: 4.0.0.0
Win32 Version: 4.0.30319.18033 built by: FX45RTMGDR
CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Xml/v4.0_4.0.0.0__b77a5c561934e089/System.Xml.dll
----------------------------------------

************** JIT Debugging **************
To enable just-in-time (JIT) debugging, the .config file for this
application or computer (machine.config) must have the
jitDebugging value set in the system.windows.forms section.
The application must also be compiled with debugging
enabled.

For example:

<configuration>
<system.windows.forms jitDebugging="true" />
</configuration>

When JIT debugging is enabled, any unhandled exception
will be sent to the JIT debugger registered on the computer
rather than be handled by this dialog box.
Topic Starter
Primula_old
I'm not sure how to troubleshoot your error, what exactly do you do to cause it?
Directories are saving fine for me, and it only crashes if the directories are left blank.

Try deleting your old settings file (remove folder: C:\Users\..\AppData\Local\Primpri)

Ensure output directory contains the file to output like: C:\Users\..\Desktop\np.txt
Ensure Osu! directory is correct like: C:\Program Files\Osu (no trailing slash)

On the 'Upload' tab, only check 'Playing' and 'Online Status' if you're uploading through ftp.
and ensure the ftp field is an existing web directory like: ftp://host.com/www/np/ (this path varies so you might require something else)

Ensure you're clicking 'Save' when exiting the Config after updating the directories, not 'Close' (might seem obvious >-<)
peppy
You'll probably have a lot easier time using the new last.fm scrobbling plus the last.fm api to get currently playing tracks from osu!, if you feel like switching over.
TakuMii

Primula wrote:

I'm not sure how to troubleshoot your error, what exactly do you do to cause it?
Directories are saving fine for me, and it only crashes if the directories are left blank.

Try deleting your old settings file (remove folder: C:\Users\..\AppData\Local\Primpri)

Ensure output directory contains the file to output like: C:\Users\..\Desktop\np.txt
Ensure Osu! directory is correct like: C:\Program Files\Osu (no trailing slash)

On the 'Upload' tab, only check 'Playing' and 'Online Status' if you're uploading through ftp.
and ensure the ftp field is an existing web directory like: ftp://host.com/www/np/ (this path varies so you might require something else)

Ensure you're clicking 'Save' when exiting the Config after updating the directories, not 'Close' (might seem obvious >-<)
I found the issue... hitting the X button on the config window at any time causes the whole config to clear itself.
Topic Starter
Primula_old

YayMii wrote:

I found the issue... hitting the X button on the config window at any time causes the whole config to clear itself.
Ah, I'm glad it's a simple issue lol.
Was rattling my brain for an hour trying to recreate it. >-<!!
Dexus

peppy wrote:

You'll probably have a lot easier time using the new last.fm scrobbling plus the last.fm api to get currently playing tracks from osu!, if you feel like switching over.

Ooo? So that's why last.fm was integrated; How do you set it up exactly? I've not really looked into it.
TakuMii
Two more feature requests: is there a way you could give an option to display the beatmap link as osu.ppy.sh/b/# (difficulty specific) instead of osu.ppy.sh/s/# (song specific)? And is there a way you could display the difficulty mods in use? Thanks!
Oh, BTW, I'm not using this for the !np command in chat, I'm actually using it with OBS to display the song title/link on-screen when streaming :) Some of my viewers were asking how I did it, and I directed them here. Maybe you could include instructions on how to set that up in the OP? I could help, if needed.

Dexus wrote:

Ooo? So that's why last.fm was integrated; How do you set it up exactly? I've not really looked into it.
Just go to your profile, and on the left bar you should see a "connect to last.fm" link. Once you connect your profile, osu! should automatically scrobble your songs as you play the game.
peppy
http://www.last.fm/api/show/user.getRecentTracks if interested in accessing the last.fm api for consumption. It's pretty straightforward :).
Topic Starter
Primula_old

YayMii wrote:

Two more feature requests: is there a way you could give an option to display the beatmap link as osu.ppy.sh/b/# (difficulty specific) instead of osu.ppy.sh/s/# (song specific)? And is there a way you could display the difficulty mods in use? Thanks!
Oh, BTW, I'm not using this for the !np command in chat, I'm actually using it with OBS to display the song title/link on-screen when streaming :) Some of my viewers were asking how I did it, and I directed them here. Maybe you could include instructions on how to set that up in the OP? I could help, if needed.
For your first request, that's already possible.
You can type: http://osu.ppy.sh/b/[mid] to output with the MapID.
Additionally you could manually output to other download mirrors depending on what data the mirror accepts (some use MapID [mid]. some use MapsetID [msid], others use full map names).

As for mods, I don't think that is possible. ;---;

I'll edit the OP to include OBS/XSplit output instructions tomorrow morning, need sleep.
Cons
Just wanted to add something for people who use Nightbot on Twitch.tv

You can add a custom command to your Nightbot (like the IRC suggestion made here) but I prefer Nightbot's custom command.

Ex of custom command: Now Playing: $(customapi http://www.yourhost.com/np/np.txt)

Also, thanks for making this tool. I seem to be having a problem with my ftp connection now though :( it just keeps uploading blank np.txt files

UPDATE: After a while it'll upload non-blank np.txt files however they refuse to be customized xD They just output the Artist and Title
formi
Using this since a few weeks now and really enjoy it :)

But there might be a feature which would just make it even more awesome.
- An option to add a 2nd output file.

Because I am thinking about the following setup:
* one .txt with Artist + Tile to show it on Stream.
* an additional one just for an Irc-bot output.
TakuMii
I have an idea to go with xformi's idea: How about an option to keep the last-played song in another file? Just in case I begin playing another song and someone asks for the song I already finished.
Topic Starter
Primula_old
Also, thanks for making this tool. I seem to be having a problem with my ftp connection now though :( it just keeps uploading blank np.txt files

UPDATE: After a while it'll upload non-blank np.txt files however they refuse to be customized xD They just output the Artist and Title
The PHP side of things wasn't intended to output much song data at first but it's on the TODO list.

The FTP uploading is a little iffy, the first connection can take a little bit of time, so there could be issues for when you're playing a map while it's connecting.
Will make an alternative method to update through PHP without the need for FTP.

- An option to add a 2nd output file.
Okidoki

I have an idea to go with xformi's idea: How about an option to keep the last-played song in another file? Just in case I begin playing another song and someone asks for the song I already finished.
Okidoki x2


Will also make it possible to make all output methods optional (so no longer needing to output locally if you only plan to output to server or something).

Will start working on changes tonight, haven't touched it for a while, been pretty busy~ Q^Q
[-Wolfie-]
anyone know how to set up with OBS
Dexus
Is there a mirror for this? The mediafire link does not work.
TakuMii

Dexus wrote:

Is there a mirror for this? The mediafire link does not work.
The link works, but you have to wait 2 seconds for the page to redirect.

(or you could just click this link)
Synthox_old
Wow this is pretty nice.
Dexus

YayMii wrote:

The link works, but you have to wait 2 seconds for the page to redirect.

(or you could just click this link)
oh, thanks!
Topic Starter
Primula_old
I updated the download link, Mediafire direct links are only temporary apparently. >-< But yush, you just have to wait for the page to redirect to the correct location whenever that happens.

I've been working on changes all day today, so the next update should be available by tonight.
Been busy all summer and still am fairly busy, but trying to get around to things !

There's an issue that two people have reported to me which started from v0.6 that causes osu!np not to start at all, I'm still not sure on how to fix that but it's not my priority at the moment. ;--; If you do ever have this problem, see whether an error is output to the Windows event log and PM me it, will try to work on fixing it in the version after next.

The map downloading will still be buggy in 1.4, I still have plans to switch to using Hexide's Mirror, just need to get around to it~!
(Might include it in 1.4 if I have time, else it'll be in 1.5 at the latest. It's not a priority as it's not the focus of this program, just a useful addon.)
Topic Starter
Primula_old
Okidoki, v1.4 is up now with the following changes~
  • ★ Updated main thread post with OBS/XSplit instructions.
    ☆ Changed extraction method to reduce file size (required changing from .rar to .zip so using the update button in versions previous to v1.4 will not work).
    ★ Made 'Primary Output' optional.
    ☆ Added optional 'Secondary Output'.
    ★ Added optional 'Previous Output'.
    ☆ Adjusted the UI a little. (Everything looked normal on my custom theme, forgot to try it with a normal Windows theme >-<)
One tiny bug I forgot to address: Unhandled exception when attempting to import and no import file is found.
Villani
I keep getting this error when trying to launch osu!np...

That's the v1.4

This is the first time trying to use this program... So haven't had a go with the earlier versions.
Piotrekol
  • ☆ [t] - Song Title.
    ☆ [tu] - Song Title in unicode.
    ☆ [a] - Song Artist.
    ☆ [au] - Song Artist in unicode.
    ☆ [c] - Map Creator.
    ☆ [tag] - Map Tags.
    ☆ [mid] - Map ID.
    ☆ [msid] - Mapset ID.
☆★ Map Difficulty Commands
  • ☆ [diff] - Map Difficulty.
    ☆ [hpd] - HP Drain Rate.
    ☆ [cs] - Circle Size.
    ☆ [od] - Overall Difficulty.
    ☆ [ar] - Approach Rate.
    ☆ [sm] - Slider Multiplier.
    ☆ [st] - Slider Tick Rate.
are these working?(not that it matters for me- I have my prog for it ;w; )
because I tried using map/mapset ID's and it didn't work (v1.5)
TakuMii

Piotrekol wrote:

/snip
are these working?(not that it matters for me- I have my prog for it ;w; )
because I tried using map/mapset ID's and it didn't work (v1.5)
As far as I'm aware, you need to properly set your osu! directory in the config for the map info and IDs to function.
Piotrekol
I did set osu! path.
Got it kinda...working
It seems that this "id searching" is sometimes taking way too long- I thought it was just crashing or sth. and i was force-closing it(took about 30seconds before app got responsive again) and sometimes it doesn't show ID at all
2 examples of maps that don't give me any id(can easily give more if needed)
https://osu.ppy.sh/s/5139
https://osu.ppy.sh/s/3000
old maps *.osu's doesn't contain any misc info and that's what is causing that...(at least i think that's the reason)
Topic Starter
Primula_old
Yes, some maps don't contain certain map data so it returns nothing, at some point I was going to make it possible to output text within a command so that the text itself doesn't output if the command returns nothing.
Eg. "np: [np]{ | Mapset: [mid]}" would return "np: Artist - Title | MapID: #" if there is an ID found and "np: Artist - Title" if there isn't.
I did get this working at some point but I had a slight issue with it at the time which I was too tired to fix lol, will get it working again soon, it's not difficult~

The problem with the client hanging is that I didn't bother using threading to begin with because at first it wasn't necessary >-<
I never bothered addressing it because assuming you're currently playing Osu!, you don't need to interact with osu!np while it's processing everything (and it should only hang at the start of a map).
Efficiency is something I'll get around to though, there's just a lot of things that need to be changed ;--;!
321jurgen
Thanks alot. Works great!
TakuMii
Gah, I have a feature request that I don't know if you can fulfill >//<
The recent changes made to osu!test were to encourage bugtesters+etc to switch to osu!test permanently... however osu!np doesn't work with it (osu!np gets stuck at "Attempting to find osu!") so I'm forced to move back to the public build every time I want to livestream. Since collections don't carry over between the public and test builds, it makes it somewhat more difficult to switch back and forth. If osu!np had support for the test build, this would be a non-issue.
But since you no longer have supporter, I don't know if this would be possible. Hopefully this is an easy change (the osu!test window title is "osu!test bYYYYMMDD" with the current date, instead of just "osu!"). If there's any way that I could help, I'd be glad to :)
Topic Starter
Primula_old
Not an issue.
I just need to additionally check for 'osu!test' process and check window title as 'osu!test b########' if osu!test is running.

I may instead (or additionally) just allow user to add an additional window title to check for in case the title format changes in future.
(So if it can't find the normal osu!, it'll check for what the user defines)

Edit: Probably should be working in the next version, not entirely sure on the format of the title when a song is playing though so I've assumed it's similar to the regular osu, minus the "!test" and version.

I've also made improvements to efficiency of obtaining song data in the next version (less hanging), and added support for only outputting text if a command returns a value (Example Format: "{prefix [a] suffix} {prefix [t] suffix}" = "prefix Artist suffix prefix Title suffix" ).

Will possibly make a few more changes before uploading the new version~
TakuMii
Also, I'm having issues with the Export function creating an empty config file (which is then auto-imported when osu!np next starts up and causes the config to be blank).

Here is the log:
osu!np - Config
See the end of this message for details on invoking
just-in-time (JIT) debugging instead of this dialog box.

************** Exception Text **************
System.InvalidCastException: Conversion from string "setIdle:Idle
setNP:
setIdle1:I" to type 'Double' is not valid. ---> System.FormatException: Input string was not in a correct format.
at System.Number.ParseDouble(String value, NumberStyles options, NumberFormatInfo numfmt)
at System.Double.Parse(String s, NumberStyles style, IFormatProvider provider)
at Microsoft.VisualBasic.CompilerServices.Conversions.ParseDouble(String Value, NumberFormatInfo NumberFormat)
at Microsoft.VisualBasic.CompilerServices.Conversions.ToDouble(String Value, NumberFormatInfo NumberFormat)
--- End of inner exception stack trace ---
at Microsoft.VisualBasic.CompilerServices.Conversions.ToDouble(String Value, NumberFormatInfo NumberFormat)
at #U.#ke.#ie(Boolean )
at #U.#ke.#fe(Object , EventArgs )
at System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
at System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
at System.Windows.Forms.Control.WndProc(Message& m)
at System.Windows.Forms.ButtonBase.WndProc(Message& m)
at System.Windows.Forms.Button.WndProc(Message& m)
at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)


************** Loaded Assemblies **************
mscorlib
Assembly Version: 4.0.0.0
Win32 Version: 4.0.30319.18051 built by: FX45RTMGDR
CodeBase: file:///C:/Windows/Microsoft.NET/Framework64/v4.0.30319/mscorlib.dll
----------------------------------------
osu!np
Assembly Version: 1.5.0.0
Win32 Version: 1.5.0.0
CodeBase: file:///C:/Users/BlooMassacre/Documents/osu!np/osu!np.exe
----------------------------------------
System.Windows.Forms
Assembly Version: 4.0.0.0
Win32 Version: 4.0.30319.18046 built by: FX45RTMGDR
CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Windows.Forms/v4.0_4.0.0.0__b77a5c561934e089/System.Windows.Forms.dll
----------------------------------------
System.Drawing
Assembly Version: 4.0.0.0
Win32 Version: 4.0.30319.18022 built by: FX45RTMGDR
CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Drawing/v4.0_4.0.0.0__b03f5f7f11d50a3a/System.Drawing.dll
----------------------------------------
System
Assembly Version: 4.0.0.0
Win32 Version: 4.0.30319.18045 built by: FX45RTMGDR
CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System/v4.0_4.0.0.0__b77a5c561934e089/System.dll
----------------------------------------
Microsoft.VisualBasic
Assembly Version: 10.0.0.0
Win32 Version: 11.0.50709.17929 built by: FX45RTMREL
CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/Microsoft.VisualBasic/v4.0_10.0.0.0__b03f5f7f11d50a3a/Microsoft.VisualBasic.dll
----------------------------------------
System.Core
Assembly Version: 4.0.0.0
Win32 Version: 4.0.30319.17929 built by: FX45RTMREL
CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Core/v4.0_4.0.0.0__b77a5c561934e089/System.Core.dll
----------------------------------------
{4a614a8b-eb94-4c04-9fa5-f132a25e32d4}
Assembly Version: 0.0.0.0
Win32 Version: 1.5.0.0
CodeBase: file:///C:/Users/BlooMassacre/Documents/osu!np/osu!np.exe
----------------------------------------
System.Configuration
Assembly Version: 4.0.0.0
Win32 Version: 4.0.30319.18053 built by: FX45RTMGDR
CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Configuration/v4.0_4.0.0.0__b03f5f7f11d50a3a/System.Configuration.dll
----------------------------------------
System.Xml
Assembly Version: 4.0.0.0
Win32 Version: 4.0.30319.18053 built by: FX45RTMGDR
CodeBase: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Xml/v4.0_4.0.0.0__b77a5c561934e089/System.Xml.dll
----------------------------------------

************** JIT Debugging **************
To enable just-in-time (JIT) debugging, the .config file for this
application or computer (machine.config) must have the
jitDebugging value set in the system.windows.forms section.
The application must also be compiled with debugging
enabled.

For example:

<configuration>
<system.windows.forms jitDebugging="true" />
</configuration>

When JIT debugging is enabled, any unhandled exception
will be sent to the JIT debugger registered on the computer
rather than be handled by this dialog box.
Thanks for the frequent updates, btw :) You're doing an awesome job!
Topic Starter
Primula_old
Thank you, YayMii~ :3

v1.6 is released with the following changes~ ^-^
  • ★ Improved efficiency with several features of osu!np (like querying map data, and downloading maps/osu!np updates). The UI should no longer hang for these features, still working on other improvements.
    ☆ Made changes to the command formatting, allowing for text to be grouped with a command so if the command returns nothing, the text will not output at all.
    The new format is: {Prefix[C]Suffix} (The prefix/suffix are optional text)
    Example: {np: [np]} {[diff]} Commands without optional text will still require the {} braces for now, eg: {[np]}
    ★ Support for downloading maps is back using Hexide's mirror, maps will now be correctly named and can easily be installed to Osu!
    ☆ Implemented support for osu!test client.
    ★ Fixed casting error when exporting config.
    ☆ Fixed unhandled exception when attempting to import when no config is found.
    ★ May have potentially fixed the problem which was making few users unable to start osu!np.
Note: You'll have to add {} to all your commands for now even for ones that do not use optional text.
So, for example:
Playing: [np] [diff] - ID: [mid]
Becomes:
Playing: {[np]} {[diff]} - ID: {[mid]} = "Playing: Artist - Title [Difficulty] - ID: #"
Or if you want the text to only output if the commands are not empty:
{np: [np]} {[diff]}{ - ID: [mid]} = "Playing: Artist - Title [Difficulty]" (If [mid] was returned empty)


I'm not entirely sure if the support for osu!test will definitely work, I can't test it myself. >-<
If it doesn't work, can you show me an example of what the osu!test title looks like when playing a map? >-<!


Edit: Updated to v1.7 to add auto-updating and add user-agent to header when downloading.
TakuMii
Wooo, it's working so smoothly now :D

The o!test support is still not working though. I've taken a screenshot of what my titlebar looks like when playing a song:
Topic Starter
Primula_old
Should hopefully be working in v1.8~! ^-^
Additionally added the following:
  • ★ Added ability to optionally downloading maps without video.
    ☆ Added recent updates display to client.
Three updates in one day.. Sorry >-<!!
givenameplz
Hello again, thanks for the updates.
I am having lots of fun with it up until now, hehe.

As I am using the FTP feature alot, I want to point out a few things I found and also a few ideas I had and would really like to see:

  1. Exception while connecting to FTP
    It seems that if you enter invalid information and press the "Start" button of osu!np the FTP function returns an exception. Its not a big deal, but it would be nice if you could catch that.
  2. Primary output is overwritten
    If you choose to upload /np to FTP, the primary output (np.txt) is overwritten by default with the same file thats uploaded to the FTP-Server. Thats a bit annyoing, but minor as I did not need the primary output anyways. (As its not using the primary pattern as told in my next point)
  3. Customize FTP output
    It would be nice to be able to customize the output thats send to the FTP-Server. Up until now its only the mapset and the Online or Offline status. I'd really like to use the placeholders for diff and so on aswell. (As you overwrite the primary output with this anyways, you could use the pattern for it)
  4. Add an "Start osu!" button
    I think this would be handy, as I would only need to run osu!np without any Batch files and the likes, as you already ask the user for the osu! Folder, there shouldn't be a problem finding the osu!.exe. (*´ω`*)
  5. POST requests
    I know you already plan an alternative, but I wanted to throw my idea here anyways, it would be neat if there was an possibility for sending POST requests to web pages.
    With that it would be much easier and much more handy for website users to POST their status to some .php page and save it to a database or output on a website.
    Of course, for savety reasons you should include a field for a "key" that the users defines thats send with the post data, so the user can check it on his backend.
  6. Edit:Upload to FTP does not correctly "go offline"
    Another thing I almost forgot to address, I'll explain: If you push the "Start" button nothing happens, this is fine, osu!np will only upload if you actually run osu!, but the thing bothering me is that its only sending an "Offline" message when you close osu!np, its not sending the message if you press "Stop" or if you quit osu!. I would recommend, for consistency, that its also sending the "Offline" message when you quit osu!.
So far thats everything, looking forward for more, keep going~
show more
Please sign in to reply.

New reply