diff --git a/.gitignore b/.gitignore
index 3771e046f5231f19e073927090fd544f72b72a2f..4cd19ae35edf21e39f509b5568023c829762ec01 100644
--- a/.gitignore
+++ b/.gitignore
@@ -11,4 +11,6 @@
 *.ear
 
 *.iml
-*.idea
\ No newline at end of file
+*.idea
+
+lab08.imgs
diff --git a/src/main/java/koz01/java2/lab08/App.java b/src/main/java/koz01/java2/lab08/App.java
deleted file mode 100644
index 237f340e8369a85fe0adbb9dfaa4dfcccd5e6fb0..0000000000000000000000000000000000000000
--- a/src/main/java/koz01/java2/lab08/App.java
+++ /dev/null
@@ -1,31 +0,0 @@
-package koz01.java2.lab08;
-
-import javafx.application.Application;
-import javafx.scene.Scene;
-import javafx.scene.layout.BorderPane;
-import javafx.stage.Stage;
-
-
-/**
- * JavaFX App
- */
-public class App extends Application {
-
-    @Override
-    public void start(Stage primaryStage) {
-    	try {
-			BorderPane root = new BorderPane();
-			Scene scene = new Scene(root,400,400);
-			scene.getStylesheets().add(getClass().getResource("application.css").toExternalForm());
-			primaryStage.setScene(scene);
-			primaryStage.show();
-		} catch(Exception e) {
-			e.printStackTrace();
-		}
-    }
-
-    public static void main(String[] args) {
-        launch();
-    }
-
-}
\ No newline at end of file
diff --git a/src/main/java/koz01/java2/lab08/IndexReader.java b/src/main/java/koz01/java2/lab08/IndexReader.java
new file mode 100644
index 0000000000000000000000000000000000000000..8ae3d5279801f840144d6c162792bc8cf9a2866e
--- /dev/null
+++ b/src/main/java/koz01/java2/lab08/IndexReader.java
@@ -0,0 +1,61 @@
+
+package koz01.java2.lab08;
+
+import java.io.ByteArrayInputStream;
+import java.io.IOException;
+import java.net.URL;
+import java.nio.ByteBuffer;
+import java.nio.channels.Channels;
+import java.nio.channels.FileChannel;
+import java.nio.channels.ReadableByteChannel;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.StandardOpenOption;
+
+import javafx.scene.image.Image;
+import lombok.extern.log4j.Log4j2;
+
+@Log4j2
+public class IndexReader {
+
+	private static final String URL = "http://kozusznik.cz/resources/java2/";
+	private static final String IMAGE_NAME = "lab08.imgs";
+
+	public Image readImage(int index) {
+
+		try (FileChannel fc = FileChannel.open(getFile()))
+		{
+			byte[] data = getData(fc, index);
+			return new Image(new ByteArrayInputStream(data));
+		}
+		catch (IOException exc) {
+			log.error("read", exc);
+			return null;
+		}
+
+	}
+
+	private Path getFile() throws IOException {
+		Path LocalFile = Files.createTempFile(null, null).getParent().resolve(
+			IMAGE_NAME);
+		if (!Files.exists(LocalFile)) {
+			try (ReadableByteChannel in = Channels.newChannel(new URL(
+				URL + IMAGE_NAME).openStream());
+					FileChannel out = FileChannel.open(LocalFile,
+						StandardOpenOption.CREATE_NEW, StandardOpenOption.WRITE))
+			{
+				ByteBuffer bb = ByteBuffer.allocate(1024 * 1024);
+				while (0 <= in.read(bb)) {
+					bb.flip();
+					out.write(bb);
+					bb.clear();
+				}
+			}
+		}
+		return LocalFile;
+	}
+
+	private byte[] getData(FileChannel fc, int index) throws IOException {
+		return new byte[0];
+	}
+}
diff --git a/src/main/java/koz01/java2/lab08/LocalLoader.java b/src/main/java/koz01/java2/lab08/LocalLoader.java
new file mode 100644
index 0000000000000000000000000000000000000000..2e684656b817b5497675da5ac9dd65919d29d5d7
--- /dev/null
+++ b/src/main/java/koz01/java2/lab08/LocalLoader.java
@@ -0,0 +1,32 @@
+
+package koz01.java2.lab08;
+
+import javafx.application.Application;
+import javafx.fxml.FXMLLoader;
+import javafx.scene.Parent;
+import javafx.scene.Scene;
+import javafx.stage.Stage;
+
+/**
+ * JavaFX App
+ */
+public class LocalLoader extends Application {
+
+	@Override
+	public void start(Stage primaryStage) {
+		try {
+			Parent root = FXMLLoader.load(getClass().getResource("LocalLoader.fxml"));
+			Scene scene = new Scene(root);
+			primaryStage.setScene(scene);
+			primaryStage.show();
+		}
+		catch (Exception e) {
+			e.printStackTrace();
+		}
+	}
+
+	public static void main(String[] args) {
+		launch();
+	}
+
+}
diff --git a/src/main/java/koz01/java2/lab08/LocalLoaderControler.java b/src/main/java/koz01/java2/lab08/LocalLoaderControler.java
new file mode 100644
index 0000000000000000000000000000000000000000..bba07916e16eba7ae65c73b25e26d05eb6789df9
--- /dev/null
+++ b/src/main/java/koz01/java2/lab08/LocalLoaderControler.java
@@ -0,0 +1,19 @@
+package koz01.java2.lab08;
+
+import javafx.fxml.FXML;
+import javafx.scene.control.TextField;
+import javafx.scene.image.ImageView;
+
+public class LocalLoaderControler {
+
+	@FXML
+	private ImageView imageView;
+
+	@FXML
+	private TextField indexTextField;
+
+	public void readButton() {
+		imageView.setImage(new IndexReader().readImage(Integer.parseInt(
+			indexTextField.getText())));
+	}
+}
diff --git a/src/main/java/koz01/java2/lab08/RemoteLoader.java b/src/main/java/koz01/java2/lab08/RemoteLoader.java
new file mode 100644
index 0000000000000000000000000000000000000000..ef69d84097febc98e704e34a24e1e4ed01d1c490
--- /dev/null
+++ b/src/main/java/koz01/java2/lab08/RemoteLoader.java
@@ -0,0 +1,33 @@
+
+package koz01.java2.lab08;
+
+import javafx.application.Application;
+import javafx.fxml.FXMLLoader;
+import javafx.scene.Parent;
+import javafx.scene.Scene;
+import javafx.stage.Stage;
+
+/**
+ * JavaFX App
+ */
+public class RemoteLoader extends Application {
+
+	@Override
+	public void start(Stage primaryStage) {
+		try {
+			Parent root = FXMLLoader.load(getClass().getResource(
+				"RemoteLoader.fxml"));
+			Scene scene = new Scene(root);
+			primaryStage.setScene(scene);
+			primaryStage.show();
+		}
+		catch (Exception e) {
+			e.printStackTrace();
+		}
+	}
+
+	public static void main(String[] args) {
+		launch();
+	}
+
+}
diff --git a/src/main/java/koz01/java2/lab08/RemoteLoaderControler.java b/src/main/java/koz01/java2/lab08/RemoteLoaderControler.java
new file mode 100644
index 0000000000000000000000000000000000000000..8a11cb608e7137be02315cc2e5f3445bf82af6a9
--- /dev/null
+++ b/src/main/java/koz01/java2/lab08/RemoteLoaderControler.java
@@ -0,0 +1,73 @@
+
+package koz01.java2.lab08;
+
+import java.io.ByteArrayInputStream;
+import java.io.IOException;
+import java.net.InetSocketAddress;
+import java.nio.ByteBuffer;
+import java.nio.channels.SocketChannel;
+
+import javafx.fxml.FXML;
+import javafx.scene.control.Button;
+import javafx.scene.control.TextField;
+import javafx.scene.image.Image;
+import javafx.scene.image.ImageView;
+import lombok.extern.log4j.Log4j2;
+
+@Log4j2
+public class RemoteLoaderControler {
+
+	@FXML
+	private ImageView imageView;
+
+	@FXML
+	private TextField indexTextField;
+
+	@FXML
+	private Button load;
+
+	@FXML
+	private TextField adress;
+
+	@FXML
+	private TextField port;
+
+	private SocketChannel socketChannel;
+
+	public void readButton() {
+		try {
+			ByteBuffer bb = ByteBuffer.allocate(4);
+			bb.putInt(Integer.parseInt(indexTextField.getText()));
+			bb.flip();
+			socketChannel.write(bb);
+			bb.clear();
+			socketChannel.read(bb);
+			bb.flip();
+			int size = bb.getInt();
+			bb = ByteBuffer.allocate(size);
+			while (bb.hasRemaining()) {
+
+				socketChannel.read(bb);
+			}
+			bb.flip();
+			imageView.setImage(new Image(new ByteArrayInputStream(bb.array())));
+		}
+
+		catch (IOException exc) {
+			log.error("read", exc);
+		}
+
+	}
+
+	public void connect() {
+		try {
+			socketChannel = SocketChannel.open(new InetSocketAddress(adress.getText(),
+				Integer.parseInt(port.getText())));
+			indexTextField.setDisable(false);
+			load.setDisable(false);
+		}
+		catch (NumberFormatException | IOException exc) {
+			log.error("connect", exc);
+		}
+	}
+}
diff --git a/src/main/resources/koz01/java2/lab08/LocalLoader.fxml b/src/main/resources/koz01/java2/lab08/LocalLoader.fxml
new file mode 100644
index 0000000000000000000000000000000000000000..b588d08e351988618312afed6e918db83391faa6
--- /dev/null
+++ b/src/main/resources/koz01/java2/lab08/LocalLoader.fxml
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<?import javafx.scene.control.Button?>
+<?import javafx.scene.control.Label?>
+<?import javafx.scene.control.TextField?>
+<?import javafx.scene.image.ImageView?>
+<?import javafx.scene.layout.AnchorPane?>
+
+<AnchorPane prefHeight="543.0" prefWidth="472.0" xmlns="http://javafx.com/javafx/15.0.1" xmlns:fx="http://javafx.com/fxml/1" fx:controller="koz01.java2.lab08.LocalLoaderControler">
+   <children>
+      <ImageView fx:id="imageView" fitHeight="472.0" fitWidth="472.0" pickOnBounds="true" preserveRatio="true" />
+      <TextField fx:id="indexTextField" layoutX="193.0" layoutY="503.0" prefHeight="26.0" prefWidth="73.0" />
+      <Label layoutX="122.0" layoutY="503.0" prefHeight="26.0" prefWidth="51.0" text="Index" />
+      <Button layoutX="299.0" layoutY="503.0" mnemonicParsing="false" onAction="#readButton" text="NaÄŤti" />
+   </children>
+</AnchorPane>
diff --git a/src/main/resources/koz01/java2/lab08/RemoteLoader.fxml b/src/main/resources/koz01/java2/lab08/RemoteLoader.fxml
new file mode 100644
index 0000000000000000000000000000000000000000..366bd4cf3fbbdb517b5a0f759af0ae2969cb92fb
--- /dev/null
+++ b/src/main/resources/koz01/java2/lab08/RemoteLoader.fxml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<?import javafx.scene.control.Button?>
+<?import javafx.scene.control.Label?>
+<?import javafx.scene.control.TextField?>
+<?import javafx.scene.image.ImageView?>
+<?import javafx.scene.layout.AnchorPane?>
+
+<AnchorPane prefHeight="636.0" prefWidth="472.0" xmlns="http://javafx.com/javafx/15.0.1" xmlns:fx="http://javafx.com/fxml/1" fx:controller="koz01.java2.lab08.RemoteLoaderControler">
+   <children>
+      <ImageView fx:id="imageView" fitHeight="472.0" fitWidth="472.0" pickOnBounds="true" preserveRatio="true" />
+      <TextField fx:id="indexTextField" disable="true" layoutX="207.0" layoutY="592.0" prefHeight="26.0" prefWidth="73.0" />
+      <Label layoutX="81.0" layoutY="592.0" prefHeight="26.0" prefWidth="103.0" text="Index obrázku" />
+      <Button fx:id="load" disable="true" layoutX="306.0" layoutY="592.0" mnemonicParsing="false" onAction="#readButton" text="NaÄŤti" />
+      <Label layoutX="81.0" layoutY="531.0" text="Adresa" />
+      <TextField fx:id="adress" layoutX="149.0" layoutY="526.0" prefHeight="26.0" prefWidth="131.0" />
+      <TextField fx:id="port" layoutX="207.0" layoutY="560.0" prefHeight="26.0" prefWidth="73.0" />
+      <Label layoutX="81.0" layoutY="565.0" prefHeight="16.0" prefWidth="46.0" text="Port" />
+      <Button fx:id="connect" layoutX="306.0" layoutY="526.0" mnemonicParsing="false" onAction="#connect" text="Připojit" />
+   </children>
+</AnchorPane>